Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить
Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
Andrey: В функциях Alert*() наверное нужно сделать запоминание/возврат текущего окна и сохранения среды This Я сталкивался с проблемами при показе простого сообщения. Приходиться делать так: [pre2] .... _SetThisFormInfo(oWnd) AlertStop(cMsg) // или вызов другого окна _SetThisFormInfo() .....[/pre2] Пример отправил на почту.
gfilatov2002: Опубликована финальная сборка 24.06 Стандартная сборка Профессиональная сборка (под паролем) Также были подготовлены дополнительные сборки для следующих компиляторов: - MinGW GNU C 14.1.0 (packaged on 2024-05-08) - BCC 7.70 (32-bit) (основан на коде Борланда) - BCC 7.70 (64-bit) (основан на CLang 5.0) Желаю всем хорошего дня
gfilatov2002: Продолжаем хорошие новости... Протестировал текущую сборку Минигуи со свежей сборкой разрабатываемой версии компилятора MinGW 15.0 (64-bit). Результат можно увидеть на картинке ниже.
krutoff: У меня один TSBrowse вызывает несколько десятков броузов. Работает один блок создания экземпляра TSBrowse. С версии 24.03 в каждом экземляре цвет заголовка и Background стал меняться. Откатился на верию 24.01 - цвета отработали нормально..
Andrey: krutoff пишет: С версии 24.03 в каждом экземляре цвет заголовка и Background стал меняться. Поставил сегодня 24.06, собрал свою большую прогу - цвет фона таблицы стал другим ! У меня в коде так: [pre2] DEFINE TBROWSE oBrw ... ; BACKCOLOR aBackColor ; ...[/pre2] В примере Tsb_oHmgData в новой версии цвет фона таблицы тоже меняется ! Сделал в старой 23.12 фон нормальный.
SergKis: krutoff пишет С версии 24.03 ... Andrey пишет в старой 23.12 фон нормальный Была исправлена многолетняя ошибка в тсб (METHOD New) задания цветов параметром [pre2] DEFINE TBROWSE oBrw ... ; BACKCOLOR aBackColor FONTCOLOR aFontColor ; COLOR aColors ; [/pre2] Если посмотрите код, то была в массив aTmpColor сначала установка из элементов параметра команды, а потом делались Default-ы на все элементы aTmpColor, потом менялись принудительно др. элементы, например[pre2] IF lAutoFilter aTmpColor[ 19 ] := GetSysColor( COLOR_INACTCAPTEXT ) ELSEIF lAutoSearch aTmpColor[ 19 ] := GetSysColor( COLOR_INFOBK ) ENDIF [/pre2] т.е. затиралась установка из массва параметра команды тсб. Приходилось всегда править цвета доп. методами :SetColor(...) Правка коснулась перестановкой действий, сначала в массиве aTmpClor заполняются цвета по умолчанию (все элементы), потом команды IF lAutoFilter ... (см. выше) и потом из параметров команды тсб переносятся значения указанных\заданных элементов. Код стал такой [pre2] METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... aTmpColor[ 1 ] := GetSysColor( COLOR_WINDOWTEXT ) // nClrText aTmpColor[ 2 ] := GetSysColor( COLOR_WINDOW ) // nClrPane aTmpColor[ 3 ] := GetSysColor( COLOR_BTNTEXT ) // nClrHeadFore aTmpColor[ 4 ] := GetSysColor( COLOR_BTNFACE ) // nClrHeadBack aTmpColor[ 5 ] := GetSysColor( COLOR_CAPTIONTEXT ) // nClrForeFocu aTmpColor[ 6 ] := GetSysColor( COLOR_ACTIVECAPTION ) // nClrFocuBack aTmpColor[ 7 ] := GetSysColor( COLOR_WINDOWTEXT ) // nClrEditFore aTmpColor[ 8 ] := GetSysColor( COLOR_WINDOW ) // nClrEditBack aTmpColor[ 9 ] := GetSysColor( COLOR_BTNTEXT ) // nClrFootFore aTmpColor[ 10 ] := GetSysColor( COLOR_BTNFACE ) // nClrFootBack aTmpColor[ 11 ] := CLR_HGRAY // nClrSeleFore inactive focused aTmpColor[ 12 ] := CLR_GRAY // nClrSeleBack inactive focused aTmpColor[ 13 ] := GetSysColor( COLOR_BTNTEXT ) // nClrOrdeFore aTmpColor[ 14 ] := GetSysColor( COLOR_BTNFACE ) // nClrOrdeBack aTmpColor[ 15 ] := GetSysColor( COLOR_BTNSHADOW ) // nClrLine aTmpColor[ 16 ] := GetSysColor( COLOR_BTNTEXT ) // nClrSupHeadFore aTmpColor[ 17 ] := GetSysColor( COLOR_BTNFACE ) // nClrSupHeadBack aTmpColor[ 18 ] := GetSysColor( COLOR_BTNTEXT ) // nClrSpecHeadFore aTmpColor[ 19 ] := GetSysColor( COLOR_BTNFACE ) // nClrSpecHeadBack aTmpColor[ 20 ] := CLR_HRED // nClrSpecHeadActive IF lAutoFilter aTmpColor[ 19 ] := GetSysColor( COLOR_INACTCAPTEXT ) ELSEIF lAutoSearch aTmpColor[ 19 ] := GetSysColor( COLOR_INFOBK ) ENDIF IF HB_ISARRAY( aColors ) .AND. Len( aColors ) > 0 IF HB_ISARRAY( aColors[ 1 ] ) FOR EACH aClr IN aColors IF HB_ISNUMERIC( aClr[ 1 ] ) .AND. aClr[ 1 ] > 0 .AND. aClr[ 1 ] <= Len( aTmpColor ) IF aClr[ 2 ] != NIL aTmpColor[ aClr[ 1 ] ] := aClr[ 2 ] ENDIF ENDIF NEXT ELSE AEval( aColors, {| bColor, nEle | iif( bColor != NIL, aTmpColor[ nEle ] := bColor, ) } ) ENDIF ENDIF ... [/pre2]
Andrey: SergKis пишет: Была исправлена многолетняя ошибка в тсб (METHOD New) задания цветов параметром Так как исправить/задать заново фон ТСБ ? P.S. Поставил так, всё равно не работает !!! [pre2] // цвет фона под таблицей IF MGVersNumba() >= 231202 // MG Version 23.12.02 :hBrush := aClrBrush ELSE DeleteObject(:hBrush) :hBrush := CreateSolidBrush(aClrBrush[1], aClrBrush[2], aClrBrush[3]) ENDIF[/pre2]
SergKis: Кто нибудь может объяснить такую херомантию с цветами SpecHd ? Имеем в [pre2] METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... aTmpColor[ 18 ] := GetSysColor( COLOR_BTNTEXT ) // nClrSpecHeadFore aTmpColor[ 19 ] := GetSysColor( COLOR_BTNFACE ) // nClrSpecHeadBack ... IF lAutoFilter aTmpColor[ 19 ] := GetSysColor( COLOR_INACTCAPTEXT ) ELSEIF lAutoSearch aTmpColor[ 19 ] := GetSysColor( COLOR_INFOBK ) ENDIF ... ::aColors := aTmpColor ... в TSColumn еще краше METHOD DefColor( oBrw, aTmpColor ) CLASS TSColumn ... IF oBrw == NIL ... ELSE ... aTmpColor[ 17 ] := oBrw:nClrHeadBack, ; aTmpColor[ 20 ] := oBrw:nClrSpcHdActive IF oBrw:lEnum DEFAULT aTmpColor[ 18 ] := oBrw:nClrHeadFore, ; aTmpColor[ 19 ] := oBrw:nClrHeadBack ELSE DEFAULT aTmpColor[ 18 ] := oBrw:nClrEditFore, ; aTmpColor[ 19 ] := oBrw:nClrEditBack ENDIF ENDIF ... ::nClrSpcHdFore := aTmpColor[ 18 ] ::nClrSpcHdBack := aTmpColor[ 19 ] ... получается, что нет нормального задания цвета для спец. header, т.е. задаем ... AAdd( aColors, { CLR_EDITF , {|| CLR_RED } } ) // 7 , текста редактируемого поля AAdd( aColors, { CLR_EDITB , {|| CLR_YELLOW } } ) // 8 , фона редактируемого поля ... AAdd( aColors, { CLR_SPCF , {|| CLR_RED } } ) // 18, specheader text AAdd( aColors, { CLR_SPCB , {|| CLR_GRAY } } ) // 19, specheader back ... [/pre2] В итоге получаем цвет спец. header от CLR_EDITF и CLR_EDITB, что не правильно.
Andrey: Если задаём цвет фона под таблицей ТОЛЬКО так: [pre2] DEFINE TBROWSE &cBrw OBJ oBrw OF &cForm ; AT oTsb:nY, oTsb:nX ALIAS oTsb:cAls WIDTH oTsb:nW HEIGHT oTsb:nH CELL ; FONT oTsb:aFont ; // все фонты для таблицы BRUSH oTsb:aClrBrush ; // цвет фона под таблицей[/pre2] То в новой версии Минигуи 24.06 - цвет фона под таблицей будет белым ... Если добавить так, самым последним при назначении цветов: [pre2] :hBrush := CreateSolidBrush(aClrBrush[1], aClrBrush[2], aClrBrush[3]) // цвет фона под таблицей [/pre2] То цвет фона под таблицей будет правильным. Объясните мне разницу - почему так нужно делать ? Мне не сложно добавить ещё строку в код, было бы без утечек памяти. И ещё фигня происходит, после использования [pre2] oBrw:Enabled(.F.) ... oBrw:Enabled(.T.)[/pre2] Цвет фона под таблицей меняется на белый...
gfilatov2002: Andrey пишет: Если задаём цвет фона под таблицей ТОЛЬКО так: DEFINE TBROWSE &cBrw OBJ oBrw OF &cForm ; AT oTsb:nY, oTsb:nX ALIAS oTsb:cAls WIDTH oTsb:nW HEIGHT oTsb:nH CELL ; FONT oTsb:aFont ; // все фонты для таблицы BRUSH oTsb:aClrBrush ; // цвет фона под таблицей То в новой версии Минигуи 24.06 - цвет фона под таблицей будет белым Благодарю за сообщение. Я уже поправил использование класса BRUSH для этого синтаксиса команды DEFINE TBROWSE. Andrey пишет: после использования oBrw:Enabled(.F.) ... oBrw:Enabled(.T.) Цвет фона под таблицей меняется на белый. Эту проблему я тоже решил, внес исправление в код этого метода. Примечание. В вашей программе не нужно делать никаких изменений, нужна только исправленная библиотека.
Andrey: gfilatov2002 пишет: В вашей программе не нужно делать никаких изменений, нужна только исправленная библиотека. Там нужно код править для цветов, с учётом нового задания цвета для спецхидера. Сделаю сам, когда пришлёте новую библиотеку.
gfilatov2002: Andrey пишет: когда пришлёте новую библиотеку Проверь свою почту Отправлено: Вчера, 15:39 Андрей! Высылаю для проверки исправленный вариант библиотеки. Сейчас такой вызов должен отработать нормально DEFINE TBROWSE oBrw AT nY,nX WIDTH nW HEIGHT nH CELL ; FONT aTsbFont ; BRUSH aBrush ; ON INIT {|ob|
Andrey: Часть заработало, а цвета спецхидера нет. Отправил письмо на почту.
gfilatov2002: Andrey пишет: цвета спецхидера нет. Поправил назначение цветов спецхидера. Результат см. на картинках
Andrey: ColorBack для footer "SELECTOR" берется из последней фантомной (добавленной колонки), которая перед VScrollBar-ом (исторически) Для замены цвета введена переменная oBrw:nClrSelectorHdBack := ... Если менять на другой цвет, то вверх таблицы становиться обгрызанным. Можно ли добавить ЕЩЁ одну переменную, типа oBrw:nClrSelectorBottomBack для задания своего цвета ? Или добавить другую переменную для верха "SELECTOR", типа oBrw:nClrSelectorTopBack для задания своего цвета ? Вот для этого (1):
gfilatov2002: Andrey пишет: добавить ЕЩЁ одну переменную Я добавил новую переменную nClrSelectorFtBack Такой вид подвала устраивает
SergKis: Andrey пишет Можно ли добавить ЕЩЁ одну переменную Можно добавить переменную отключающую :nClrSelectorHdBack и вкл. работу от данных цвета из колонки[pre2] DATA nClrSelectorHdBack // special selector header background color DATA lClrSelectorHdBack AS LOGICAL INIT .T. // special selector header background color ON\OFF DATA nClrLine // grid line color ... METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... IF ::lDrawHeaders .AND. ! lFooters ... IF !( nJ == 1 .AND. ::lSelector ) IF ( nClrBack := iif( ::nColOrder == nI, oColumn:nClrOrdeBack, oColumn:nClrHeadBack ) ) == NIL nClrBack := iif( ::nColOrder == nI, nClrOrdeBack, nClrHeadBack ) ENDIF ELSEIF ! ::lClrSelectorHdBack nClrBack := oColumn:nClrHeadBack ELSEIF ::nClrSelectorHdBack != NIL nClrBack := ::nClrSelectorHdBack ELSE nClrBack := ATail( ::aColumns ):nClrHeadBack ENDIF ... IF ::lFooting .AND. ::lDrawFooters ... IF !( nJ == 1 .AND. ::lSelector ) // JP nClrBack := iif( oColumn:nClrFootBack != NIL, oColumn:nClrFootBack, nClrFootBack ) ELSEIF ! ::lClrSelectorHdBack nClrBack := oColumn:nClrFootBack ELSEIF ::nClrSelectorHdBack != NIL nClrBack := ::nClrSelectorHdBack ELSE nClrBack := ATail( ::aColumns ):nClrFootBack ENDIF ... тогда в prg делаем ~ так ... oBrw:lClrSelectorHdBack := .F. ... когда виртуальные колонки уже есть в oBrw:aColumns // изменим цвет колонки - виртуальная колонка / virtual column oBrw:GetColumn("SELECTOR"):nClrBack := nBCSpH oBrw:GetColumn("SELECTOR"):nClrFore := CLR_RED oBrw:GetColumn("SELECTOR"):nClrHeadBack := CLR_GREEN oBrw:GetColumn("SELECTOR"):nClrFootBack := CLR_YELLOW ... [/pre2]
SergKis: PS Для SpecHeader так же нужна правка, сделал так (тот же метод)[pre2] ... IF ::lDrawSpecHd ... IF nI == nBegin .AND. ::lSelector //!!! nClrBacks := iif( ::lDrawSpecHd, ::nClrSpcHdBack, nClrHeadBack ) IF ::nClrSelectorHdBack != NIL nClrBacks := iif( ::lClrSelectorHdBack, ::nClrSelectorHdBack, oColumn:nClrSpcHdBack ) ELSE nClrBacks := nClrHeadBack ENDIF ELSE nClrBacks := iif( ::nPhantom == -1, ATail( ::aColumns ):nClrSpcHdBack, nClrPane ) ENDIF ... Пример использования oBrw:nClrSelectorHdBack := CLR_YELLOW oBrw:lClrSelectorHdBack := .F. // background OFF // изменим цвет колонки - виртуальная колонка / virtual column oCol := oBrw:GetColumn("SELECTOR") oCol:nClrBack := nBCSpH oCol:nClrFore := CLR_RED oCol:nClrHeadBack := CLR_BLUE oCol:nClrFootBack := CLR_GREEN oCol:nClrSpcHdBack := CLR_YELLOW oCol := oBrw:GetColumn("ORDKEYNO") oCol:nClrBack := nBCSpH oCol:nClrFore := CLR_RED oCol:nClrFootBack := nBCSpH oCol:nClrFootFore := CLR_RED [/pre2]
SergKis: gfilatov2002 Сделал правки [pre2] METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... IF ::lDrawSpecHd ... IF HB_ISNUMERIC( oColumn:nSLineStyle ) nLineStyle := oColumn:nSLineStyle ENDIF IF nAlign != DT_CENTER .AND. ::nCellMarginLR != NIL cHeading := ::CellMarginLeftRight( nJ, cHeading, oColumn, nAlign, lMultiLine, 0 ) ENDIF // SergKis 11.11.21 nBitmapMask := oColumn:nBmpMaskSpcHd ... METHOD InsColNumber( nWidth, nColumn, cName, nAlign, uBitmap ) ... IF ::lIsDbf ... oCol:cFooting := {| nc, ob | nc := ob:nLen, iif( Empty( nc ), '', hb_ntos( nc ) ) } IF !Empty( uBitmap ) .and. Valtype( uBitmap ) $ "NC" IF Valtype( uBitmap ) == "N" oCol:aBitMaps := { Nil, StockBmp ( uBitmap ) } ELSE oCol:aBitMaps := { Nil, LoadImage( uBitmap ) } ENDIF oCol:uBmpCell := {|nc,ob,oc| oc := ob:aColumns[ nc ], ; nc := iif( (ob:cAlias)->(Deleted()), 2, 1 ), ; oc:aBitMaps[ nc ] } ENDIF ... oCol:nFieldDec := 0 IF HB_ISNUMERIC( nAlign ) .and. nAlign >= DT_LEFT .and. nAlign <= DT_RIGHT oCol:nSAlign := nAlign oCol:nAlign := nAlign oCol:nFAlign := nAlign ENDIF IF nColumn > 0 .and. nColumn <= Len( ::aColumns ) ... FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH ) ... DEFAULT aColor := { ; { CLR_FOCUSF, GetSysColor( COLOR_WINDOWTEXT ) }, ; { CLR_FOCUSB, {|c,n,b| c := n, iif( b:nCell == n, -CLR_HRED, iif( b:lIsDbf .and. (b:cAlias)->(Deleted()), -CLR_HGRAY, -RGB( 128, 225, 225 ) ) ) } }, ; { CLR_SELEF , GetSysColor( COLOR_WINDOWTEXT ) }, ; { CLR_SELEB , {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB( 128, 225, 225 ) ) } } } ... Можно задавать для _TBrowse(...) oTsb := oHmgData() oTsb:aFooter := .T. oTsb:aEdit := .T. oTsb:lSpecHd := .T. oTsb:uSelector := 20 oTsb:aNumber := { 1, 50, DT_RIGHT, "bRecDel16" } // варианты: //oTsb:aNumber := { 1, 50 } // center and no bitmap //oTsb:aNumber := { 1, 50, DT_RIGHT } // no bitmap //oTsb:aNumber := { 1, 50, DT_RIGHT, 1 } // StockBmp(1) //oTsb:aNumber := { 1, 50, DT_RIGHT, 7 } // StockBmp(7) oBrw := _TBrowse( oTsb, cAls, "Brw_1", nY, nX, nW, nH ) ... Может быть стоит добавить в массив ф-ии StockBmp() еще пару,тройку простых bmp - крестик, галочку, кружочек, для пометки записей удаленных и ... [/pre2] Пример на версии 23.12 https://TransFiles.ru/opjc0
gfilatov2002: SergKis пишет: Сделал правки Принято с благодарностью SergKis пишет: Пример на версии 23.12 Криптование базы у меня НЕ работает. Также потребовалось добавить oBrw:lRowPosAtRec := .T. и пропущенную обработку новых параметров метода InsColNumber() в функцию _DefineTBrowse(). После этого вывод картинки в колонку нумератора заработал.
полная версия страницы