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

SergKis: gfilatov2002 Маленькая бяка[pre2] #xcommand DEFINE TBROWSE <name> OBJ <obrw> ; ... [ <.lAutoCol.> ], [ \{<aColSel>\} ], [ <{bInit}> ], ; ... Добавить в FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... IF HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .AND. ValType( aColors[ 1 ] ) == 'A' aColors := aColors[ 1 ] ENDIF IF ISCHAR( uAlias ) .and. !Empty( lLoad ) .and. Empty( aColSel ) aHeaders := {} aNames := {} aColSel := {} (uAlias)->( AEval( array(fCount()), {|cn,nn| cn := FieldName(nn), ; AAdd(aHeaders, cn), AAdd(aNames, cn), AAdd(aColSel, cn) } ) ) IF cell .and. Empty(aColors) aColors := {} AAdd(aColors, { 6, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) AAdd(aColors, {12, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) ENDIF ENDIF ... тогда проходит такой упрощенный вариант DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS ALIAS() ; FONT {"Normal", "Bold", "Bold"} ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR ... [/pre2] Пример тут https://TransFiles.ru/eyn5b

gfilatov2002: SergKis пишет: Маленькая бяка Бяку поправил - благодарю за помощь А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg

SergKis: gfilatov2002 пишет А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg Можно не указывать, возможно, это перебор. Есть в DEFINE ... назначение. и там можно указать. У себя спрячу умолчания во внутрь, что бы меньше писать. Согласен, что это лишнее


