Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

gfilatov2002: SergKis пишет: В пример 3 правка OK

SergKis: gfilatov2002 Пропустил я в примере 3[pre2] DEFINE GETBOX Text_6 // Alternate Syntax ... BACKCOLOR :O:BColorGet ... и TOOLTIPы поправить, может быть @ :Y, :X GETBOX Text_5 WIDTH :D1 HEIGHT :H1 ; TOOLTIP "Text_5. DublClick => Edit" ; ... @ :Y, :X GETBOX Text_7 WIDTH :O:nDefLen HEIGHT :H1 ; BACKCOLOR :O:BColorGet ; TOOLTIP "Characters field. DublClick => Edit " ; ... @ :Y, :X GETBOX Text_8 WIDTH :O:nBoolLen HEIGHT :H1 ; ... TOOLTIP "Logical field. DublClick => Edit" ; [/pre2]

gfilatov2002: SergKis пишет: в примере 3 DEFINE GETBOX Text_6 // Alternate Syntax ... BACKCOLOR :O:BColorGet ... и TOOLTIPы поправить Благодарю за помощь


SergKis: gfilatov2002 пишет У меня такой пример тоже сработал (о tsb) Мне понравилось использовать on init. В своей версии 2.07 прошел по всем контролам и добавил bInit. Даже в timer[pre2] Local ow := oDlu2Pixel() ... IF _HMG_lOOPEnabled Eval ( _HMG_bOnControlInit, k, mVar ) ow := _WindowObj( ParentFormHandle ) ENDIF Do_WindowEventProcedure( bInit, k, ow, ControlName, k ) Return Nil [/pre2] Если в IDE добавить on init {|| NIL }, то в ней можно переустанавливать координаты (к примеру): ON INIT {|| This.Row := :Y, This.Col := :X, This.Width := :W1, This.Height := :H1, :Y += This.Height + :GapsHeight, ... }

gfilatov2002: SergKis пишет: прошел по всем контролам и добавил bInit Добавил обработку bInit в 20 базовых элементов управления (плюс TBrowse, конечно). Поправил выделение при получении фокуса по событию ON GOTFOCUS в GetBox с символьными данными: [pre2] IF ValType( Value ) == "C" _HMG_aControlGotFocusProcedure [k] := {|| SendMessage( _HMG_aControlHandles [k], EM_SETSEL, 0, iif( Empty( Value ), -1, Len( Trim( ( _HMG_aControlHeadClick [k] ):Cargo ) ) ) ) } [/pre2] Неточность выделения видна при редактировании поля Text_7 на десятой записи из базы. Также в альтернативном синтаксисе использовал новую команду ON INIT <b> вместо увеличения длины команды END <control> [ON INIT]. Теперь бы не мешало проверить эти изменения на реальном примере...

SergKis: gfilatov2002 Дайте ссылку в личку или так Покручу. В тек. версии только несколько элементов от on init-ил

gfilatov2002: SergKis пишет: Дайте ссылку в личку Отправил ссылку

SergKis: gfilatov2002 пишет Отправил ссылку Забрал

gfilatov2002: SergKis пишет: Забрал Если описание использования dlu в файле doc\Changelog.txt содержит неточности (или ошибки), то прошу их исправить без стеснения

SergKis: gfilatov2002 Родной "оригинальный" BASIC\GetBox из 19.01 переделал на проверку ON INIT. Только прорисовка убрана в ON INIT, остальное не трогал Тут https://TransFiles.ru/36pe9

gfilatov2002: SergKis пишет: BASIC\GetBox из 19.01 переделал на проверку ON INIT Супер! Большое спасибо за помощь

SergKis: gfilatov2002 Маленькая правка[pre2] METHOD GetObj4Name( cName ) CLASS TWndData ... ::oName:Eval( {| oc | iif( cName $ Upper(oc:cName), AAdd( aObj, oc ), Nil ) } ) ... [/pre2]

gfilatov2002: SergKis пишет: Маленькая правка Ok

SergKis: gfilatov2002 Предложение по TREE добавить в Node и Item Cargo, использовав _HMG_aControlHeadClick[ k ] [pre2] #xcommand NODE <text> [ IMAGES <aImage> ] [ ID <id> ] [ CARGO <Cargo> ]; =>; _DefineTreeNode (<text>, <aImage> , <id>, <Cargo> ) #xcommand DEFINE NODE <text> [ IMAGES <aImage> ] [ ID <id> ] [ CARGO <Cargo> ] ; =>; _DefineTreeNode (<text>, <aImage> , <id>, <Cargo> ) #xcommand END NODE ; =>; _EndTreeNode() #xcommand TREEITEM <text> [ IMAGES <aImage> ] [ ID <id> ] [ CARGO <Cargo> ] ; => ; _DefineTreeItem (<text>, <aImage> , <id>, <Cargo> ) h_tree.prg #include "minigui.ch" #include "i_winuser.ch" STATIC lDialogInMemory := .F. STATIC a_Node_Item_Cargo := {} *-----------------------------------------------------------------------------* FUNCTION _DefineTree ( ControlName, ParentFormName, row, col, width, height, ; ... __defaultNIL( @dblclick, "" ) a_Node_Item_Cargo := {} mVar := '_' + ParentFormName + '_' + ControlName ... *-----------------------------------------------------------------------------* FUNCTION InitDialogTree( ParentName, ControlHandle, k ) *-----------------------------------------------------------------------------* ... FOR n := 1 TO Len( _HMG_aDialogTreeItem ) aImage := _HMG_aDialogTreeItem[ n, 2 ] text := _HMG_aDialogTreeItem[ n, 1 ] id := _HMG_aDialogTreeItem[ n, 3 ] NodeIndex := _HMG_aDialogTreeItem[ n, 4 ] Cargo := _HMG_aDialogTreeItem[ n, 6 ] ... ImgDef := iif( ValType( aImage ) == "A", Len( aImage ), 0 ) // Tree+ NodeHandle := _HMG_NodeHandle[ NodeIndex ] AAdd( a_Node_Item_Cargo, Cargo ) IF ImgDef == 0 ... _HMG_aControlPageMap [ _HMG_ActiveTreeIndex ] := _HMG_aTreeMap _HMG_aControlPicture [ _HMG_ActiveTreeIndex ] := _HMG_aTreeIdMap _HMG_aControlHeadClick[ _HMG_ActiveTreeIndex ] := AClone ( a_Node_Item_Cargo ) ... *-----------------------------------------------------------------------------* FUNCTION _DefineTreeNode ( text, aImage, Id, Cargo ) *-----------------------------------------------------------------------------* ... IF lDialogInMemory _HMG_NodeIndex++ AAdd ( _HMG_aDialogTreeItem, { text, aImage, Id, _HMG_NodeIndex, 'NODE', Cargo } ) ELSE ... AAdd ( _HMG_aTreeMap, _HMG_NodeHandle[ _HMG_NodeIndex ] ) AAdd ( _HMG_aTreeIdMap, Id ) AAdd ( a_Node_Item_Cargo, Cargo ) ENDIF ... *-----------------------------------------------------------------------------* FUNCTION _DefineTreeItem ( text, aImage, Id, Cargo ) *-----------------------------------------------------------------------------* ... IF lDialogInMemory AAdd ( _HMG_aDialogTreeItem, { text, aImage, Id, _HMG_NodeIndex, 'ITEM', Cargo } ) ELSE ... AAdd ( _HMG_aTreeMap, Handle ) AAdd ( _HMG_aTreeIdMap, Id ) AAdd ( a_Node_Item_Cargo, Cargo ) ENDIF ... *-----------------------------------------------------------------------------* FUNCTION _EndTree() *-----------------------------------------------------------------------------* IF .NOT. lDialogInMemory _HMG_aControlPageMap [ _HMG_ActiveTreeIndex ] := _HMG_aTreeMap _HMG_aControlPicture [ _HMG_ActiveTreeIndex ] := _HMG_aTreeIdMap _HMG_aControlHeadClick[ _HMG_ActiveTreeIndex ] := AClone( a_Node_Item_Cargo ) IF _HMG_ActiveTreeValue > 0 ... ENDIF a_Node_Item_Cargo := {} RETURN NIL ... *-----------------------------------------------------------------------------* FUNCTION TreeNodeItemCargo( ControlName, ParentForm, Item, Value ) *-----------------------------------------------------------------------------* LOCAL i, xVal IF ( i := GetControlIndex( ControlName, ParentForm ) ) > 0 IF Item > 0 .and. Item <= Len ( _HMG_aControlHeadClick[ i ] ) xVal := _HMG_aControlHeadClick[ i ][ Item ] IF pCount() > 3 _HMG_aControlHeadClick[ i ][ Item ] := Value ENDIF ENDIF ENDIF RETURN xVal h_controlmisc.prg FUNCTION _DeleteAllItems ( ControlName , ParentForm ) ... CASE t == "TREE" TreeView_DeleteAllItems ( c , _HMG_aControlPageMap [ i ] ) // Tree+ ASize ( _HMG_aControlPageMap [ i ] , 0 ) ASize ( _HMG_aControlPicture [ i ] , 0 ) ASize ( _HMG_aControlHeadClick[ i ] , 0 ) ... FUNCTION _DeleteItem ( ControlName , ParentForm , Value ) ... CASE T == "TREE" ... ASize ( _HMG_aControlPageMap [ix] , AfterCount ) ASize ( _HMG_aControlPicture [ix] , AfterCount ) HB_ADEL( _HMG_aControlHeadClick[ix] , Value, .T. ) ... [/pre2]

