On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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:....



Спасибо: 0 
Профиль
Ответов - 300 , стр: 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 пишет:

 цитата:
Все работает !



Виснет - там где выбор флагов производиться...
Один раз выбрать можно, на втором - программа НАГЛУХО ВИСНЕТ !!!
Там даже второй выбор не нужно производить.
Первый раз выбираем меню с флагами, потом мышкой кликаем на другой колонке (или стрелкой вверх/вниз) и тоже программа НАГЛУХО виснет !!

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5398
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.05.17 19:32. Заголовок: Привет всем ! Забыл ..


Привет всем !
Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы.
Подскажите пожалуйста ?

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1445
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.05.17 09:25. Заголовок: Andrey пишет Забыл к..


Andrey пишет
 цитата:
Забыл как сделать чтобы после выбора из tsbrowse оставалась серая линия на выбранной строке таблицы.


См. Tsb_addrecord_3
Del_Rec(...)
:lNoGrayBar

Спасибо: 0 
Профиль
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 осталось, как раньше



Спасибо: 0 
Профиль
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)
...
если несколько тсб на окне, то для каждого делаем такие манипуляции


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1101
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.05.17 11:03. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может будет полезно, a c :bUserKeys осталось, как раньше


Благодарю за Ваше предложение и примеры использования этого расширения!
Очень интересное дополнение, которое будет доступно, если в коде библиотеки будет определена константа
// #define __EXT_USERKEYS__


Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1455
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.17 12:20. Заголовок: gfilatov2002 пишет ..


gfilatov2002 пишет
 цитата:
будет доступно, если в коде библиотеки будет определена константа
// #define __EXT_USERKEYS__


А смысл пересобирать либу ?
Изменения минимальны, старые алгоритмы не затронуты.
Я забыл, когда последний раз пересобирал либу, пользуюсь (для примеров и проб) родной сборкой.
Думается так многие делают.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1102
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.05.17 15:00. Заголовок: SergKis пишет: Изме..


SergKis пишет:

 цитата:
Изменения минимальны, старые алгоритмы не затронуты.


Все правильно, но, вероятно, потребуется определить

 цитата:

#ifndef __XHARBOUR__
#define __EXT_USERKEYS__
#endif


поскольку, например, функция hb_HGetDef() недоступна в xHarbour

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1457
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.17 18:53. Заголовок: PS Забыл в примере в..


PS
Забыл в примере вывести в StatusBar сообщение о наличии меню на правую кнопку мыши (на тсб)

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1458
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.17 19:08. Заголовок: PS в моей lib не раб..


PS
в моей lib не работает (надо исп. вариант без DEFINE ...)
DEFINE SPLITBOX HANDLE hSplit
поэтому в примере StatusBar закрыт (на родной MiniGui.lib должно быть Ok!)

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1103
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.05.17 20:24. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример для Harbour


Благодарю за наглядный пример!

SergKis пишет:

 цитата:
Забыл в примере вывести в StatusBar сообщение о наличии меню на правую кнопку мыши


Поправил - пример работает нормально

Спасибо: 0 
Профиль
Петр
постоянный участник


Пост N: 1482
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.05.17 20:57. Заголовок: Конечно - это полез..


Конечно - это полезное дополнение.

Только мне кажется, что UserKeys не совсем подходящее название метода и того, что этот метод делает.

Не помешало бы и добавить что-то вроде SetUserKeys/GetUserKeys

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1459
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.17 21:27. Заголовок: Петр пишет Не помеша..


Петр пишет
 цитата:
Не помешало бы и добавить что-то вроде SetUserKeys/GetUserKeys


Тогда + DoUserKeys (выполнение), т.е. еще несколько доп. методов.
Но в МиниГуи уклон к функциям с параметрами и пляской от них, потому пошел таким путем ("что бы не выделяться" (с))


Спасибо: 0 
Профиль
Петр
постоянный участник


Пост N: 1483
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.05.17 22:24. Заголовок: SergKis пишет: Но в..


SergKis пишет:

 цитата:
Но в МиниГуи уклон к функциям с параметрами и пляской от них, потому пошел таким путем ("что бы не выделяться" (с))


Понятно, но название неподходящее: bUserKeys/UserKeys - клавиша/ключ, дезориентировать будет.


Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1460
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.17 23:01. Заголовок: Петр пишет но назван..


Петр пишет
 цитата:
но название неподходящее: bUserKeys/UserKeys - клавиша/ключ, дезориентировать будет.


Т.к. действия bUserKeys с новым методом схожи, то не должно дезориентировать.
Что там обработка пользовательских клавиш\ключей, что тут, от этого и брал название.
Но если есть подходящее название - нет возражений.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1461
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.17 23:04. Заголовок: gfilatov2002 В прим..


gfilatov2002
В примере надо заменить _HMG_ThisControlName на This.Name - это будет правильнее.

Спасибо: 0 
Профиль
Петр
постоянный участник


Пост N: 1484
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 28.05.17 23:54. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что там обработка пользовательских клавиш\ключей, что тут


Там обработка клавиш, тут - клавиши\ключа
Причем у вас обработка события по ключу может быть и не связанной с нажатием какой-либо клавиши.

Название должно отображать суть того, что происходит. А что здесь происходит я лично определиться не могу

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 1462
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.05.17 00:06. Заголовок: Петр пишет я лично о..


Петр пишет
 цитата:
я лично определиться не могу


Тогда, отдадим на откуп Григорию ( типа, наша хата с краю )

Спасибо: 0 
Профиль
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 с данными. Нажатия клавиш существуют всегда, причем клиент ТРЕБУЕТ дублирование кнопок клавишами КАТЕГОРИЧЕСКИ


Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 572
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет