Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
SergKis: PS Виноват, надо в article.ini PathUmz=C:\UCHET\MATERIAL\SPR указать, создать и переписать из DATA U02.dbf Прога под конкретного клиента, по изменению Артикула в базе.
SergKis: PS в дополнение создать среду _HMG_This... для блока кода (при работе с тсб, к примеру) 1. для окна xRet := Do_WindowEventProcedure ( bBlock, GetFormIndex('Form_1'), p1, p2, p3, p4 ) 2. для контрола xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex('Имя_контрола', 'Form_1'), p1, p2, p3, p4 ) среда _HMG_This... для блока кода создается, потом восстанавливается предыдущая в продолжение SET OOP ON (без среды This) FUNC My( obj, par1, par2, par3 ) ... RETURN { par1,par2,par3, obj:IsWindow } 1. aRet := Do_Obj(oBrw:hWndParent, {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC') или aRet := Do_Obj(GetFormHandle('Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC') получим ? aRet[4] // .T. 2. aRet := Do_Obj(oBrw:hWnd, {|ob,p1,p2,p3| My(ob,p1,p2,p3) }, 'AAA', 'BBB', 'CCC') или aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC') получим ? aRet[4] // .F. в первом случае блок получит объект окна во втором объект Tsb\ контрола
Andrey: SergKis пишет: маловато будет ? В самый раз !
Vlad04: Примеры кода ... aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), или aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC') ... и др. Это , конечно, круто, но совсем не наглядно. На мой взгляд, все сложности и хитрости должны быть за "бортом" прикладных программ - где-то в исходниках библиотеки, dLL и т.п. Мне больше по душе : This.Row This.Col This.Width This.Height This.Value This.Name .. А все остальные действия должны быть типа 2+3 и т.п
SergKis: Это , конечно, круто, но совсем не наглядно... Мне больше по душе Где среда This создается - удобно, где ее нет, this уже не работает, в той же тсб. Есть ф-ии для добывания объктов o := _WindowObj(FormName\FormHandle) o := _ControlObj(ControlHandle[\ControlName, FormName]) вместо них использую получить любой объект по handle o := Do_Obj(Handle[, block,....]) в основном, исп. без блока, но при наличии массива Handle AEval(aHandle, {|nh| Do_Obj(nh, {|obj| MyFun(obj) }) }) даже очень ничего, т.е. AEval(_HMG_aFormHandles, {|nh,nn| Do_Obj(nh, {|obj| MyFun(obj, nn) }) }) обработаем все окна, причем в MyFun(oWnd) работать с объектом окна, т.е. oWnd:Type oWnd:Name oWnd:Index oWnd:Row oWnd:Col oWnd:Width oWnd:Height oWnd:ClientWidth oWnd:ClientHeight oWnd:Value ... crazy пример, перебор всех контролов всех окон AEval(_HMG_aControlHandles, {|nh,nn| Do_Obj(nh, {|obj| MyFun(obj, nn) }) }) MyFun(oCtl) будет работать с обектами контролов oCtl:Type oCtl:Name oCtl:Index oCtl:Row oCtl:Col oCtl:Width oCtl:Height oCtl:ClientWidth oCtl:ClientHeight oCtl:Value ... не все контролы вкл. в SET OOP ON, где то будет Nil возврат.
Andrey: Andrey пишет: Присоединяюсь к добавлениям ... Если конечно это не сложно и не помешает логике. ? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row") ? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Col") ? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Width") ? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height") Добавить ? oBrw:nRowWnd ? oBrw:nColWnd ? oBrw:nWidthWnd ? oBrw:nHeightWnd SergKis пишет: Где среда This создается - удобно, где ее нет, this уже не работает, в той же тсб. Есть ф-ии для добывания объктов Так я и хочу короткого написания функций oBrw:nRowWnd вместо GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row") . Может и неправильно написал, надо наверное так: [pre2] ? oBrw:nRowBrw ? oBrw:nColBrw ? oBrw:nWidthBrw ? oBrw:nHeightBrw[/pre2]
SergKis: Andrey пишет Так я и хочу короткого написания функций Есть (METHOD New смотри) координаты, я понимаю oBrw:nTop oBrw:nLeft oBrw:nBottom oBrw:Right
Andrey: SergKis пишет: Есть (METHOD New смотри) координаты, я понимаю Пропустил ! Спасибо ! То что нужно.
SergKis: PS создавай this среду в своей функции, запускай через блок кода для тсб xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex(oBrw:cControlName, oBrw:cParentWnd), p1, p2, p3, p4 )
Andrey: SergKis пишет: создавай this среду в своей функции, запускай через блок кода для тсб xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex(oBrw:cControlName, oBrw:cParentWnd), p1, p2, p3, p4 ) Не всё сразу. Надо с более простым решением разобраться.
Vlad04: SergKis пример, перебор всех контролов всех окон Для чего ? Не могу даже представить , для чего мне бы это потребовалось. Окно - это визуальное представление данных, а данные в таблицах, которые везде видны, ну и переменных памяти. Обычно работа идет с одним активным основным окном и с несколькими вспомогательными.