Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне
Кратко, что нового:
- исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
Отправлено: 31.05.17 00:05. Заголовок: Петр пишет Это можно..
Петр пишет
цитата:
Это можно сделать и изящнее, см.BASIC\WindowProperty
О вкусах не спорю. SET WINDOWPROPERTY "PROP_2" OF Win1 VALUE 2 SET WINDOWPROPERTY "PROP_3" OF Win1 VALUE 3.14 SET WINDOWPROPERTY "PROP_4" OF Win1 VALUE .T. SET WINDOWPROPERTY "PROP_5" OF Win1 VALUE Date() SetProp( Win1.Handle, "PROP_6", hb_serialize( { "One" => 1, 2 => "Two", "Today" => Date(), 5 => NIL, 6 => { .T., .F. } } ) ) а потом RELEASE WINDOWPROPERTY "PROP_2" OF Win1 RELEASE WINDOWPROPERTY "PROP_3" OF Win1 RELEASE WINDOWPROPERTY "PROP_4" OF Win1 RELEASE WINDOWPROPERTY "PROP_5" OF Win1 RELEASE WINDOWPROPERTY "PROP_6" OF Win1 Проходили с MDI интерфейсом - следить за что поставил, что снял - еще то занятие. Не понравилось и отказались.
цитата:
К примеру, если message входит в диапазон WM_USER.., оконная процедура с помощью GetProp получает связанный обьект и выполняет нужный метод или просто вызывает процедуру/выполняет блок кода, функция Events в этом случае не вызывается.
Совершенно не возражаю, а даже был бы благодарен, за такую реализацию. Кто бы сделал.
цитата:
Был уже в истории такой период "hmg objects", чем закончился - не знаю
Вроде была жива, но там тот же минус - база на _HMG_... переменных, обернутая в объекты (они сверху), не так как hwg (просто летает в сравнении, но там другое ...). А когда работают днями не выходя из проги (hmg), при больших кол-вах контролов и окон, становится заметнее прорисовки на глаз, что вызывает вопросы, у клиента, т.к. псевдо ООП крутит макро и ascan. "hmg objects" реализовывать не собираюсь, просто мне так привычнее, после VO (с C не очень дружу).
SergKis
постоянный участник
Пост N: 1474
Зарегистрирован: 17.02.12
Отправлено: 31.05.17 00:08. Заголовок: gfilatov2002 пишет У..
gfilatov2002 пишет
цитата:
У меня сейчас эта функция выглядит так:
Хотелось бы, чтобы объект получался и от Handle окна, не только от имени. Потому и изменения предложил.
Проходили с MDI интерфейсом - следить за что поставил, что снял - еще то занятие.
Наверное вы проходили до включения в MiniGUI EnumProps(). Потому, что с EnumProps все эти манипуляции становятся рутинными.
SergKis
постоянный участник
Пост N: 1476
Зарегистрирован: 17.02.12
Отправлено: 31.05.17 09:46. Заголовок: Петр пишет Наверное ..
Петр пишет
цитата:
Наверное вы проходили до включения в MiniGUI EnumProps(). Потому, что с EnumProps все эти манипуляции становятся рутинными.
Это был 2009 год. Добавив в окно простое _HMG_aFormMiscData1 - решили проблемы наращивания функционала"естественным" способом, аналогичный контролам hmg, т.е. поведение псвесдо объектов контролов и окон одинаково. Сами включали в свою версию EnumProc и это работало, пока не наткнулись (с разрастанием программы) на плавающий завис на нем. Убрали - все стало ok.
Сами включали в свою версию EnumProc и это работало, пока не наткнулись (с разрастанием программы) на плавающий завис на нем. Убрали - все стало ok.
Я не видел сообщений об ошибке на этом форуме. К сожалению, это почти практика для пользователей MiniGUI - смастерить костыль, а не искать причину.
SergKis
постоянный участник
Пост N: 1481
Зарегистрирован: 17.02.12
Отправлено: 31.05.17 13:53. Заголовок: Петр пишет смастерит..
Петр пишет
цитата:
смастерить костыль, а не искать причину.
Когда костыль вылазит только у некоторых клиентов и случ. образом, как то не до практики искать истинную причину. А о сообщениях писать ... не всегда есть смыл. Писал я, что столкнулись, у клиентов, не работает совсем или частично уст. клавишь HotKey и что ... ? Переделали под себя на CLASS hmgBrowseKey, подсунули вместо HotKey и с 10-го работает как часы + в тсб KeyDown ... Как там было "Думать некогда, стучать надо."
SergKis
постоянный участник
Пост N: 1483
Зарегистрирован: 17.02.12
Отправлено: 31.05.17 18:24. Заголовок: gfilatov2002 пишет у..
gfilatov2002 пишет
цитата:
уже переписал эту функцию так
Пример может и так выглядеть. DEFINE WINDOW ... PRIVATE oWnd := _GetWindowObj(This.Name) ... ACTION ... oWnd:Title и так везде. Если в объект добавить ASSIGNы, то oWnd:Title := '...' с использованием WITH OBJECT oWnd :Title и т.д.
////////////////////////////////////////////////////////////////////////////////////////////// Пример с :UserKeys дополнить ... ON RELEASE dbCloseAll()
DEFINE MAIN MENU POPUP 'MENU_1' ITEM 'Item main menu 1.1' ACTION oWnd:UserKeys( This.Name, {3,2,1,0} ) NAME M_1_1 IMAGE 'n1' ITEM 'Item main menu 1.2' ACTION oWnd:UserKeys( This.Name, {1,2,3,4} ) NAME M_1_2 IMAGE 'n2' ITEM 'Item main menu 1.3' ACTION oWnd:UserKeys( This.Name, {'A','B'} ) NAME M_1_3 IMAGE 'n3' ITEM 'Item main menu 1.4' ACTION oWnd:UserKeys( This.Name, {'C'} ) NAME M_1_4 IMAGE 'n4' ITEM 'Item main menu 1.5' ACTION oWnd:UserKeys( This.Name ) NAME M_1_5 IMAGE 'n5' ITEM 'Item main menu 1.6' ACTION oWnd:UserKeys( This.Name ) NAME M_1_6 IMAGE 'n6' ITEM 'Item main menu 1.7' ACTION oWnd:UserKeys( This.Name ) NAME M_1_7 IMAGE 'n7' ITEM 'Item main menu 1.8' ACTION oWnd:UserKeys( This.Name ) NAME M_1_8 IMAGE 'n8' ITEM 'Item main menu 1.9' ACTION oWnd:UserKeys( This.Name ) NAME M_1_9 IMAGE 'n9' SEPARATOR ITEM 'Exit' ACTION oWnd:UserKeys( This.Name ) NAME M_1_0 END POPUP POPUP 'MENU_2' ITEM 'Item main menu 2.1' ACTION oWnd:UserKeys( This.Name, 2.1 ) NAME M_2_1 IMAGE 'n1' ITEM 'Item main menu 2.2' ACTION oWnd:UserKeys( This.Name, 2.2 ) NAME M_2_2 IMAGE 'n2' ITEM 'Item main menu 2.3' ACTION oWnd:UserKeys( This.Name, 2.3 ) NAME M_2_3 IMAGE 'n3' END POPUP POPUP 'MENU_3' ITEM 'Item main menu 3.1' ACTION oWnd:UserKeys( This.Name ) NAME M_3_1 IMAGE 'n1' ITEM 'Item main menu 3.2' ACTION oWnd:UserKeys( This.Name ) NAME M_3_2 IMAGE 'n2' ITEM 'Item main menu 3.3' ACTION oWnd:UserKeys( This.Name ) NAME M_3_3 IMAGE 'n3' END POPUP END MENU
DEFINE STATUSBAR ...
SergKis
постоянный участник
Пост N: 1485
Зарегистрирован: 17.02.12
Отправлено: 01.06.17 18:31. Заголовок: PS Если ACTION контр..
PS Если ACTION контрола не задам, по умолчанию, можно выполнять oWnd:UserKeys( This.Name ) Проще писать.
Отправлено: 01.06.17 22:40. Заголовок: PS. промахнулся по ..
PS. промахнулся по кнопке. Еще
ITEM 'Item main menu 2.3' ACTION oWnd:UserKeys( This.Name, 2.3 ) NAME M_2_3 IMAGE 'n3' ITEM 'Item main menu 2.4' ACTION oWnd:UserKeys( This.Name ) NAME M_2_4 IMAGE 'n4' ITEM 'Item main menu 2.5' ACTION oWnd:UserKeys( This.Name ) NAME M_2_5 IMAGE 'n5'
gfilatov2002
moderator
Пост N: 1112
Зарегистрирован: 11.02.10
Отправлено: 02.06.17 11:48. Заголовок: SergKis пишет: В пр..
SergKis пишет:
цитата:
В пример по использованию Cargo
Благодарю за Вашу помощь! Добавил такое описание в текущий changelog:
* New: Added the simple TWndData class for a storing of the windows data. There are the following access variables in the above class now: - Index, Name, Handle, ParentHandle, Type, VarName; - Title, Row, Col, Width, Height, ClientWidth, ClientHeight. Added the readonly property 'Object' for the all windows. Usage: - function syntax: oWin := GetProperty( ThisWindow.Name, "Object" ) - pseudo-OOP syntax: oWin := ThisWindow.Object MsgInfo( oWin:Title, oWin:Name ) Added the method UserKeys( Key, Block ) and the associated set/get TKeyData class for assigning and executing a codeblock for the objects. The above classes are guarded by the constant _DEBUG_ in the sources (look at minigui.ch in folder \include). Suggested and contributed by SergKis. (see demo in folder \samples\Advanced\Tsb_UserKeys)
Всем пока - убегаю в отпуск
Петр
постоянный участник
Пост N: 1493
Зарегистрирован: 09.10.06
Отправлено: 02.06.17 14:17. Заголовок: SergKis пишет: у кл..
SergKis пишет:
цитата:
у клиентов, не работает совсем или частично уст. клавишь HotKey и что ... ?
Это нормально, к Минигуи претензий не может быть никаких (почти). HotKey в библиотеке построены на RegisterHotKey(), описание которой с указанием причин отказа в регистрации можно легко найти в нете. К тому же HotKey system-wide.
Вот интересно почему в MiniGUI не реализована поддержка акселераторов (accelerators)?
Петр
постоянный участник
Пост N: 1494
Зарегистрирован: 09.10.06
Отправлено: 02.06.17 14:22. Заголовок: Ваше решение (UserKe..
Ваше решение (UserKeys), базированное на WM_KEYDOWN, - это нормальное рабочее решение.
Но вот что пишет msdn
цитата:
You could implement keyboard shortcuts by handling individual WM_KEYDOWN messages, but accelerator tables provide a better solution that: -Requires less coding; -Consolidates all of your shortcuts into one data file; -Supports localization into other languages; -Enables shortcuts and menu commands to use the same application logic.
Петр
постоянный участник
Пост N: 1495
Зарегистрирован: 09.10.06
Отправлено: 02.06.17 14:25. Заголовок: Поддержку акселерато..
Ограниченную поддержку акселераторов в MiniGUI организовать просто
PUBLIC hMenu := LoadMenu( Nil, 'MainMenu' ) PUBLIC hAccel := LoadAccelerators( Nil, 'FontAccel' )
if Empty( hAccel ) quit endif
SetGlobalListener( 'App_OnEvents' )
return
////////////////////////////////////////////////////////////////////////////// function Main()
DEFINE WINDOW Win_1 ; CLIENTAREA 400, 400 ; BACKCOLOR BLACK ; TITLE 'Accelerators Demo' ; MAIN ; ON INIT ; ( ; SetMenu( ThisWindow.Handle, hMenu ), ; SetAccelerators( ThisWindow.Handle, hAccel ) ; ) ; ON RELEASE ; ( ; DestroyMenu( hMenu ), ; DestroyAcceleratorTable( hAccel ) ; )
END WINDOW
Win_1.Center Win_1.Activate
return 0
////////////////////////////////////////////////////////////////////////////// function App_OnEvents( hWnd, nMsg, wParam, lParam )
local nResult
switch nMsg case WM_COMMAND switch LoWord( wParam ) case IDM_REGULAR case IDM_BOLD case IDM_ITALIC case IDM_ULINE MsgInfo( 'ID:' + hb_NtoS( LoWord( wParam ) ), iif( 0 == HiWord( wParam ), 'Menu', 'Accelerator' ) ) nResult := 0 exit otherwise nResult := Events( hWnd, nMsg, wParam, lParam ) end exit otherwise nResult := Events( hWnd, nMsg, wParam, lParam ) end
return nResult
////////////////////////////////////////////////////////////////////////////// #pragma BEGINDUMP /* Parts of this code is contributed and used here under permission of his author: Copyright 2016 (C) P.Chornyj <myorg63@mail.ru> */
Все даты в формате GMT
3 час. Хитов сегодня: 219
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет