Форум » 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

Vlad04: Не понял ? Какая вложенность здесь ? Группа и подгруппа ? Классический Трей- файлы директории.

SergKis: Vlad04 пишет Не понял ? Какая вложенность здесь ? Группа и подгруппа ? Вложенность обыкновенная, показана последняя часть 2-а node и item: Краски - группа Акриловые - подгруппа Водоэмульсионные - ... Масляные - ... ... Краска белая марка ... - товар\материал Краска синяя марка ... - ... ... Над группой может быть Краски для внутренних работ Краски для наружных работ ... Еще выше может быть Материалы для внутренних работ Материалы для наружных работ ... Классическое дерево, не хуже директорий

SergKis: gfilatov2002 Поправил Method Enabled (сейчас он не работает совсем, с изменениями - частично) [pre2] CLASS TSBrowse FROM TControl ... DATA aOldParams DATA aOldEnabled #ifdef __EXT_USERKEYS__ ... METHOD Enabled( lEnab, Clr1, Clr2 ) //JP 1.55 ... METHOD Enabled( lEnab, Clr1, Clr2 ) CLASS TSBrowse Local nI Default lEnab := .T., Clr1 := CLR_GRAY, Clr2 := CLR_HGRAY IF ValType( lEnab ) == "L" IF !lEnab IF ::lEnabled ::aOldEnabled := { ::hBrush, {} , ::nClrPane } For nI := 1 TO Len( ::aColumns ) AAdd( ::aOldEnabled[2], ::aColumns[ nI ]:Clone() ) ::aColumns[ nI ]:SaveColor() Next ENDIF ::lEnabled := .F. ::SetColor( { 2 }, { CLR2 } ) ::SetColor( { 3, 4 }, { CLR1, CLR2 } ) ::SetColor( { 9, 10 }, { CLR1, CLR2 } ) ::SetColor( { 16, 17 }, { CLR1, CLR2 } ) ::SetColor( { 18, 19 }, { CLR1, CLR2 } ) ::nClrPane := CLR2 ELSE IF ! ::lEnabled For nI := 1 TO Len( ::aColumns ) ::aColumns[ nI ]:RestColor() SetColor( , ::aColumns[ nI ]:aColors, nI ) Next If HB_ISARRAY( ::aOldEnabled ) .and. ! empty( ::aOldEnabled[1] ) AEval( ::aOldEnabled[2], {|oc,nc| ::aColumns[ nc ] := oc:Clone() } ) ::hBrush := ::aOldEnabled[1] ::nClrPane := ::aOldEnabled[3] EndIf ENDIF ::lEnabled := .T. ENDIF ::Refresh() /* этот кусок кода работает для варианта колонки помещаются на экране тсб и нет hscroll. для тсб со горизонтальным скролингом добавка ниже не помогает потому я оставил в коментариях, т.е. при исп. :Enabled(...) допиливать за вызовом самому (точно не понял, как быть) If ! ::lNoHScroll .and. ::oHScroll != Nil ::oHScroll:SetPos( ::nCell ) EndIf ::ResetVScroll( .T. ) ::oVScroll:SetRange( 0, 0 ) ::oHScroll:SetRange( 0, 0 ) ::Refresh() If ! ::lNoHScroll .and. ::oHScroll != Nil ::oHScroll:SetPos( ::nCell ) EndIf ::ResetVScroll( .T. ) ::oHScroll:SetRange( 0, 0 ) */ ENDIF RETURN 0 ... Проверка в примере Advanced\TsBrowse TsbTest.prg ... Case nSample = 1 DEFINE TBROWSE Brw_1 AT 0, 0 ALIAS "Employee" ; ... :UserKeys( VK_F5, {|obr| oBr:Enabled(.F.), ; MsgBox('Test oBrw:Enabled(.F.\.T.)', oBr:cControlName), ; oBr:Enabled(.T.), oBr:SetFocus() } ) END TBROWSE ... Надо отметить, что hscroll при нажатии F5 пропадает сразу и не восстанавливается, но и колонок за пределы тсб нет. [/pre2]


SergKis: PS Есть faq с прорисовкой Header, Footer фантомных колонок, но это др. история

