On-line: Haz, tnsr2, гостей 1. Всего: 3 [подробнее..]
АвторСообщение
gfilatov
модератор




Пост N: 699
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)


Начало темы находится здесь, а теперь

АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №48, которая выйдет в конце недели.
Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне

Кратко, что нового:

- исправление обнаруженных ошибок и неточностей кода;
- новый класс HEADERIMAGE для Grid и Browse;
- свойство Address в Hyperlink может теперь открывать папку или файл на диске;
- добавлен NOTABSTOP класс для Browse;
- поддержка пользовательских компонентов (заимствована из оффициального релиза);
- расширения и исправления в библиотеках TsBrowse и PropGrid;
- обновлены сборки Харбор и HMGS-IDE;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


SergKis
постоянный участник




Пост N: 1489
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.06.17 16:25. Заголовок: Петр 1. Не очень по..


Петр
1.
Не очень понимаю, как это поможет решить задачу, установки таблицы- код нажатой клавиши и исп. блока кода
В VO это решалось, в основном, через ресурсный редактор, но этого хотелось бы избежать.
В Events нет WM_KEYDOWN (только WM_HOTKEY). Если на окне есть Tsb (несколько), и по hWnd получается объект тсб, то обработчик oBrw:HandleEvent, т.е. работают уст. клавиши на тсб, что нормально. Что мешает, вкл. обработчик на WN_KEYDOWN (тсб проскочил), схематично
         
IF IsInitMenuPopup .AND. wParam == VK_ESCAPE
_CloseMenu()
ELSE
i := ascan( _HMG_aControlHandles, hWnd )
If i > 0
oWnd := _GetWindowObj( _HMG_aControlParentHandle[ i ] )
If HB_ISOBJECT(oWnd)
/* в объект окна добавляем объект oKeyDown (похожий на TKeyData, для VK_клавиш) и выполняем блок кода (если установлен)
с передачей Indexа контрола, который в фокусе, для вып. _DoControlEventprocedure(bBlock, i ), для обрамления переменными
_HMG_This... Ведь в фокусе могут быть кнопка, GetBox, ..., т.е. ставим таблицу
oWnd:KeyDown(VK_..., {|o...| ... })
Так же можем сделать и для WM_KEYUP, oKeyUp ...
Что бы разъединить схемы работы wm_HotKey (сейчас в работе) и wm_KeyDown, в класс окна поставим :lHotKey := .T. - как сейчас.
Что успел посмотреть, вроде склеивается (надо подправить возврат после UserKey, что то перепутал\недосмотрел), добавить в пример кнопки Button[ex], GetBox, др. окно и пробовать (это планы, вопрос только время найти. Машина сломалась, время нашлось. что то сделал, пока в ремонте).
А Post\SendMsg по нажатиям\отпусканиям можем посылать др. окнам, с того, что в фокусе и получить с др. окна на текущее.
*/
RETURN 0
EndIf
EndIf
ENDIF
exit

2. Уже писал, с С\WinApi не очень дружу, потому кто бы сделал (но не я)




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


Пост N: 1500
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.06.17 18:43. Заголовок: SergKis пишет: Не ..


SergKis пишет:

 цитата:
Не очень понимаю, как это поможет решить задачу, установки таблицы- код нажатой клавиши и исп. блока кода


А в чем проблема? Я же написал - пример ограниченной поддержки, с минимальным изменением кода библиотеки. Полную интеграцию можно провести по разному - стандартный поиск в массивах никто не отменял.

SergKis пишет:

 цитата:
В VO это решалось, в основном, через ресурсный редактор, но этого хотелось бы избежать.


Опять же пример с упором на работу с ресурсами. Таблицу акселераторов также можно и создавать и менять на лету. Но это тема другого примера.

SergKis пишет:

 цитата:
Так же можем сделать и для WM_KEYUP


Да мы и теперь любое сообщение (причем без всяких дополнительных обьектов) можем обрабатывать (set events) - ничего не мешает.






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




Пост N: 1490
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.06.17 20:00. Заголовок: Петр пишет можем об..


Петр пишет
 цитата:
можем обрабатывать (set events) - ничего не мешает.


