Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 209, стр: 1 2 3 4 5 6 7 8 9 10 11 All

SergKis: Петр Может смущает наличие многих параметров в блоках и функциях (это в основном для информации в MsgBox(...)), так в реальности, можно, практически, обойтись без них (oBrw1 Public\Private):[pre2] oBrw:bLDblClick := {|| oBrw1:PostMsg( WM_KEYDOWN, oBrw1:nFireKey, 0 ) } oBrw:UserKeys(VK_RETURN, {|| oBrw1:PostMsg( WM_KEYDOWN, oBrw1:nFireKey, 0 ) }) или oBrw:UserKeys(VK_RETURN, {|obr| obr:PostMsg( WM_KEYDOWN, obr:nFireKey, 0 ) }) :UserKeys('SetMode_1' , {|obr| Set_Mode(obr, 1)}) :UserKeys('SetMode_2' , {|obr| Set_Mode(obr, 2)}) или :UserKeys('SetMode_1' , {|| Set_Mode(oBrw1, 1)}) :UserKeys('SetMode_2' , {|| Set_Mode(oBrw1, 2)}) или :UserKeys('SetMode_1' , {|| Set_Mod1()}) // внутри функций :UserKeys('SetMode_2' , {|| Set_Mod2()}) // используем oBrw1 ... [/pre2]

SergKis: gfilatov2002 пишет функция hb_HGetDef() недоступна в xHarbour Может вместо #ifndef __XHARBOUR__ #define __EXT_USERKEYS__ #endif сделать [pre2] #ifndef __XHARBOUR__ FUNC hb_HGetDef( hHash, xKey, xDef ) Local nPos := HGetPos( hHash, xKey ) Return iif( nPos > 0, HGetValuePos( hHash, nPos ), xDef ) #endif [/pre2]

SergKis: PS вернее #ifdef __XHARBOUR__ ...

gfilatov2002: SergKis пишет: вернее #ifdef __XHARBOUR__ Заменил вызов HGetValuePos() на HGetValueAt() и добавил переопределение еще для двух функций #ifdef __XHARBOUR__ /* Hash item functions */ #xtranslate hb_Hash( [<x,...>] ) => Hash( <x> ) #xtranslate hb_HSet( [<x,...>] ) => HSet( <x> ) #endif теперь UserKeys работает и под xHarbour Благодарю за помощь

Петр: SergKis пишет: Может смущает наличие многих параметров в блоках и функциях Вот как раз это меня не смущает И даже наоборот, смущает то, что, например, в Events параметры не передаются в оконные события.

SergKis: gfilatov2002 Дополнительно, что бы было #ifdef __XHARBOUR__ #xtranslate hb_HHasKey( h, k ) => HHasKey( h, k ) #xtranslate hb_HDel( h, k ) => HDel( h, k )

Петр: SergKis пишет: Дополнительно, что бы было Включите hbcompat.ch из contrib/hbxhb

Andrey: Вопрос по индексам в Tsbrowse. К базе подключёны индексы. 3 индекс создан с ключом = "DESCEND(STR(KView))+UPPER(NAME)" Добавляю запись в базу. [pre2] nOrderTek := INDEXORD() DBSetOrder( 1 ) .... DBAppend() nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. DBSetOrder( nOrderTek ) .... IF lAppend // была добавлена запись oBrw:Refresh(.T.) oBrw:GoToRec(nTekRec) ENDIF Form_1.oBrw.Setfocus RETURN Nil [/pre2] После добавления курсор НЕ становиться на добавленной записи, а становиться на первую запись по индексу. Как нужно правильно сделать установку на добавленную запись ?

Dima: Andrey пишет: nOrderTek := INDEXORD() DBSetOrder( 1 ) .... DBAppend() nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. DBSetOrder( nOrderTek ) А так ? [pre2] nOrderTek := (oBrw:cAlias)->(INDEXORD()) (oBrw:cAlias)->(DBSetOrder( 1 )) .... (oBrw:cAlias)->(DBAppend()) nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. (oBrw:cAlias)->(DBSetOrder( nOrderTek )) [/pre2] PS Вместо INDEXORD() лучше юзать ordsetfocus() ежели это CDX

