Форум » 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 По HMG_ALert(...), добавить static переменную для кол-сток, сейчас стоит константа 20 [pre2] STATIC aBackColor, aFontColor STATIC s_nMaxLineas := 20 *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLineas( nMaxLineas ) *-----------------------------------------------------------------------------* IF HB_ISNUMERIC(nMaxLineas ) .and. nMaxLineas > 0 s_nMaxLineas := nMaxLineas ENDIF RETURN s_nMaxLineas ... STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont ) ... LOCAL lExt LOCAL nMaxLineas := HMG_Alert_MaxLineas() ... nWidthDlg := nWidthCli + GetBorderWidth() + iif( nLineas > nMaxLineas, MARGIN * 1.5, 0 ) nHeightCli := ( ( Min( nMaxLineas, nLineas ) + iif( nLineas == 1, 4, 3 ) ) * nChrHeight ) + nVMARGIN_BUTTON + nHeightBtn + GetBorderHeight() ... IF nLineas > 1 IF nLineas > nMaxLineas n := 1 cLblName := "Say_" + StrZero( n, 2 ) @ nChrHeight + GetBorderHeight(), nCol ; EDITBOX (cLblName) VALUE AllTrim( cMsg ) OF (cForm) ; FONT cFont WIDTH nWidthCli - nCol + iif( nLineas < 25, 0.9, 1 ) * MARGIN ; HEIGHT nChrHeight * nMaxLineas + GetBorderHeight() ; FONTCOLOR aFontColor BACKCOLOR aBackColor READONLY NOHSCROLL ELSE ... FOR n := nLenaOp TO 1 STEP -1 This.( aBut[ n ] ).Row := nHeightCli + SEP_BUTTON + GetBorderHeight() / iif( lIsWin10, 2.5, .9 ) - nChrHeight - nHeightBtn This.( aBut[ n ] ).Col := nWidthCli + iif( nLineas > nMaxLineas, MARGIN * 1.5, 0 ) + iif( lIsWin10, 0, GetBorderWidth() / 2 ) - ( nMaxBoton + SEP_BUTTON ) * nOpc++ NEXT n ... [/pre2] Что бы управлять высотой окна

gfilatov2002: SergKis пишет: добавить static переменную... Что бы управлять высотой окна Добавил, конечно. Но переименовал функцию в HMG_Alert_MaxLines() Благодарю за помощь

SergKis: gfilatov2002 Немного подкрутил h_alert.prg для контроля выхода за пределы экрана по width. Вот, что получилось. Пример и исходник тут https://TransFiles.ru/mowhr Можно поиграть размером фонта DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize + 1 DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize - 1 DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize - 2


gfilatov2002: SergKis пишет: подкрутил h_alert.prg для контроля выхода за пределы экрана Эти изменения не приняты по причине увеличения ширины окон Alert* в примере из папки samples\Basic\WALERT_2 Изменения в файле h_alert.prg не должны приводить к изменению вида обычных окон (совместимость снизу вверх)

SergKis: gfilatov2002 пишет изменения не приняты по причине увеличения ширины окон Alert* Очень не хочется писать лишний блок кода bInit. Может такие поправки помогут[pre2] STATIC s_nMaxLineas := 20 STATIC s_lMaxWidth := .F. *-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLineas, lMaxWidth ) *-----------------------------------------------------------------------------* IF HB_ISNUMERIC(nMaxLineas ) .and. nMaxLineas > 0 s_nMaxLineas := nMaxLineas ENDIF IF HB_ISLOGICAL( lMaxWidth ) s_lMaxWidth := lMaxWidth ENDIF RETURN s_nMaxLineas ... STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... LOCAL nMaxLineas := HMG_Alert_MaxLines() LOCAL lMaxWidth := s_lMaxWidth LOCAL nMaxWidth := 0 ... nChrHeight := GetTextHeight( hDC, aOptions[ 1 ], hDlgFont ) + nVMARGIN_BUTTON / 2 // calculate the maximum width of the lines IF lMaxWidth nMaxWidth := GetFontWidth ( cFont, nMaxLen ) ENDIF FOR n := 1 TO nLineas ... [/pre2]

SergKis: PS В примере demo7.prg ставим HMG_Alert_MaxLines(23, .T.)

gfilatov2002: SergKis пишет: такие поправки помогут Да, с этими изменениями примеры не отличаются

SergKis: gfilatov2002 пишет Да, с этими изменениями примеры не отличаются В примере BASIC\WALERT_2 надо, наверно, учесть вылезание списка ошибок за пределы descktop при фонте 16 на 14" мониторе (кнопку почти не видно), т.е. надо ставить ограничение по высоте [pre2] DEFINE FONT DlgFont FONTNAME "DejaVu Sans Mono" SIZE 16 SET MSGALERT FONTCOLOR TO BLACK SET MSGALERT BACKCOLOR TO {248,209,211} cMsg := "" aButton := { "&Continue" } cTitle := "Multiline Error Message" cIcoRes := "Stop64.ico" nIcoSize := 64 aBtnColor := { {235,117,121} } FOR nI := 1 TO 99 cMsg += "Error: " + HB_NtoS( nI ) + " simple error message.;" NEXT HMG_Alert_MaxLines( 15 ) HMG_Alert( cMsg, aButton, cTitle, Nil, cIcoRes, nIcoSize, aBtnColor ) RELEASE FONT DlgFont [/pre2]