В версии 2.07 этого нет, да я писал, что такое решение на постоянной основе мне не по душе (как отладка какого то решения - можно использовать).
Лучше привести код Evens к нужному решению, чем плодить set eventsы.
В целом проблема решена (на нашей версии) работать без HotKey, но если переходить на тек. версию, все проблемы SET KEY ... ACTION ... опять вылезут.
Потому я и поднимаю волну, но пока перехода не предвидится это не горит, а других все устраивает.
Петр СПАСИБО за участие


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




Пост N: 1114
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.06.17 20:52. Заголовок: Петр пишет: пример ..


Петр пишет:

 цитата:
пример с упором на работу с ресурсами


Добавил такое описание в текущий файл changelog:
  * New: Added possibility to load a Menu from a resource with the accelerators. 
It was a postponed user's request.
Contributed by Petr Chornyj <myorg63@mail.ru>
(see demo in folder \samples\Basic\MenuRES)
Благодарю за помощь

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


Пост N: 1501
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.06.17 21:17. Заголовок: MenuRES, я так понял..


MenuRES, я так понял, по аналогии с MenuDBF.

gfilatov2002 пишет:

 цитата:
Благодарю за помощь



Да не за что, будет что-то интересное поделюсь еще

В часности, SergKis подбросил интересную идею, попробую реализовать что-то подобное

ON APPEVENT [NAME] <evName> [ID <id>] | [AUTO] EVAL <{block}> [ONCE]
EMIT <evName>





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




Пост N: 1491
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.06.17 05:06. Заголовок: Петр пишет попробую..


Петр пишет
 цитата:
попробую реализовать что-то подобное
ON APPEVENT [NAME] <evName> [ID <id>] | [AUTO] EVAL <{block}> [ONCE]
EMIT <evName>


Как это поможет реализовать такую схему (из HwGui)
 
CLASS HCustomWindow содержит переменную для наращивания обработчика для своих нужд
DATA bOther
...
METHOD onEvent( msg, wParam, lParam ) CLASS HCustomWindow
LOCAL i

// Writelog( "== "+::Classname()+Str(msg)+IIF(wParam!=NIL,Str(wParam),"NIL")+IIF(lParam!=NIL,Str(lParam),"NIL") )

IF ( i := Ascan( aCustomEvents[ EVENTS_MESSAGES ], msg ) ) != 0
RETURN Eval( aCustomEvents[ EVENTS_ACTIONS, i ], Self, wParam, lParam )

ELSEIF ::bOther != NIL

RETURN Eval( ::bOther, Self, msg, wParam, lParam )

ENDIF

RETURN - 1
от этого класса наследованы окна, контролы и следовательно задав :bOther, получаем работу своего обработчика как на окна, так и на контролах.
В МиниГуи есть некоторве обработчики на контролы, что позволило расширить поведение их
Function OLABELEVENTS( hWnd, nMsg, wParam, lParam )
...
ElseIf nMsg == WM_HMG_NOTIFY_LBL // BAA
IF ValType( _HMG_aControlMiscData1 [ i ] [4] )=='B'
_DoControlEventProcedure( _HMG_aControlMiscData1[ i ][4], i )
ELSE // быстрый refresh
MoveWindow( _HMG_aControlHandles[ i ], ; // hWnd
_HMG_aControlCol[ i ], ; // X
_HMG_aControlRow[ i ], ; // Y
_HMG_aControlWidth[ i ], ; // W
_HMG_aControlHeight[ i ], .T. ) // H

SetWindowText( _HMG_aControlHandles[ i ], ; // hWnd
_HMG_aControlCaption[ i ] ) // Text
ENDIF
EndIf

Function OGETEVENTS( hWnd, nMsg, wParam, lParam )
что позволило реализовать для GetBox обработку событий
ASSIGN OnEscape( bOnEscape )
ASSIGN OnEnter( bOnEnter )
ASSIGN OnDown( bOnDown )
ASSIGN OnUp( bOnUp )
ASSIGN OnF5( bOnF5 )
ASSIGN OnDblClick( bOnDblClick )
ASSIGN OnClick( bOnClick )
ASSIGN OnSetCaret( bOnSetCaret )
ASSIGN OnAfter( bOnSetAfter )
METHOD OnBlock( bPostBlock )
METHOD OnKeyEvent(nExit)



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