gfilatov2002: SergKis пишет: Method Enabled (сейчас он не работает совсем Посмотрел в примере Advanced\Tsb_seek рабочий вызов этого метода Что здесь не так

SergKis: PPS Уточнение по TsBrowse. HScroll есть, что то я просмотрел его В примере Tsb_Basic\demo4.prg с добавкой [pre2] DEFINE BUTTONEX Button_Go Row y + 2 Col x WIDTH 40 HEIGHT 24 CAPTION "Go" ACTION ( oBr:SetFocus(), oBr:GotoRec(This.Recno.Value, This.RowPos.Value ) ) FONTSIZE 9 FONTBOLD .F. END BUTTONEX x += This.RowPos.Width + 20 DEFINE BUTTONEX Button_Msg Row y + 2 Col x WIDTH 40 HEIGHT 24 CAPTION "Msg" ACTION ( oBr:Enabled(.F.), MsgBox('Test oBrw:Enabled(.F.\.T.)', This.name), ; oBr:Enabled(.T.), oBr:SetFocus() ) FONTSIZE 9 FONTBOLD .F. END BUTTONEX ... работает при строках меньше и больше :RowCount() нормально, но на примере Андрея, на котором тренировался, при VScroll наличии пропадают стабильно стрелки управления или сам VScroll полностью и спасает добавка STAT FUNC _myTsb( obrw, n ) If n == 1 obrw:Enabled(.F.) Else obrw:Enabled(.T.) obrw:ResetVScroll( .T. ) obrw:oVScroll:SetRange( 0, 0 ) obrw:oHScroll:SetRange( 0, 0 ) obrw:Refresh() obrw:ResetVScroll( .T. ) obrw:oHScroll:SetRange( 0, 0 ) obrw:SetFocus() EndIf RETURN Nil [/pre2]

SergKis: gfilatov2002 пишет Посмотрел в примере Advanced\Tsb_seek рабочий вызов этого метода Пример с методом работает У меня все время глюки с методом (отказадся использовать, только переменную :lEnabled). Спасает сохранение\восстановление колонок, hBrush и борьба с VScroll. Ok, буду бороться вне метода

gfilatov2002: SergKis пишет: Спасает сохранение\восстановление колонок, hBrush Переписал этот метод с учетом Вашего вклада следующим образом: [pre2]METHOD Enabled( lEnab ) CLASS TSBrowse Local nI Default lEnab := .T. IF ValType( lEnab ) == "L" IF !lEnab IF ::lEnabled ::aOldEnabled := { ::hBrush, {}, ::nClrPane } For nI := 1 TO Len( ::aColumns ) AAdd( ::aOldEnabled[2], ::aColumns[ nI ]:Clone() ) ::aColumns[ nI ]:SaveColor() Next ENDIF ::lEnabled := .F. ::SetColor( { 2 }, { ::nCLR_HGRAY } ) ::SetColor( { 3, 4 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::SetColor( { 9, 10 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::SetColor( { 16, 17 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::SetColor( { 18, 19 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::nClrPane := ::nCLR_HGRAY ::hBrush := CreateSolidBrush( GetRed( ::nClrPane ), GetGreen( ::nClrPane ), GetBlue( ::nClrPane ) ) ELSE IF ! ::lEnabled For nI := 1 TO Len( ::aColumns ) ::aColumns[ nI ]:RestColor() SetColor( , ::aColumns[ nI ]:aColors, nI ) Next If HB_ISARRAY( ::aOldEnabled ) .and. ! Empty( ::aOldEnabled[1] ) AEval( ::aOldEnabled[2], {|oc, nc| ::aColumns[ nc ] := oc:Clone() } ) DeleteObject( ::hBrush ) ::hBrush := ::aOldEnabled[1] ::nClrPane := ::aOldEnabled[3] EndIf ENDIF ::lEnabled := .T. ENDIF ::Refresh() ENDIF RETURN 0 [/pre2] Хуже вроде не стало. Благодарю за помощь

SergKis: gfilatov2002 Было бы хорошо добавить параметры Clr1, Clr2, для управления, если BackColor окна не CLR_GRAY\HGREY

gfilatov2002: SergKis пишет: для управления, если BackColor окна не CLR_GRAY\HGREY Для этого я добавил в класс [pre2] DATA nClr_Gray AS NUMERIC INIT CLR_GRAY DATA nClr_HGray AS NUMERIC INIT CLR_HGRAY [/pre2]

SergKis: PS И добавить сохранение\восстановление цветов SuperHeader

SergKis: gfilatov2002 пишет Для этого я добавил в класс Похоже глаз замылился, не увидел, сору.

SergKis: gfilatov2002 Добавил SuperHeader [pre2] IF ::lEnabled ::aOldEnabled := { ::hBrush, {}, ::nClrPane, {} } For nI := 1 TO Len( ::aColumns ) AAdd( ::aOldEnabled[2], ::aColumns[ nI ]:Clone() ) ::aColumns[ nI ]:SaveColor() Next If ::lDrawSuperHd AEval( ::aSuperHead, {|as| AAdd( ::aOldEnabled[4], { as[4], as[5], as[11] } ) } ) EndIf ENDIF ... If HB_ISARRAY( ::aOldEnabled ) .and. ! Empty( ::aOldEnabled[1] ) AEval( ::aOldEnabled[2], {|oc, nc| ::aColumns[ nc ] := oc:Clone() } ) DeleteObject( ::hBrush ) ::hBrush := ::aOldEnabled[1] ::nClrPane := ::aOldEnabled[3] If ::lDrawSuperHd AEval( ::aOldEnabled[4], {|as,ns| ::aSuperHead[ns][ 4] := as[1], ; ::aSuperHead[ns][ 5] := as[2], ; ::aSuperHead[ns][11] := as[3] } ) EndIf EndIf ... Пример Tsb_seek добавил ... ADD COLUMN TO br_zaw DATA {|| test->street } ALIGN DT_LEFT, DT_CENTER, DT_CENTER TITLE 'Street' SIZE 300 br_zaw:hBrush := CreateSolidBrush( 242, 245, 204 ) ADD SUPER HEADER TO br_zaw FROM COLUMN 1 TO COLUMN br_zaw:nColCount() ; TITLE " SuperHeader" br_zaw:bUserKeys := {|nKey,nFlags| fszuk1(nkey,nflags) } ... Работает [/pre2]

gfilatov2002: SergKis пишет: Добавил SuperHeader ... Работает Спасибо

Andrey: Григорий, я пример выслал на почту. Там наверное нужно переделать сохранение/восстановление цветов с учётом этих новых правок ?

SergKis: gfilatov2002 По поводу предложения в tree node\item cargo. То что я использовал _HMG_aControlHeadClick, наверно, не очень правильно. Лучше _HMG_aControlMiscData1[ k ] := { 0, aImgNode, aImgItem, {} }, плюс использовать NodeHandle := _HMG_NodeHandle[ NodeIndex ] и AAdd( a_Node_Item_Cargo, { NodeHandle, Cargo } ) тогда вся работа с node\item cargo - это поиск по NodeHandle для удаления, выбора и сортировка будет без разницы. При добавлении новых node\item вставлять их в самый конец массива. По мне так все ровненько выходит. Cargo на node\item это небходимость упрощения работы. Сейчас приходится добавлять в node\item ключи (счетчики пунктов), потом бегать по дереву составляя выбранный ключ и потом через табл. перекодировки добывать реальный ключ и через него др. данные, но и это не спасает для трех языков одновременно (unicode версия) и в дереве могут находится сразу 3-и термина языковых одновременно, т.е. с одинаковыми ключами и разными счетчиками пунктов. Мороки много, так, что исп. tree не хочется

gfilatov2002: SergKis пишет: То что я использовал _HMG_aControlHeadClick, наверно, не очень правильно. Возможно. Но, как известно, лучшее - враг хорошего В тираж ушло Ваше первое решение, оно органично вписалось в текущую логику при построении дерева. Также добавил поддержку псевдо-объекта This для этого Cargo как показано ниже *-----------------------------------------------------------------------------* FUNCTION OnReturnTree() *-----------------------------------------------------------------------------* LOCAL nItm := This.Value LOCAL cWnd := ThisWindow.Name LOCAL cCtl := This.Name LOCAL lIsN := TreeItemIsTrueNode ( cCtl, cWnd, nItm ) LOCAL cItm := This.&(cCtl).Item( nItm ) LOCAL cCrg := This.&(cCtl).Cargo( nItm ) MsgBox( "#" + hb_ntos (nItm) + " --> " + cItm + ' ' + ; iif( lIsN, 'TrueNode', 'Node' )+ CRLF + ; cValToChar(cCrg), ; cWnd + '.' + cCtl ) RETURN Nil *-----------------------------------------------------------------------------* Procedure AddItemTest() *-----------------------------------------------------------------------------* LOCAL i Form_1.Tree_1.DeleteAllItems Form_1.Tree_1.AddItem( 'New Root Item 1' , 0 ) Form_1.Tree_1.AddItem( 'New Item 1.1' , 1 ) Form_1.Tree_1.AddItem( 'New Item 1.2' , 1 ) Form_1.Tree_1.AddItem( 'New Item 1.3' , 1 ) Form_1.Tree_1.AddItem( 'New Root Item 2' , 0 ) Form_1.Tree_1.AddItem( 'New Item 2.1' , 5 ) Form_1.Tree_1.AddItem( 'New Item 2.2' , 5 ) Form_1.Tree_1.AddItem( 'New Item 2.3' , 5 ) Form_1.Tree_1.AddItem( 'New Item 1.4' , 1 ) Form_1.Tree_1.AddItem( 'New Item 1.4.1' , 5 ) For i := 1 To Form_1.Tree_1.ItemCount Form_1.Tree_1.Cargo( i ) := Form_1.Tree_1.Item( i ) Next Return

gfilatov2002: Подготовил третий релиз-кандидат для новой сборки 19.02 Кратко, что нового (см.ниже) [pre2]* Fixed a program crash happens occasionally in Windows 10 only and only for non-admin users. * Added the new class TDlu2Pix for managing of the UI controls sizing. * Added the new ON INIT <bBlock> clause for the basic (non all) controls. Example: DEFINE LABEL Label_1 ON INIT {|| This.Row := :Y, This.Col := :X, This.Width := :W1,; This.Height := :H1, :Y += This.Height + :GapsHeight } END LABEL * ACTIVATE WINDOW command supports an optional ON INIT clause. * TREE control supports an optional CARGO clause for the nodes and items at theirs definition, i.e. NODE <text> [ IMAGES <aImage> ] [ ID <id> ] [ CARGO <Cargo> ] TREEITEM <text> [ IMAGES <aImage> ] [ ID <id> ] [ CARGO <Cargo> ] * The Getbox control's value with "@K" PICTURE property will be selected at ON GOTFOCUS event. * 'Application' object supports the read/write property 'Object'. Syntax: Application.Object [ := <arg> ] * Updated the TSBrowse, RDDLeto and Sqlite3 libraries. * Updated HMGS-IDE to version 1.4.3.6. * Updated Harbour Compiler 3.2.0dev to a recent Git-version. (ChangeLog Last Entry: 2019-02-11 13:51) * Added the new interesting samples and updated some Advanced samples. [/pre2] Благодарю Сергея Киселева за неоценимую помощь в подготовке этой сборки Возможно, Вы хотите присоединиться к команде разработчиков Минигуи

SergKis: gfilatov2002 пишет Возможно, Вы хотите присоединиться к команде разработчиков Минигуи Думаю, что нет, т.к. практически все разночтения между версиями hmg текущей и нашей (в базе 2.07) сняты. Товарищ, по работе, переводит на VC2017 hb в unucod с LV866 по правилам hb и тек. нашу версию hmg + C либы. Я максимально сближаю нашу версию hmg с текущей. В планах, последним шагом, тек. версию hmg сделать unicode, т.е. переползти на родную hmg

SergKis: gfilatov2002 Небольшой пример Tree по каталогам hmg + Cargo https://TransFiles.ru/wy6kc



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