SergKis: PS Возможно есть смысл добавить[pre2] STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... // calculate the maximum width of the lines IF lMaxWidth nMaxWidth := GetFontWidth ( cFont, nMaxLen ) IF GetTextWidth( hDC, space(10), hDlgFont ) != GetTextWidth( hDC, replicate("B", 10), hDlgFont ) nMaxWidth *= 0.7 ENDIF ENDIF ... [/pre2]

gfilatov2002: SergKis пишет: есть смысл добавить Спасибо Да, я тоже вышел на этот коэффициент 0,7

SergKis: gfilatov2002 пишет я тоже вышел на этот коэффициент 0,7 Ширины может не хватить, если исп. много заглавных букв типа W,B Можно игнорировать ситуацию или ввести static переменную для коэф. 0.7 или установленного в переменную

gfilatov2002: Убрал статик-переменную s_lMaxWidth, т.к. теперь в ней нет необходимости

SergKis: gfilatov2002 Сделал контроль выхода за пределы экрана по height [pre2] STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... LOCAL nMaxLineas := HMG_Alert_MaxLines() LOCAL nMaxWidth, nMaxHeight ... IF MSC_VER() > 0 .AND. _HMG_IsThemed nWidthDlg += 10 nHeightDlg += 10 ENDIF IF nHeightDlg > System.ClientHeight n := 0 WHILE ( nHeightDlg - ( nChrHeight * ( ++n ) ) ) > System.ClientHeight END nMaxHeight := nChrHeight * n nMaxLineas -= n nHeightDlg -= nMaxHeight nHeightCli -= nMaxHeight ENDIF This.Width := nWidthDlg ... [/pre2]

SergKis: PS В примере BASIC\WALERT_2 окно со списком не выходит за пределы окна при фонте SIZE 16 и больше В примере demo7 установка большего фонта или HMG_Alert_MaxLines(35) - все в пределах окна

gfilatov2002: SergKis пишет: контроль выхода за пределы экрана по height Добавил, контрольный пример отработал нормально. Благодарю за помощь

rvu: gfilatov2002 пишет: Harbour MiniGUI Extended Edition 20.04 (Release) (64-bit) А какие возможности эта версия дает по сравнению с 32-битными? Если не пользоваться большими числами в расчетах. Хотел ради интереса посмотреть примеры. Как я понимаю последняя общедоступная версия была 16.10? Скачал ее, но при сборке примеров почему-то вылезает ошибка с файлом minigui.ch, хотя все есть, вроде. Если кто помнит, там все файлы есть или надо еще что-то скачивать? Или просто пути там не так прописаны? Хочется вообще посмотреть на это, как на демо, понять нужность или не ненужность для себя. А с поддержкой увы, ранее хотел говорить с директором о развитии, а тут с этим вирусом самим бы выжить.

gfilatov2002: rvu пишет: какие возможности эта версия дает по сравнению с 32-битными? Благодарю за вопрос! Если коротко, то это - относительно высокая скорость выполнения и возможность адресовать больший объем памяти, поскольку приложение становится нативным для 64-битной среды. Подробнее можно почитать статьи в Интернете. Приведу для справки список поддерживаемых Си-компиляторов: - MinGW GNU C 10.1 - самый свежий и самый быстрый из всех - BCC 64, основанный на LLVM/Clang C 3.3.1; - Visual C++ 19.24.28314; - PellesC 9.0.

SergKis: gfilatov2002 Правки небольшие [pre2] CLASS TSBrowse FROM TControl ... METHOD DrawFooters( lDrawCell ) INLINE ::DrawHeaders( .T., lDrawCell ) ... METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... oColumn:oCellEnum:nClrBack := nClrBackS // 9 ... oColumn:oCellEnum:nClrTo := nClrToS // 25 ... oColumn:oCellFoot:nVAlign := nVAlign // 23 oColumn:oCellFoot:nVertText := 0 // 24 ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... oColumn:oCell:nRow := xRow // ... oColumn:oCell:xRow := xRow // 3 ... oColumn:oCell:l3DLook := oColumn:l3DLook // 13 ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... IF ! ::lDrawLine IF empty( oColumn:oCell ) oColumn:oCell := TSBcell():New() ENDIF ... [/pre2]

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

SergKis: gfilatov2002 Добавьте ф-ю для получения hmg имени фонта от handle[pre2] FUNCTION HMG_FontName( FontHandle ) LOCAL FontName, i IF ( i := AScan( _HMG_aControlHandles, FontHandle ) ) > 0 IF _HMG_aControlType [ i ] == "FONT" FontName := _HMG_aControlNames [ i ] ENDIF ENDIF RETURN FontName Использование ... cFntH := HMG_FontName( oHead:hFont ) cFntC := HMG_FontName( oCell:hFont ) cFntF := HMG_FontName( oFoot:hFont ) ... cN := cName+'_Head' @ nY, nX LABEL &cN VALUE cValH WIDTH oCell:nSize HEIGHT oHead:nHeightCell FONT cFntH ; BACKCOLOR aClrToH FONTCOLOR aForeH BORDER ON INIT {|| nY += This.Height + nGaps } cN := cName+'_Cell' @ nY, nX LABEL &cN VALUE cValC WIDTH oCell:nSize HEIGHT oCell:nHeightCell FONT cFntC ; BACKCOLOR aBackC FONTCOLOR aForeC BORDER ON INIT {|| nY += This.Height + nGaps } cN := cName+'_Foot' @ nY, nX LABEL &cN VALUE cValF WIDTH oCell:nSize HEIGHT oFoot:nHeightCell FONT cFntF ; BACKCOLOR aBackF FONTCOLOR aForeF BORDER ON INIT {|| nY += This.Height + nGaps } [/pre2]



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