Пост N: 1492
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.06.17 07:16. Заголовок: Петр Чем Ваше решен..


Петр
Чем Ваше решение будет лучше, к примеру, такого (схема)
в класс вводим переменную
:oEvens := TKeyData():New()
:UserKeys(WM_..., {|o| ... })
:UserKeys(WM_KEYDOWN, {|o| o:OnKeyDownUp(...) })
:UserKeys(WM_KEYUP, {|o| o:OnKeyDownUp(...) })
...
:oKeyDownUp := TKeyDownUp():New()
METHOD OnKeyDownUp(...)
METHOD OnEvens( nMsg, wParam, Param )
функция Events по hWnd получает объект и выполняет :OnEvens
такой же класс можно сделать для контролов и в _Define...
таким образом получим обработчики на контролы, т.е.
функция Events по hWnd получает объект и выполняет :OnEvens на контрол


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




Пост N: 1493
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.06.17 07:19. Заголовок: PS. читать так тако..


PS. читать так
такой же класс можно сделать для контролов и в _Define... кониролов заполнить
...

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


Пост N: 1502
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.06.17 11:22. Заголовок: SergKis пишет: В ве..


SergKis пишет:

 цитата:
В версии 2.07 этого нет, да я писал, что такое решение на постоянной основе мне не по душе (как отладка какого то решения - можно использовать).
Лучше привести код Evens к нужному решению, чем плодить set eventsы.



Я уже, вроде, обьяснял

2012/02/14: HMG Extended Edition 2.0.7 Published.
2007/02/15: Build 31 (HMG 1.3 Extended) Published.
* New: SET EVENTS FUNCTION TO <funcname> command.

Это конечно, если ваша версия 2.07 и HMG Extended Edition 2.0.7 одно и тоже

В большинстве случаев функция - обработчик событий, устанавливаемая посредством set events func, является дополнением к Events
и может использоваться в таких случаях
1) При обработке сообщений, которые неизвестны Events;
2) Для увеличения скорости реакции приложения на сообщение;
3) Для отладки;
4) Специальные случае (вроде отключение (изменение) реакции на действия пользователя в демо - версии)

Если вы посмотрите, те примеры с использованием set events func to, которые приводил я, то в большинстве случаев после каких то манипуляций
вызывается стандартный обработчик Events.
И использование set events func to не отменяет работу над улучшением качества Events.


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


Пост N: 1503
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.06.17 11:35. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как это поможет реализовать такую схему (из HwGui)


SergKis пишет:

 цитата:
Чем Ваше решение будет лучше, к примеру, такого (схема)



Это вообще, что называется "из другой оперы". Реализую и выложу здесь, тогда и вопросы можно будет по существу задавать.

P.S. Присмотритесь к TTaskDialog - уверен, что найдете для себя много интересного.

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




Пост N: 1504
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.06.17 17:24. Заголовок: gfilatov2002 К :Use..


gfilatov2002
К :UserKeys добавил Evens блоки кода по WM_USER+... сообщениям с примером http://my-files.ru/3d4ctz
Что сделал Скрытый текст



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




Пост N: 1505
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.06.17 17:41. Заголовок: PS Надо подправить ..


PS
Надо подправить
i_var.ch
...
#xtranslate _HMG_aScrollStep => _HMG_SYSDATA\[445\]
#xtranslate _HMG_aFormMiscData1 => _HMG_SYSDATA\[446\]
#xtranslate _HMG_aFormMiscData2 => _HMG_SYSDATA\[447\]
#xtranslate _HMG_aControlMiscData0 => _HMG_SYSDATA\[448\]

было (размножено и не исправлено)
#xtranslate _HMG_aFormMiscData0 => _HMG_SYSDATA\[448\]





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



Пост N: 358
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 09.06.17 12:29. Заголовок: Добрый день , форумч..


Добрый день , форумчане !

Что сделать чтоб можно было менять ширину контрола RADIOGROUP ?

