Автор | Сообщение |
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
[см. все]
|
|
Andrey
|
| постоянный участник
|
Пост N: 5389
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.05.17 11:24. Заголовок: Vlad04 пишет: Выбор..
Vlad04 пишет: цитата: | Выбор правой мышкой из контекстного меню ? |
| НЕТ ! Vlad04 пишет: Виснет - там где выбор флагов производиться... Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!! Там даже второй выбор не нужно производить. Первый раз выбираем меню с флагами, потом мышкой кликаем на другой колонке (или стрелкой вверх/вниз) и тоже программа НАГЛУХО виснет !!
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5398
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.05.17 19:32. Заголовок: Привет всем ! Забыл ..
Привет всем ! Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы. Подскажите пожалуйста ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1445
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.05.17 09:25. Заголовок: Andrey пишет Забыл к..
Andrey пишет цитата: | Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы. |
| См. Tsb_addrecord_3 Del_Rec(...) :lNoGrayBar
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1446
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.05.17 19:21. Заголовок: Надоело везде писать..
Надоело везде писать (как бы лишнее, по мне) :bUserKeys := {|nKy,nFl,oBr| OnKeyDown(nKy, nFl, oBr) } и STATIC FUNC OnKeyDown( nKey, nFlg, oBrw ) // обработка KeyDown ... IF nKey == VK_RETURN ... ELSEIF nKey == VK_F2 ... ENDIF RETURN uRet Немного добавил в TsBrowse CLASS TSBrowse FROM TControl ... DATA aUserKeys INIT hb_Hash() DATA lUserKeys INIT .F. ... METHOD UserKeys( nKey, bKey, lCtrl, lShift ) ... ENDCLASS METHOD UserKeys( nKey, bKey, lCtrl, lShift ) CLASS TSBrowse Local cKey := 'other', uVal If HB_ISBLOCK(bKey) // установить блок на ключ в hash If ! empty(nKey) If HB_ISNUMERIC(nKey) cKey := hb_ntos(nKey) cKey += iif( empty(lCtrl ), '', '#' ) cKey += iif( empty(lShift), '', '^' ) ElseIf HB_ISCHAR(nKey) cKey := nKey EndIf EndIf hb_HSet( ::aUserKeys, cKey, bKey ) ::lUserKeys := len(::aUserKeys) > 0 Else // выполнить блок по ключу из hash If HB_ISNUMERIC(nKey) cKey := hb_ntos(nKey) ElseIf HB_ISCHAR(nKey) cKey := nKey EndIf If ::lUserKeys // есть уст. блоки кода uVal := hb_HGetDef( ::aUserKeys, cKey, NIL ) If HB_ISBLOCK(uVal) cKey := Eval( uVal, Self, nKey, cKey, bKey, lCtrl, lChift ) EndIf EndIf EndIf RETURN cKey METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... ::lNoPaint := .F. ::oWnd:nLastKey := ::nLastKey := ::nUserKey := nKey If ::lUserKeys uTemp := hb_ntos(nKey) uTemp += iif( _GetKeyState( VK_CONTROL ), "#", "" ) uTemp += iif( _GetKeyState( VK_SHIFT ), "^", "" ) uVal := hb_HGetDef( ::aUserKeys, uTemp, NIL ) If ! HB_ISBLOCK(uVal) uTemp := 'other' uVal := hb_HGetDef( ::aUserKeys, uTemp, NIL ) Endif If HB_ISBLOCK(uVal) uReturn := Eval( uVal, Self, nKey, uTemp ) If uTemp == 'other' .and. ! HB_ISLOGICAL(uReturn) uReturn := .T. EndIf If uReturn == Nil .or. ( HB_ISLOGICAL(uReturn) .and. ! uReturn ) ::nLastKey := 255 Return 0 EndIf uReturn := NIL EndIf uTemp := uVal := NIL EndIf If ::bUserKeys != Nil ... теперь в проге можно писать так :nFireKey := VK_F4 // default Edit If lRec_Select // режим выбор записи :bLDblClick := {|uP1,uP2,nFl,oBr| Get_Rec(oBr, uP1, uP2, nFl) } :UserKeys(VK_RETURN, {|oBr | Get_Rec(oBr) }) Else // режим Edit записи :bLDblClick := {|uP1,uP2,nFl,oBr| uP1 := uP2 := nFl := Nil, ; oBr:PostMsg( WM_KEYDOWN, oBr:nFireKey, 0 ) } :UserKeys(VK_RETURN, {|oBr | oBr:PostMsg( WM_KEYDOWN, oBr:nFireKey, 0 ) }) EndIf :UserKeys(VK_F2 , {|oBr,nKy,cKy| Add_Rec(oBr, nKy, cKy) }) :UserKeys(VK_F3 , {|oBr,nKy,cKy| Del_Rec(oBr, nKy, cKy) }) :UserKeys(VK_F3 , {|oBr,nKy,cKy| MsgBox(cKy, 'Ctrl + F3') }, .T.) :UserKeys(VK_F3 , {|oBr,nKy,cKy| MsgBox(cKy, 'Shift + F3') }, , .T.) :UserKeys(VK_F3 , {|oBr,nKy,cKy| MsgBox(cKy, 'C + S + F3') }, .T., .T.) // :UserKeys( , {|oBr,nKy,cKy| _LogFile(.T.,cKy, 'other', nKy ) }) // это обработка др. нажатий, уст. на ключ 'other' default Если уст. блок кода возвращает Nil или .F. Method KeyDown завершается (все выполнено), при возврате .T. Method KeyDown работает дальше. Может будет полезно, a c :bUserKeys осталось, как раньше
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1450
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.05.17 08:27. Заголовок: Поясню назначение ко..
Поясню назначение кода Else // выполнить блок по ключу из hash ... Установив на тсб :UserKeys(1.1, {|o|...}) :UserKeys(1.2, {|o|...}) :UserKeys('rpt1', {|o|...}) :UserKeys('rpt2', {|o|...}) ... на кнопках, пунктах, меню и т.д. ( для этого тсб) можно вызывать oBrw1:UserKeys(1.1, Param1, Param2, Param3) oBrw1:UserKeys('rpt2', Param1, Param2, Param3) ... если несколько тсб на окне, то для каждого делаем такие манипуляции
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1101
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.05.17 11:03. Заголовок: SergKis пишет: Може..
SergKis пишет: цитата: | Может будет полезно, a c :bUserKeys осталось, как раньше |
| Благодарю за Ваше предложение и примеры использования этого расширения! Очень интересное дополнение, которое будет доступно, если в коде библиотеки будет определена константа // #define __EXT_USERKEYS__
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1455
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 12:20. Заголовок: gfilatov2002 пишет ..
gfilatov2002 пишет цитата: | будет доступно, если в коде библиотеки будет определена константа // #define __EXT_USERKEYS__ |
| А смысл пересобирать либу ? Изменения минимальны, старые алгоритмы не затронуты. Я забыл, когда последний раз пересобирал либу, пользуюсь (для примеров и проб) родной сборкой. Думается так многие делают.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1102
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.05.17 15:00. Заголовок: SergKis пишет: Изме..
SergKis пишет: цитата: | Изменения минимальны, старые алгоритмы не затронуты. |
| Все правильно, но, вероятно, потребуется определить цитата: | #ifndef __XHARBOUR__ #define __EXT_USERKEYS__ #endif |
| поскольку, например, функция hb_HGetDef() недоступна в xHarbour
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1456
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 18:48. Заголовок: gfilatov2002 Пример..
gfilatov2002 Пример для Harbour (на моей lib): и надо подправить (ошибочка) METHOD UserKeys( nKey, bKey, lCtrl, lShift ) CLASS TSBrowse ... If ::lUserKeys // есть уст. блоки кода uVal := hb_HGetDef( ::aUserKeys, cKey, NIL ) If HB_ISBLOCK(uVal) cKey := Eval( uVal, Self, nKey, cKey, bKey, lCtrl, lShift ) EndIf EndIf
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1457
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 18:53. Заголовок: PS Забыл в примере в..
PS Забыл в примере вывести в StatusBar сообщение о наличии меню на правую кнопку мыши (на тсб)
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1458
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 19:08. Заголовок: PS в моей lib не раб..
PS в моей lib не работает (надо исп. вариант без DEFINE ...) DEFINE SPLITBOX HANDLE hSplit поэтому в примере StatusBar закрыт (на родной MiniGui.lib должно быть Ok!)
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1103
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.05.17 20:24. Заголовок: SergKis пишет: Прим..
SergKis пишет: Благодарю за наглядный пример! SergKis пишет: цитата: | Забыл в примере вывести в StatusBar сообщение о наличии меню на правую кнопку мыши |
| Поправил - пример работает нормально
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1482
Зарегистрирован: 09.10.06
|
|
Отправлено: 28.05.17 20:57. Заголовок: Конечно - это полез..
Конечно - это полезное дополнение. Только мне кажется, что UserKeys не совсем подходящее название метода и того, что этот метод делает. Не помешало бы и добавить что-то вроде SetUserKeys/GetUserKeys
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1459
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 21:27. Заголовок: Петр пишет Не помеша..
Петр пишет цитата: | Не помешало бы и добавить что-то вроде SetUserKeys/GetUserKeys |
| Тогда + DoUserKeys (выполнение), т.е. еще несколько доп. методов. Но в МиниГуи уклон к функциям с параметрами и пляской от них, потому пошел таким путем ("что бы не выделяться" (с))
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1483
Зарегистрирован: 09.10.06
|
|
Отправлено: 28.05.17 22:24. Заголовок: SergKis пишет: Но в..
SergKis пишет: цитата: | Но в МиниГуи уклон к функциям с параметрами и пляской от них, потому пошел таким путем ("что бы не выделяться" (с)) |
| Понятно, но название неподходящее: bUserKeys/UserKeys - клавиша/ключ, дезориентировать будет.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1460
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 23:01. Заголовок: Петр пишет но назван..
Петр пишет цитата: | но название неподходящее: bUserKeys/UserKeys - клавиша/ключ, дезориентировать будет. |
| Т.к. действия bUserKeys с новым методом схожи, то не должно дезориентировать. Что там обработка пользовательских клавиш\ключей, что тут, от этого и брал название. Но если есть подходящее название - нет возражений.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1461
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.05.17 23:04. Заголовок: gfilatov2002 В прим..
gfilatov2002 В примере надо заменить _HMG_ThisControlName на This.Name - это будет правильнее.
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1484
Зарегистрирован: 09.10.06
|
|
Отправлено: 28.05.17 23:54. Заголовок: SergKis пишет: Что ..
SergKis пишет: цитата: | Что там обработка пользовательских клавиш\ключей, что тут |
| Там обработка клавиш, тут - клавиши\ключа Причем у вас обработка события по ключу может быть и не связанной с нажатием какой-либо клавиши. Название должно отображать суть того, что происходит. А что здесь происходит я лично определиться не могу
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1462
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.05.17 00:06. Заголовок: Петр пишет я лично о..
Петр пишет цитата: | я лично определиться не могу |
| Тогда, отдадим на откуп Григорию ( типа, наша хата с краю )
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1463
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.05.17 00:20. Заголовок: Петр пишет Причем у ..
Петр пишет цитата: | Причем у вас обработка события по ключу может быть и не связанной с нажатием какой-либо клавиши. |
| В связи с отсутствием на окне механизма работы через очередь (городить свой обработчик не хочется к каждому окну), к примеру WM_USER + 55 и через Post\SendMessage(hWnd, WM_USER + 55, nIndex\hControl, 0) и на окно вешать подобный механизм UserKeys, приходится вешать клавиши в :UserKeys VK_F21, VK_F22, ... и делать oBrw:PostMsg(...) + oBrw:Cargo с данными. Нажатия клавиш существуют всегда, причем клиент ТРЕБУЕТ дублирование кнопок клавишами КАТЕГОРИЧЕСКИ
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|