SergKis: PS Пример BASIC\Tree https://TransFiles.ru/s4754

SergKis: PPS При TreeItemSort(...) и AddItem, думаю NODE\ITEM Cargo не стоит исползовать

SergKis: gfilatov2002 Замените, пожалуйста, методы, добавлена обработка удаленных контролов[pre2] METHOD GetObj4Type( cType, lEque ) CLASS TWndData LOCAL aObj := {}, aO := {}, o IF ! Empty( cType ) lEque := hb_defaultValue( lEque, .T. ) IF ::cChr $ cType ; lEque := .F. ENDIF FOR EACH cType IN hb_ATokens( Upper( cType ), ::cChr ) ::oName:Eval( {| oc | iif( lEque, iif( cType == oc:cType, AAdd( aObj, oc ), ), ; iif( cType $ oc:cType, AAdd( aObj, oc ), ) ) } ) NEXT FOR EACH o IN aObj If _IsControlDefined(o:Name, o:Window:Name) aAdd(aO, o) EndIf NEXT ENDIF RETURN aO METHOD GetObj4Name( cName ) CLASS TWndData LOCAL aObj := {} IF ! Empty( cName ) FOR EACH cName IN hb_ATokens( Upper( cName ), ::cChr ) ::oName:Eval( {| oc | iif( _IsControlDefined(oc:Name, oc:Window:Name), ; iif( cName $ Upper(oc:cName), AAdd( aObj, oc ), Nil ), Nil ) } ) NEXT ENDIF RETURN aObj [/pre2]

gfilatov2002: SergKis пишет: Замените, пожалуйста, методы, добавлена обработка удаленных контролов Принято. Благодарю за помощь

Vlad04: Ещё бы хороший пример (на основе DBF) построения ДЕРЕВА и работы с ним

SergKis: Vlad04 пишет Ещё бы хороший пример (на основе DBF) построения ДЕРЕВА и работы с ним Какие трудности с dbf. К примеру имеем - группы - подгруппы - товар[pre2] while ! eof() // группы group := ... NODE group sele podgroup set scope group to group go top while ! eof() podgoup := ... NODE podgroup sele tovar set scope podgroup to podgroup go top while ! eof() ITEM tovar skip enddo END NODE sele podgroup skip enddo END NODE sele group skip enddo [/pre2] Если это в одном файле, открываем его три раза group, podgroup, tovar и делаем то же самое group, podgroup тэги UNIQUE



полная версия страницы