Отбой тревоги .... WIDTH - это ширина одного элемента выбора , а не всего контрола .... Уже и забыл ху-из-ху :)

(*) Первый ( ) Второй ( ) Третий

После команды изменения ширины MyWindow.MyRADIO.WIDTH:=600 . ( Новое значение ширины гораздо больше исходного , всё должно влазить )

Отображается только первый элемент группы : (*) Первый





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




Пост N: 1506
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.17 22:41. Заголовок: gfilatov2002 Довел ..


gfilatov2002
Довел до рабочей кондиции пример и тексты hmg по Post\SendMessage. Пример: http://my-files.ru/gbuo3t
Комплект базовых функций, классы: Скрытый текст

Изменения в hmg: Скрытый текст

Замечания, дополнения принимаются.


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




Пост N: 1507
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.17 08:56. Заголовок: PS Еще *-----------..


PS
Еще Скрытый текст


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




Пост N: 1508
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.17 09:35. Заголовок: PS У себя сделал *-..


PS
У себя сделал
 
*-----------------------------------------------------------------------------*
FUNCTION GetControlIndex ( ControlName, ParentForm )
*-----------------------------------------------------------------------------*
LOCAL mVar

IF HB_ISNUMERIC(ParentForm ); RETURN ParentForm
ELSEIF HB_ISOBJECT (ControlName); RETURN ControlName:Index
ELSEIF HB_ISNUMERIC(ControlName); RETURN Ascan( _HMG_aControlHandles, ControlName )
ENDIF

mVar := '_' + ParentForm + '_' + ControlName

IF __mvExist ( mVar )
RETURN __mvGet ( mVar )
ENDIF

RETURN 0


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


Пост N: 1513
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 10.06.17 12:20. Заголовок: SergKis пишет: METH..


SergKis пишет:

 цитата:
METHOD New( o ) INLINE ( ::Obj := o, Self ) CONSTRUCTOR



"and please remember that :NEW() will be class method so it should not
be redefined as constructor in user class. Instead :INIT() method should
be used as constructor. It's executed automatically when object is
created from the :NEW() method."

цитата из xhb-diff


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




Пост N: 1509
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.17 19:34. Заголовок: Петр Согласен. :sm..


Петр
Согласен.
METHOD New( o ) INLINE ( ::oObj := iif( HB_ISOBJECT(o), o, Self ), Self ) CONSTRUCTOR


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




Пост N: 1511
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.17 21:55. Заголовок: SergKis пишет Неточ..


SergKis пишет
 цитата:
Неточность в
*-----------------------------------------------------------------------------*
FUNCTION _EraseControl ( i, p )
*-----------------------------------------------------------------------------*
LOCAL mVar, t, hWnd, x

If HB_ISOBJECT( _HMG_aControlMiscData0 [ i ][1] )
_HMG_aControlMiscData0 [ i ][1]:Del()
EndIf


Надо усилить проверку
 
*-----------------------------------------------------------------------------*
Function _EraseControl (i, p)
*-----------------------------------------------------------------------------*
Local mVar, t, hWnd, x

If Len( _HMG_aControlMiscData0 [ i ] ) > 0

If HB_ISOBJECT( _HMG_aControlMiscData0 [ i ][1] )
_HMG_aControlMiscData0 [ i ][1]:Del()
EndIf
EndIf


Т.е. _HMG_aControlMiscData0 [ i ] := {} - пустышка

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




Пост N: 1512
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.17 06:29. Заголовок: gfilatov2002 Повтор..


gfilatov2002
Повторю предложение, иметь в GetControIndex( ControlName, ParentForm )
If empty(ControlName); ControlName := _HMG_ThisControlName
EndIf
If empty(ParentForm); ParantForm := _HMG_ThisFormName
EndIf
Тогда в control ACTION можно сравнивать одинаковые контролы на разных окнах так (быстрый способ):
v1 := _GetValue( , , GetControlIndex())
v2 := _GetValue( , , GetControlIndex( , 'win_2'))
If v1 > v1
...
ElseIf v1 < v2
...
Else
...
EndIf
GetControlIndex(...) Скрытый текст



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