SergKis: PS Можно так[pre2] Local aClr := {} ... AAdd(aClr, { 6, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) AAdd(aClr, {12, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS ALIAS() ; FONT {"Normal", "Bold", "Bold"} ; COLORS aClr ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR ... [/pre2] будет тоже самое

gfilatov2002: SergKis пишет: Согласен, что это лишнее OK SergKis пишет: Можно так ... будет тоже самое Спасибо

SergKis: gfilatov2002 Небольшая правка[pre2] FUNCTION _wPost( nEvent, nIndex, xParam ) ... IF nIndex:ClassName == 'TSBROWSE' oWnd := _WindowObj( nIndex:cParentWnd ) IF ! HB_ISOBJECT( oWnd ) ; RETURN NIL ENDIF nIndex := oWnd:GetObj( nIndex:cControlName ):Index ... FUNCTION _wSend( nEvent, nIndex, xParam ) ... IF nIndex:ClassName == 'TSBROWSE' oWnd := _WindowObj( nIndex:cParentWnd ) IF ! HB_ISOBJECT( oWnd ) ; RETURN NIL ENDIF nIndex := oWnd:GetObj( nIndex:cControlName ):Index ... [/pre2]

gfilatov2002: SergKis пишет: Небольшая правка Принято: благодарю за помощь

SergKis: gfilatov2002 Пример с исп. изменений https://TransFiles.ru/zc7jl

gfilatov2002: SergKis пишет: Пример с исп. изменений Благодарю за значительно расширенный пример

SergKis: gfilatov2002 пишет Благодарю за значительно расширенный пример Расширение на любителя , не исп. ранее в тсб on gotfocus, on lostfocus и получил ошибку _wSend(), _wPost(), по инерции добавил карточку, опять же, на AlertOkCancel(). Я не специально, так получилось

SergKis: gfilatov2002 Для пробы (с Игорем обсуждали такую схему) - добавил блок кода DATA bTSDrawCell // In ::TSDrawCell(...) execute - вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell() Мне показалось это интересным. Пример и h_tbrowse.prg тут https://TransFiles.ru/me4mq

gfilatov2002: SergKis пишет: - вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell() Мне показалось это интересным. Это интересно уже тем, что повторяющийся код вынесен в один метод. Проверил - пример отработал нормально. Благодарю за помощь

Haz: SergKis пишет: Мне показалось это интересным. Интересным и перспективным. Спасибо, отличная идея

SergKis: gfilatov2002 Кусочек текста для SuperHeader [pre2] METHOD DrawSuper( lDrawCell ) CLASS TSBrowse ... Else l3DText := nClr3dL := nClr3dS := Nil EndIf /* IF lDrawCell TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 nWidth, ; // 5 cHeading, ; // 6 nHAlign, ; // 7 nClrFore, ; // 8 nClrBack, ; // 9 hFont, ; // 10 hBitMap, ; // 11 nHeightHead, ; // 12 l3DLook, ; // 13 nLineStyle, ; // 14 nClrLine, ; // 15 3, ; // 16 1=Header 2=Footer 3=Super nHeightHead, ; // 17 nHeightFoot, ; // 18 nHeightSuper, ; // 19 nHeightSpecHd, ; // 20 lAdjBmp, ; // 21 lMulTi, ; // 22 Multiline text nVAlign, ; // 23 0, ; // 24 nVertLine nClrTo, ; // 25 lOpaque, ; // 26 iif( lBrush, nClrBack:hBrush, 0 ), ; // 27 l3DText, ; // 28 3D text nClr3dL, ; // 29 3D text light color nClr3dS ) // 30 3D text shadow color ELSE */ IF aSupHd == NIL aSupHd := {} ENDIF oSupHd := TSBcell():New() oSupHd:nRow := 0 oSupHd:nCol := nStartCol oSupHd:nWidth := nWidth oSupHd:nHeight := ::nHeightSuper oSupHd:nCell := nI oSupHd:uValue := cHeading oSupHd:lDrawLine := .F. // DrawLine() If nI <= Len( aSuperHead ) oSupHd:nFromCol := aSuperHead[ nI, 1 ] oSupHd:nToCol := aSuperHead[ nI, 2 ] EndIf oSupHd:hWnd := hWnd // 1 oSupHd:hDC := hDC // 2 oSupHd:xRow := 0 // 3 oSupHd:nStartCol := nStartCol // 4 oSupHd:nSize := nWidth // 5 oSupHd:uData := cHeading // 6 oSupHd:nAlign := nHAlign // 7 oSupHd:nClrFore := nClrFore // 8 oSupHd:nClrBack := nClrBack // 9 oSupHd:hFont := hFont // 10 oSupHd:hBitMap := hBitMap // 11 oSupHd:nHeightCell := nHeightHead // 12 oSupHd:l3DLook := l3DLook // 13 oColumn:l3DLook oSupHd:nLineStyle := nLineStyle // 14 oSupHd:nClrLine := nClrLine // 15 oSupHd:nDrawType := 3 // 16 0-line/1-header/2-footer/3-super oSupHd:nHeightHead := nHeightHead // 17 oSupHd:nHeightFoot := nHeightFoot // 18 oSupHd:nHeightSuper := nHeightSuper // 19 oSupHd:nHeightSpecHd := nHeightSpecHd // 20 oSupHd:lAdjBmp := lAdjBmp // 21 oSupHd:lMultiline := lMulti // 22 Multiline text oSupHd:nVAlign := nVAlign // 23 oSupHd:nVertText := 0 // 24 nVertLine oSupHd:nClrTo := nClrTo // 25 oSupHd:lOpaque := lOpaque // 26 oSupHd:hBrush := iif( lBrush, nClrBack:hBrush, 0 ) // 27 iif( lBrush, nClrBack:hBrush, 0 ) oSupHd:l3DText := l3DText // 28 3D text oSupHd:nClr3dL := nClr3dL // 29 3D text light color oSupHd:nClr3dS := nClr3dS // 30 3D text shadow color oSupHd:nCursor := 0 // 31 Rect cursor oSupHd:lInvertColor := .F. // 32 Invert color AAdd( aSupHd, oSupHd ) IF lDrawCell ::TSDrawCell( oSupHd ) ENDIF nStartCol += nWidth ... [/pre2]

SergKis: PS В примере пропустил [pre2] oCol:bPostEdit := {|cv,ob,nc,oc,xv,ct,nl,nd| nc := ob:nCell oc := ob:aColumns[nc] xv := ob:aArray[ob:nAt][3] ct := ob:aArray[ob:nAt][4] nl := ob:aArray[ob:nAt][5] nd := ob:aArray[ob:nAt][6] If ct == "N" cv := alltrim(cv) If len(cv) > nl ; cv := right(cv, nl) EndIf cv := Ltrim(Str(Val(cv), nl+3, nd)) xv := val(cv) ob:aArray[ob:nAt][3] := xv ob:SetValue(oc, cv) ElseIf ct == "D" xv := CtoD(cv) cv := cValToChar(xv) ob:aArray[ob:nAt][3] := xv ob:SetValue(oc, cv) ElseIf ct == "C" ob:aArray[ob:nAt][3] := cv EndIf ob:Refresh(.F.) ; DO EVENTS ob:Cargo:oCar:nMod += 1 _wSend(3, ob) Return Nil } [/pre2]

gfilatov2002: SergKis пишет: для SuperHeader Спасибо, сделал SergKis пишет: В примере добавил

SergKis: gfilatov2002 Поправил пример, при работе с карточкой данные в колонке "Value" не меняют тип (ранее был "C") и режим Edit учитывает это в блоках кода :bPrevEdt, :bPostEdit. Тут https://TransFiles.ru/ppqsg

gfilatov2002: SergKis пишет: Поправил пример Спасибо, обновил пример также (с форматированием).

SergKis: gfilatov2002 Сборка mgDBU Compile.bat (с build.bat ok!) выдает DBUVIEW.prg(66) Error E0030 Syntax error "syntax error at 'BEFORE'"

SergKis: Разобрался. Забываю, что в этом Compile.bat есть строка @if "%MG_ROOT%"=="" set MG_ROOT=c:\minigui которую надо править каждый раз на @if "%MG_ROOT%"=="" set MG_ROOT=c:\miniguiBcc58 в др. Compile.bat берется из minigui.cfg. там правлю всегда [pre2] # Basic configuration for Compile.bat MG_CMP=harbour MG_BCC=c:\borland\bcc58 MG_ROOT=c:\miniguiBcc58 [/pre2]



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