Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | 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 |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|
SergKis
|
| постоянный участник
|
Пост N: 1464
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.05.17 09:30. Заголовок: Петр Может смущает ..
Петр Может смущает наличие многих параметров в блоках и функциях (это в основном для информации в MsgBox(...)), так в реальности, можно, практически, обойтись без них (oBrw1 Public\Private): 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 ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1465
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.05.17 10:26. Заголовок: gfilatov2002 пишет ф..
gfilatov2002 пишет цитата: | функция hb_HGetDef() недоступна в xHarbour |
| Может вместо цитата: | #ifndef __XHARBOUR__ #define __EXT_USERKEYS__ #endif |
| сделать #ifndef __XHARBOUR__ FUNC hb_HGetDef( hHash, xKey, xDef ) Local nPos := HGetPos( hHash, xKey ) Return iif( nPos > 0, HGetValuePos( hHash, nPos ), xDef ) #endif
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1466
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.05.17 10:31. Заголовок: PS вернее #ifdef __X..
PS вернее #ifdef __XHARBOUR__ ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1104
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.05.17 11:45. Заголовок: SergKis пишет: верн..
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 Благодарю за помощь
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1485
Зарегистрирован: 09.10.06
|
|
Отправлено: 29.05.17 12:53. Заголовок: SergKis пишет: Може..
SergKis пишет: цитата: | Может смущает наличие многих параметров в блоках и функциях |
| Вот как раз это меня не смущает И даже наоборот, смущает то, что, например, в Events параметры не передаются в оконные события.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1468
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.05.17 07:49. Заголовок: gfilatov2002 Дополн..
gfilatov2002 Дополнительно, что бы было #ifdef __XHARBOUR__ #xtranslate hb_HHasKey( h, k ) => HHasKey( h, k ) #xtranslate hb_HDel( h, k ) => HDel( h, k )
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1488
Зарегистрирован: 09.10.06
|
|
Отправлено: 30.05.17 08:20. Заголовок: SergKis пишет: Допо..
SergKis пишет: цитата: | Дополнительно, что бы было |
| Включите hbcompat.ch из contrib/hbxhb
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5405
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.06.17 12:50. Заголовок: Вопрос по индексам в..
Вопрос по индексам в Tsbrowse. К базе подключёны индексы. 3 индекс создан с ключом = "DESCEND(STR(KView))+UPPER(NAME)" Добавляю запись в базу. 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 После добавления курсор НЕ становиться на добавленной записи, а становиться на первую запись по индексу. Как нужно правильно сделать установку на добавленную запись ?
|
|
|
Dima
|
| |
Пост N: 6446
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.06.17 13:05. Заголовок: Andrey пишет: nOrd..
Andrey пишет: цитата: | nOrderTek := INDEXORD() DBSetOrder( 1 ) .... DBAppend() nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. DBSetOrder( nOrderTek ) |
| А так ? nOrderTek := (oBrw:cAlias)->(INDEXORD()) (oBrw:cAlias)->(DBSetOrder( 1 )) .... (oBrw:cAlias)->(DBAppend()) nTekRec := (oBrw:cAlias)->(RecNo()) lAppend := .T. (oBrw:cAlias)->(DBSetOrder( nOrderTek )) PS Вместо INDEXORD() лучше юзать ordsetfocus() ежели это CDX
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5406
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.06.17 13:12. Заголовок: Dima пишет: А так ?..
Dima пишет: Равнозначно. Можно и так написать. С обычным порядком в индексе у меня всё работает. А если поставить другой индекс с обратным порядком в ключе = "DESCEND(STR(KView))+UPPER(NAME)" То запись перестаёт вставать на правильное место.
|
|
|
Dima
|
| |
Пост N: 6447
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.06.17 13:15. Заголовок: Была такая кака. При..
Была такая кака. Пришлось базу открывать 2 раза с разными алиас , добавление и смену ордера делаем во вспомогательной базе и после в основной (бровс по ней живет) прыгаем куда надо , не меняя ордера естественно. Такую "фигню" под консолью делать не нужно.....
|
|
|
|
Dima
|
| |
Пост N: 6448
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.06.17 13:22. Заголовок: Andrey пишет: Можно..
Andrey пишет: Я имел в виду OrdSetFocus по имени тега
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1510
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.06.17 19:44. Заголовок: Anderey пишет С обы..
Anderey пишет цитата: | С обычным порядком в индексе у меня всё работает. |
| Dima пишет цитата: | Пришлось базу открывать 2 раза с разными алиас , добавление ... |
| По мне, это нормальная практика, т.е. просмотр[ы] по одной, а ввод, удаление, edit по вновь открываемой. А учитывая "тонкости" TsBrowse, возможно, лучший вариант. Повторное открытие, для модификаций еще с s87 практикую.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5418
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.17 15:52. Заголовок: MiniGUI Extended Edi..
MiniGUI Extended Edition 17.05 У меня сделано так: oBrw:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrw:cAlias)->(RecNo()), ; MyFieldEdit( oBrw:aColumns[oBrw:nCell]:Cargo ) } oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:Refresh(.T.) } К базе подключёно 3 индекса. Последний индекс типа: STR(KView)+STR(KFILI)+UPPER(FIO) Всё работает отлично, но после редактирования поля входящее в индекс (например FIO) - курсор прыгает на 6 позиции вниз. Правка столбцов полей KView и KFILI - происходит нормально. Почему ? В FUNCTION MyFieldEdit(aCargo) нет переходов по базе. Только редактирование поля в зависимости от условий: IF lEditField // сетевой захват записи IF (oBrw:cAlias)->(RLock()) FieldPut( FIELDNUM( cPoleField ), cPoleEdit ) (oBrw:cAlias)->KOPERAT := M->nOperat DBCommit() DBUnlock() ENDIF ENDIF
|
|
|
Dima
|
| |
Пост N: 6456
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.06.17 16:46. Заголовок: Andrey пишет: Почем..
Andrey пишет: Покажи скрин до и после редактирования поля FIO
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5419
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.17 17:05. Заголовок: Dima пишет: Покажи ..
Dima пишет: цитата: | Покажи скрин до и после редактирования поля FIO |
| Вот: Если редактировать последние записи в таблице, то курсор перескакивает НИЖЕ записей таблице и на экране становится дублирование записей... Совсем юзер пугается...
|
|
|
Dima
|
| |
Пост N: 6457
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.06.17 17:14. Заголовок: а если закоментить с..
а если закоментить строку oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:Refresh(.T.) }
|
|
|
Dima
|
| |
Пост N: 6458
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.06.17 17:20. Заголовок: Andrey пишет: В FUN..
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
|
| постоянный участник
|
Пост N: 5420
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.17 17:32. Заголовок: Dima пишет: а если ..
Dima пишет: цитата: | а если закоментить строку |
| Сделал так: oBrw:aColumns[nI]:bPostEdit := {|| /*oBrw:GoToRec(nRecBuff)*/, oBrw:Refresh(.T.) } Стало отлично ! Не перескакивает. НО ТЕПЕРЬ другой справочник не работает. Если к базе подключаю только 2 индекса и 2-ой индекс типа: UPPER(NAME), то при редактировании поля NAME и изменению его на другое значение (было: "ООО СтройСервис", стало "1ООО СтройСервис") то КУРСОР остаётся на текущем месте, а отредактированная запись улетает вверх. Как теперь быть ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5421
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.17 17:34. Заголовок: Dima пишет: Только ..
Dima пишет: цитата: | Только RLOCK смотрит в правильный ALIAS , все что ниже х.... знает куда |
| Из терминалки перенёс. Как правильно сделать ?
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|