Форум » 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 пишет: поправил SBrowse() Принято Немного отформатировал, убрал в блоках кода неиспользуемое присвоение nn := obr:nAt Благодарю за помощь SergKis пишет: Еще правка OK

SergKis: PS Пример тот же, но с добавкой подключения блока кода для SBrowse_Record(...) для информации [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #include "hmg.ch" #include "tsbrowse.ch" REQUEST DBFCDX, DBFFPT Function Main() LOCAL cFont := "Arial" LOCAL nSize := 12 LOCAL bSetUp, lNoMain, nW, nH, oDlu, bSet, bRec SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN RddSetDefault("DBFCDX") //SET OOP ON SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF SET NAVIGATION EXTENDED SET DEFAULT ICON TO "HMG_ICO" // фонт по default cFont := "DejaVu Sans Mono" nSize := 16 SET FONT TO cFont, nSize DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD IF ( lNoMain := Empty( _HMG_MainHandle ) ) SET WINDOW MAIN OFF ENDIF bSet := {|ob,um| Local oc, fn IF Empty(um) // before END TBROWSE ELSE // after END TBROWSE fn := GetFontHandle("Bold") FOR EACH oc IN ob:aColumns IF oc:cName == "SELECTOR" ; LOOP ENDIF oc:hFontHead := fn IF oc:cName == "ORDKEYNO" oc:hFont := fn oc:hFontFoot := fn ENDIF NEXT ob:SetNoHoles() ob:SetFocus() ENDIF Return .T. } //bSet := {|| .T. } bRec := {|| .F. } // или задавать как bSet с параметрами bSetUp := { bSet, , bRec } USE ( "CUSTOMER" ) ALIAS CUST NEW SHARED oDlu := oDlu4Font( _HMG_DefaultFontSize ) nW := Sys.ClientWidth nH := oDlu:H1 * ( fCount() + 3 ) + 5 nH := iif( nH > Sys.ClientHeight, Sys.ClientHeight, nH ) nH := { Sys.ClientHeight, nH } sBrowse( Alias(), "DEMO. Test new SBrowse", bSetUp, , nW, nH, , .T., .T. ) IF lNoMain SET WINDOW MAIN ON ENDIF RETURN NIL [/pre2]

gfilatov2002: Подготовил третий релиз-кандидат для новой сборки 22.01 Кратко, что нового: [pre2] * Fixed DATEPICKER control: 'Value' property returns TimeStamp type if the FORMATSTRING property was defined (introduced in the build 21.09). * Added the function nStrToNum( cNumericVal, [lEuropean] ) --> nVal * Added the function uCharToVal( cText, [cType] ) --> uVal. It is an inverse function to the function cValToChar(). * The improved function cValToChar() preserves the full accuracy of the number value with the internal function cNumToChar(). It does not depend on the SET DECIMALS TO <n> setting now. * The DO MESSAGE LOOP command supports the optional EXIT [ON EXCEPTION] clause (default is false). * The useful function GetPixelColor() was moved to MiniGUI core. * Updated the TSBrowse, RddLeto and SQLite3 libraries. * Added the new interesting samples and updated some examples. [/pre2]


SergKis: gfilatov2002 Добавьте строки[pre2] FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH ) ... IF HB_ISBLOCK( bEnd ) ; EVal( bEnd, oBrw, oParam ) ENDIF IF HB_ISARRAY( oParam:aEvents ) FOR EACH aTmp IN oParam:aEvents (This.Object):Event( aTmp[1], aTmp[2] ) NEXT ENDIF DO EVENTS RETURN oBrw Тогда можно делать WITH OBJECT oTsb :aEvents := {} AADD( :aEvents, { 3, {|ow,ky,ob| Local cAls ob := iif( Empty(ob), ow:Cargo:oBrw, ob ) cAls := ob:cAlias IF ob:nLen > 0 IF (cAls)->(RLock()) IF (cAls)->(Deleted()) (cAls)->(dbRecall()) ELSE (cAls)->(dbDelete()) ENDIF (cAls)->(dbUnlock()) ENDIF //ob:DeleteRow(.F., .F.) ob:SetFocus() ob:DrawSelect() DO EVENTS ENDIF Return Nil } } ) ... END WITH [/pre2]

gfilatov2002: SergKis пишет: Добавьте строки OK

gfilatov2002: Завершена подготовка новой сборки 22.01, которая будет опубликована на следующей неделе. Искренне благодарю Сергея Киселева и Андрея Верченко за помощь при подготовке этой сборки

SergKis: gfilatov2002 предложение [pre2] CLASS TSBrowse FROM TControl ... DATA lYesNo AS LOGICAL INIT .F. // .T. - text _HMG_aABMLangLabel[ 20\21 ] ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... ELSEIF Empty( cPicture ) .OR. lMultiLine //uData := iif( ValType( uData ) != "C", cValToChar( uData ), uData ) IF ValType( uData ) != "C" IF ValType( uData ) == "L" .and. ::lYesNo uData := _HMG_aABMLangLabel[ iif( uData, 20, 21 ) ] ELSE uData := cValToChar( uData ) ENDIF ENDIF ELSE ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... ELSEIF Empty( cPicture ) .OR. lMulti //uData := iif( ValType( uData ) != "C", cValToChar( uData ), uData ) IF ValType( uData ) != "C" IF ValType( uData ) == "L" .and. ::lYesNo uData := _HMG_aABMLangLabel[ iif( uData, 20, 21 ) ] ELSE uData := cValToChar( uData ) ENDIF ENDIF ELSE ... [/pre2] тогда вместо F\T будут тексты из _HMG_aABMLangLabel[ 20\21 ], т.е. Yes\No или от языка Да\Нет ... В примере с SBrowse, например, делаем так [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #include "hmg.ch" #include "tsbrowse.ch" REQUEST DBFCDX, DBFFPT Function Main() LOCAL cFont := "Arial" LOCAL nSize := 12 LOCAL bSetUp, lNoMain, nW, nH, oDlu, bSet, bRec SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN RddSetDefault("DBFCDX") //SET OOP ON SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF SET NAVIGATION EXTENDED SET DEFAULT ICON TO "HMG_ICO" // фонт по default cFont := "DejaVu Sans Mono" nSize := 18 SET FONT TO cFont, nSize DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD IF ( lNoMain := Empty( _HMG_MainHandle ) ) SET WINDOW MAIN OFF ENDIF bSet := {|ob,um| Local oc, fn IF Empty(um) // before END TBROWSE ELSE // after END TBROWSE fn := GetFontHandle("Bold") FOR EACH oc IN ob:aColumns IF oc:cName == "SELECTOR" ; LOOP ENDIF oc:hFontHead := fn IF oc:cName == "ORDKEYNO" oc:hFont := fn oc:hFontFoot := fn ENDIF NEXT ob:SetNoHoles() ob:SetFocus() ENDIF Return .T. } bRec := {|ob,um| Local oc, fn IF Empty(um) // before END TBROWSE ob:lYesNo := .T. ELSE // after END TBROWSE fn := GetFontHandle("Bold") FOR EACH oc IN ob:aColumns IF oc:cName == "SELECTOR" ; LOOP ENDIF oc:hFontHead := fn NEXT ob:SetNoHoles() ob:GoRight() DO EVENTS ob:SetFocus() ENDIF Return .T. } //bSet := {|| .T. } //bRec := {|| .F. } bSetUp := { bSet, , bRec } USE ( "CUSTOMER" ) ALIAS CUST NEW SHARED oDlu := oDlu4Font( _HMG_DefaultFontSize ) nW := Sys.ClientWidth nH := oDlu:H1 * ( fCount() + 3 ) + 5 nH := iif( nH > Sys.ClientHeight, Sys.ClientHeight, nH ) nH := { Sys.ClientHeight, nH } sBrowse( Alias(), "DEMO. Test new SBrowse", bSetUp, , nW, nH, , .T., .T. ) IF lNoMain SET WINDOW MAIN ON ENDIF RETURN NIL [/pre2]

SergKis: PS Можно сделать через массив текстов в классе, т.е. [pre2] DATA aYesNo AS ARRAY INIT { _HMG_aABMLangLabel[20], _HMG_aABMLangLabel[21] } [/pre2] Тогда можно ставить свой текст для вывода в методах uData := ::aYesNo[ iif( uData, 1, 2 ) ] но может это избыточно

gfilatov2002: SergKis пишет: сделать через массив текстов в классе Да, этот вариант понравился больше. Тогда можно и не изменять пример - изменения для логических полей подтягиваются автоматически Благодарю за предложение

SergKis: gfilatov2002 пишет тот вариант понравился больше Тогда надо еще правку внести [pre2] METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse ... ELSEIF ( cType == "L" .AND. lLogicDrop ) .OR. oCol:lComboBox ... nHeight := Max( 10, Min( 10, Len( aGet ) ) ) * ::nHeightCell ELSE IF ::lYesNo aGet := { ::aYesNo[ 1 ], ::aYesNo[ 2 ] } ELSE aGet := { ::aMsg[ 1 ], ::aMsg[ 2 ] } ENDIF IF nKey == VK_RETURN uValue := iif( uValue, 1, 2 ) ELSE uValue := Max( 1, AScan( aGet, Upper( Chr( nKey ) ) ) ) ENDIF nHeight := ::nHeightCell * 4 // 1.54 ENDIF ... В примере так можно делать bRec := {|ob,um| Local oc, fn IF Empty(um) // before END TBROWSE ob:lYesNo := .T. ob:aYesNo[1] := "Вкл." ob:aYesNo[2] := "Выкл." ELSE // after END TBROWSE fn := GetFontHandle("Bold") FOR EACH oc IN ob:aColumns IF oc:cName == "SELECTOR" ; LOOP ENDIF oc:hFontHead := fn NEXT ob:SetNoHoles() ob:GoRight() DO EVENTS ob:SetFocus() ENDIF Return .T. } ... [/pre2]

gfilatov2002: SergKis пишет: aGet := { ::aMsg[ 1 ], ::aMsg[ 2 ] } Благодарю за подсказку Убрал новую переменную :aYesNo и использовал вместо нее уже готовый массив :aMsg. Введение новой переменной :lYesNo посчитал излишним также, отображение элементов вышеназванного массива для логических полей можно всегда изменить, переопределив 1-е и 2-е значение этого массива.

SergKis: gfilatov2002 пишет Введение новой переменной :lYesNo посчитал излишним также, отображение элементов вышеназванного массива для логических полей можно всегда изменить, переопределив 1-е и 2-е значение этого массива. Не очень понял. ::aMsg[1], ::aMsg[2] к отображению в ::DrawSelect() и :DrawLine() не имеет отношения, там cValToChar(uData), т.е. F\T в таблице видим. ::aMsg[1], ::aMsg[2] возникают для ::Edit(...) с cType == "L" .AND. lLogicDrop в TComboBox(). Соединить на одинаковый текст для вывода в таблице и TComboBox() на карточке надо, наверное, подключив :aMsg вместо :aYesNo. :lYesNo нужна, в таком случае, только для сохранения старого варианта.

gfilatov2002: SergKis пишет: подключив :aMsg вместо :aYesNo Именно так и сделал SergKis пишет: :lYesNo нужна, в таком случае, только для сохранения старого варианта Такая совместимость не требуется, на мой взгляд Использование Yes\No вместо T\F на карточке представляется вполне логичным

SergKis: gfilatov2002 Еще небольшие правки по SBrowse [pre2] IF /*! Empty( lNumber ) .or.*/ oBrw:nColumn( "ORDKEYNO", .T. ) > 0 oBrw:GetColumn( "SELECTOR" ):nClrBack := nClr oBrw:GetColumn( "ORDKEYNO" ):nClrHeadBack := nClr oBrw:GetColumn( "ORDKEYNO" ):nClrFocuBack := oBrw:nClrPane ENDIF ... nY := Len( oBrw:aColumns ) oBrw:aColumns[ nY - 1 ]:nWidth += 50 oBrw:aColumns[ nY - 1 ]:cName := "KEY" oBrw:aColumns[ nY - 1 ]:lEdit := .F. oBrw:aColumns[ nY ]:lEdit := .F. oBrw:aColumns[ nY ]:cName := "VALUE" ... IF HB_ISOBJECT( oBrw:Cargo ) .and. oBrw:ClassName == "TSBROWSE" .and. oBrw:Cargo:lIsDbf oBrw:Cargo:lRecLockArea := .T. oCol := oBrw:GetColumn("VALUE") //aColumns[3] oCol:lEdit := .T. ... [/pre2] Тогда пример с карточкой может быть такой [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #include "hmg.ch" #include "tsbrowse.ch" REQUEST DBFCDX, DBFFPT Function Main() LOCAL cFont := "Arial" LOCAL nSize := 12 LOCAL bSetUp, lNoMain, nW, nH, oDlu, bSet, bRec SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN RddSetDefault("DBFCDX") //SET OOP ON SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF SET NAVIGATION EXTENDED SET DEFAULT ICON TO "HMG_ICO" // фонт по default cFont := "DejaVu Sans Mono" nSize := 18 SET FONT TO cFont, nSize DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD IF ( lNoMain := Empty( _HMG_MainHandle ) ) SET WINDOW MAIN OFF ENDIF bSet := {|ob,um| Local oc, fn IF Empty(um) // before END TBROWSE ELSE // after END TBROWSE fn := GetFontHandle("Bold") FOR EACH oc IN ob:aColumns IF oc:cName == "SELECTOR" ; LOOP ENDIF oc:hFontHead := fn IF oc:cName == "ORDKEYNO" oc:hFont := fn oc:hFontFoot := fn ENDIF NEXT ob:SetNoHoles() ob:SetFocus() ENDIF Return .T. } bRec := {|ob,um| Local oc, fn IF Empty(um) // before END TBROWSE ob:aMsg[1] := "Вкл." ob:aMsg[2] := "Выкл." ob:InsColNumber(60, 1, "ORDKEYNO") ob:lFooting := ob:lDrawFooters := .T. ob:nHeightFoot := ob:nHeightCell ELSE // after END TBROWSE fn := GetFontHandle("Bold") FOR EACH oc IN ob:aColumns IF oc:cName == "SELECTOR" ; LOOP ELSEIF oc:cName == "ORDKEYNO" oc:hFont := fn oc:hFontFoot := fn oc:nAlign := DT_CENTER ENDIF oc:hFontHead := fn NEXT ob:nFreeze := ob:nColumn("ORDKEYNO") ob:SetNoHoles() ob:GoRight() DO EVENTS ob:SetFocus() ENDIF Return .T. } //bSet := {|| .T. } //bRec := {|| .F. } // или задавать как bSet с параметрами bSetUp := { bSet, , bRec } USE ( "CUSTOMER" ) ALIAS CUST NEW SHARED oDlu := oDlu4Font( _HMG_DefaultFontSize ) nW := Sys.ClientWidth nH := oDlu:H1 * ( fCount() + 4 ) + 5 nH := iif( nH > Sys.ClientHeight, Sys.ClientHeight, nH ) nH := { Sys.ClientHeight, nH } sBrowse( Alias(), "DEMO. Test new SBrowse", bSetUp, , nW, nH, , .T., .T. ) IF lNoMain SET WINDOW MAIN ON ENDIF RETURN NIL [/pre2]

gfilatov2002: SergKis пишет: Еще небольшие правки OK

gfilatov2002: Выложил январскую ANSI сборку 22.01 с учетом всех последних изменений по адресу http://hmgextended.com/files/CONTRIB/hmg-22.01-setup.exe Рассматриваю эту сборку как финальную P.S. Архив уникодной сборки также обновил...

Dima: gfilatov2002 пишет: Выложил январскую ANSI сборку 22.01 с учетом всех последних изменений по адресу [pre2] * Updated: '2 TBrowse Demo' sample. Contributed by Sergej Kiselev (see demo2.prg in folder \samples\Advanced\Tsb_2tsb) [/pre2] А так и должно быть когда ставим курсор на какую то строку то все значения в ней по всем полям показаны белым по белому ?

SergKis: Dima пишет А так и должно быть когда ставим курсор на какую то строку то все значения в ней по всем полям показаны белым по белому ? Положил на ftp картинку+prg+exe demo2.prg смотри все ok!, собрал только что. Добавил в Title версию hmg

Dima: SergKis я тебе тоже сложил картинку уже из собранного тобой модуля , ни чего не изменилось

SergKis: Dima Глянь еще вариант положил. Сделал выделенное цветом, вместо GetSysColor( COLOR_WINDOWTEXT ) [pre2] oTsb1:aColor := { ; { CLR_FOCUSB, {|c,n,b| c := n, iif( b:nCell == n, -CLR_HRED, -RGB( 128, 225, 225 ) ) } }, ; { CLR_SELEF , CLR_BLACK }, ; { CLR_SELEB , {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB( 128, 225, 225 ) ) } } ; } [/pre2]



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