Andrey: Dima пишет: А так ? Равнозначно. Можно и так написать. С обычным порядком в индексе у меня всё работает. А если поставить другой индекс с обратным порядком в ключе = "DESCEND(STR(KView))+UPPER(NAME)" То запись перестаёт вставать на правильное место.

Dima: Была такая кака. Пришлось базу открывать 2 раза с разными алиас , добавление и смену ордера делаем во вспомогательной базе и после в основной (бровс по ней живет) прыгаем куда надо , не меняя ордера естественно. Такую "фигню" под консолью делать не нужно.....

Dima: Andrey пишет: Можно и так написать Я имел в виду OrdSetFocus по имени тега

SergKis: Anderey пишет С обычным порядком в индексе у меня всё работает. Dima пишет Пришлось базу открывать 2 раза с разными алиас , добавление ... По мне, это нормальная практика, т.е. просмотр[ы] по одной, а ввод, удаление, edit по вновь открываемой. А учитывая "тонкости" TsBrowse, возможно, лучший вариант. Повторное открытие, для модификаций еще с s87 практикую.

Andrey: MiniGUI Extended Edition 17.05 У меня сделано так: [pre2] oBrw:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrw:cAlias)->(RecNo()), ; MyFieldEdit( oBrw:aColumns[oBrw:nCell]:Cargo ) } oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:Refresh(.T.) } [/pre2] К базе подключёно 3 индекса. Последний индекс типа: STR(KView)+STR(KFILI)+UPPER(FIO) Всё работает отлично, но после редактирования поля входящее в индекс (например FIO) - курсор прыгает на 6 позиции вниз. Правка столбцов полей KView и KFILI - происходит нормально. Почему ? В FUNCTION MyFieldEdit(aCargo) нет переходов по базе. Только редактирование поля в зависимости от условий: [pre2] IF lEditField // сетевой захват записи IF (oBrw:cAlias)->(RLock()) FieldPut( FIELDNUM( cPoleField ), cPoleEdit ) (oBrw:cAlias)->KOPERAT := M->nOperat DBCommit() DBUnlock() ENDIF ENDIF [/pre2]

Dima: Andrey пишет: Почему ? Покажи скрин до и после редактирования поля FIO

Andrey: Dima пишет: Покажи скрин до и после редактирования поля FIO Вот: Если редактировать последние записи в таблице, то курсор перескакивает НИЖЕ записей таблице и на экране становится дублирование записей... Совсем юзер пугается...

Dima: а если закоментить строку oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:Refresh(.T.) }

Dima: Andrey пишет: В FUNCTION MyFieldEdit(aCargo) нет переходов по базе. Только редактирование поля в зависимости от условий: IF lEditField // сетевой захват записи IF (oBrw:cAlias)->(RLock()) FieldPut( FIELDNUM( cPoleField ), cPoleEdit ) (oBrw:cAlias)->KOPERAT := M->nOperat DBCommit() DBUnlock() ENDIF ENDIF Прикольно Только RLOCK смотрит в правильный ALIAS , все что ниже х.... знает куда

Andrey: Dima пишет: а если закоментить строку Сделал так: oBrw:aColumns[nI]:bPostEdit := {|| /*oBrw:GoToRec(nRecBuff)*/, oBrw:Refresh(.T.) } Стало отлично ! Не перескакивает. НО ТЕПЕРЬ другой справочник не работает. Если к базе подключаю только 2 индекса и 2-ой индекс типа: UPPER(NAME), то при редактировании поля NAME и изменению его на другое значение (было: "ООО СтройСервис", стало "1ООО СтройСервис") то КУРСОР остаётся на текущем месте, а отредактированная запись улетает вверх. Как теперь быть ?

Andrey: Dima пишет: Только RLOCK смотрит в правильный ALIAS , все что ниже х.... знает куда Из терминалки перенёс. Как правильно сделать ?



полная версия страницы