Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
|
| постоянный участник
|
Пост N: 4498
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.01.24 19:34. Заголовок: PS видел, но не поня..
PS видел, но не понял к чему относятся #xtranslate IsErrorLogActive () ; => ; _HMG_CreateErrorLog и #xcommand SET LOGERROR <x:ON,OFF> => _HMG_CreateErrorlog := ( Upper(<(x)>) == "ON" ) возможно надо такую еще #xcommand SET LOGERROR TO [<uVal>] => _HMG_CreateErrorlog := !Empty( <uVal> ) #xtranslate SetErrorLogActive ( <uVal> ) ; => ; _HMG_CreateErrorLog := !Empty( <uVal> ) и тогда в _LogFile(...) IF ! IsErrorLogActive () RETURN .F. ENDIF Это, если речь об этом шла с переменной _HMG_CreateErrorLog
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2245
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.01.24 21:16. Заголовок: SergKis пишет: Проп..
SergKis пишет: цитата: | Пропустил ошибку в строке |
| Поправил. Большое спасибо! SergKis пишет: цитата: | тогда в _LogFile(...) IF ! IsErrorLogActive () RETURN .F. ENDIF |
| Добавил этот код.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2246
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.01.24 11:55. Заголовок: Выложил финальную сб..
Выложил финальную сборку 24.01 с последними исправлениями и дополнениями по адресу Скачать SHA-256: 8d506a1c284bb8cbc6ba3f1298a6a806585ee9a718e560113111e8998b91324e и в виде архива Скачать SHA-256: 3f40d354e2e7247c670f45bba4f55096e9823468f22f30d5c86b0f6e0f84e67c Желаю всем хорошего дня P.S. За последние годы была прекращена разработка и поддержка нескольких проектов, основанных на синтаксисе команд Минигуи: - 2017 - официальный релиз HMG - 2017 - Marinas GUI, основанный на Qt (http://marinas-gui.org/projects/marinas-gui/_Index_help_marinas-gui.htm) - 2023 - OOHG, использующий OOП Если не трудно, напишите ваш комментарий...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 4499
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.01.24 14:10. Заголовок: gfilatov2002 пишет в..
gfilatov2002 пишет - релиз HMG, не было TsBrowse и был ли препроцессор команд, уже забыл, помню, что в основе была работа напрямую с _HMG_SYSDATA - Marinas GUI, сложноватый синтаксис и переход с VO - OOHG, ООП был (отличный от VO), но суть (наличие массива _HMG_SYSDATA), а значит вся работа по доступу к окнам, контролам это AScan() Когда появился hb 2.0 unicode все это пощупали, HMG Extended оказалась единственным работоспособным и адаптируемым к своим возможностям проектом, к тому в очень актуальном состоянии С 2010 года перевели проекты на hb console+wvt, а 2011 года, пощупав, многое, перешли с VO на HMG Extended. Товарищ полностью обвязал объектами, как VO и с мин. затратами перешел. У меня была сильная помесь кода от clipper (в VO на базе VOSсripta) и GUI (свои ф-ии окна), то идти его путем (объектов) было сложно. Переход на родной язык hmg препроцессора оказался оч. к стати. Григорию, за его труд, БОЛЬШОЕ СПАСИБО ! Единственным минусом, который не преодолел я (переход на последние версии hmg) это 1. сокрытие команд, функций из FUNCTION -> STATIC FUNCTION, например, в h_controlmisc.prg не было static ф-ий, теперь все скрыто, доступ, практически только через Set\GetProperty() 2. ускорение доступа к элементам hmg, например, в моей версии сделано (работа через полученный ранее index) *-----------------------------------------------------------------------------* Function GetControlName ( ControlName, ParentForm, Index ) *-----------------------------------------------------------------------------* Local i := GetControlIndex ( ControlName, ParentForm, Index ) if i == 0; Return '' EndIf Return ( _HMG_aControlNames [ i ] ) *-----------------------------------------------------------------------------* Function GetControlHandle ( ControlName, ParentForm, Index ) *-----------------------------------------------------------------------------* Local i := GetControlIndex ( ControlName, ParentForm, Index ) if i == 0; Return 0 EndIf Return ( _HMG_aControlHandles [ i ] ) *-----------------------------------------------------------------------------* Function GetControlContainerHandle ( ControlName, ParentForm, Index ) *-----------------------------------------------------------------------------* Local i := GetControlIndex ( ControlName, ParentForm, Index ) if i == 0; Return 0 EndIf Return ( _HMG_aControlContainerHandle [ i ] ) ... Сейчас я бы это упростил, сделав IF HB_ISNUMERIC(ControlName) i := ControlName ControlName := _HMG_aControlNames [ i ] ELSE i := GetControlIndex ( ControlName, ParentForm ) ENDIF PS. Пару лет назад товарищ сделал вывод, что делать проект на псевдо ООП командах hmg значительно быстрее, чем на VO, согласен с этим выводом уже давно.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2247
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.01.24 19:19. Заголовок: SergKis пишет: дела..
SergKis пишет: цитата: | делать проект на псевдо ООП командах hmg значительно быстрее |
| Как обычно, благодарю за Ваш быстрый ответ. Надеюсь, что это интересно не только мне.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 7664
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.24 17:38. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | За последние годы была прекращена разработка и поддержка нескольких проектов, основанных на синтаксисе команд Минигуи: - 2017 - официальный релиз HMG - 2017 - Marinas GUI, основанный на Qt (http://marinas-gui.org/projects/marinas-gui/_Index_help_marinas-gui.htm) - 2023 - OOHG, использующий OOП |
| 2017 - официальный релиз HMG - не понравился 2017 - Marinas GUI - пробовал делать свою программу, тоже не понравился 2023 - OOHG - не смотрел В 2012 году начал разбираться с МиниГуи, понравилось присутствие разработчика на этом сайте, ну и его помощь в освоении МиниГуи ! Григорий, ОГРОМНОЕ СПАСИБО за твой такой большой труд ! Да и без Сергея я бы тоже не осилил перенос программы на МиниГуи, тоже ОГРОМНОЕ СПАСИБО ! Свою большую прогу с терминалки на МиниГуи переводил 4 года.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 4500
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.01.24 18:02. Заголовок: gfilatov2002 Не пон..
gfilatov2002 Не понял с примером FiveLibsTest. Может не так понимаю его ? prgflags=-DHBMK_HAS_HMGE -работает а prgflags=-DHBMK_HAS_GTWVG - нет, не находит frm_class.ch(50) Error F0029 Can't open #include file 'gtwvg.ch' его нет и в core-master от 09.03.23, есть hbgtwvg.ch т.е. пример должен работать под разными проектами hmge, hwgui, ... но gtwvg - должен быть в hb и по идее должен работать или ошибаюсь ? то что нет gtwvg.lib понимаю, но у меня под msvc hb (от 2020 года) в contrib есть gtwvg.lib, но файла gtwvg.ch так же нет PS. Может gtwvg.lib надо вкл. в сборку hmg ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2248
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.01.24 18:50. Заголовок: SergKis пишет: prgf..
SergKis пишет: цитата: | prgflags=-DHBMK_HAS_HMGE -работает |
| Этот пример был доработан для корректного использования с библиотекой Минигуи. Работа с другими библиотеками не тестировалась...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2249
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.01.24 14:48. Заголовок: Всем кому это интересно
Продолжаем хорошие новости Рекомендую посмотреть довольно зрелый IDE, заточенный для работы с SQL базами, свежая версия которого была выпущена вчера. Этому проекту уже пять лет, и он поставляется в 3-х версиях: - полной; - персональной; - для экспертов. click here
| |
|
SergKis
|
| постоянный участник
|
Пост N: 4507
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.02.24 07:27. Заголовок: gfilatov2002 Неболь..
gfilatov2002 Небольшая правка CLASS TIniData INHERIT THmgData ... VAR aYesNo AS ARRAY INIT { "Yes", "No" } VAR nMaxVal AS NUMERIC INIT 20 // Max. length Value for note ... METHOD Write( cFile, lUtf8 ) CLASS TIniData ... IF ! Empty( cStr[2] ) IF lBlk cVal := iif( ! ::lUtf .AND. lUtf8, hb_StrToUtf8( cStr[2] ), cStr[2] ) ELSE IF Len(cVal) <= ::nMaxVal cVal := Left( cVal + Space( ::nMaxVal ), ::nMaxVal ) ENDIF cVal += space(3) + iif( ! ::lUtf .AND. lUtf8, hb_StrToUtf8( cStr[2] ), cStr[2] ) ENDIF ENDIF ... Тогда будет выравнивание в секции oIni для строк с наличием примечания на длину :nMaxVal и можно задать new значение oIni:nMaxVal := 40 для выполнения oIni:Write() И предложение *----------------------------------------------------------------------------* FUNCTION HMG_GetAllFonts( lObj ) *----------------------------------------------------------------------------* LOCAL oFonts := oHmgData() LOCAL aFonts := {}, cName LOCAL aFont := {}, cFont, hFont FOR EACH cFont IN _HMG_aControlType IF cFont == "FONT" AAdd( aFonts, _HMG_aControlNames[ hb_enumindex( cFont ) ] ) ENDIF NEXT IF lObj == NIL ; RETURN aFonts ENDIF FOR EACH cName IN aFonts hFont := GetFontHandle( cName ) cFont := GetFontParam ( hFont ) hb_AIns( cFont, 1 , cName , .T. ) hb_ADel( cFont, Len(cFont), .T. ) IF Empty( lObj ) AAdd( aFont, AClone( cFont ) ) ELSE oFonts:Set( cName, AClone( cFont ) ) ENDIF NEXT IF Empty( lObj ) ; RETURN aFont ENDIF RETURN oFonts
| |
|
SergKis
|
| постоянный участник
|
Пост N: 4508
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.02.24 09:43. Заголовок: gfilatov2002 Вопроси..
gfilatov2002 Вопросик по использованию hrb в hmg с использованием hb_compileFromBuff(...), hb_compileBuf(...). Как быть, например, с i_psevdofunc.ch ? Его, наверно, надо отключить из hmg.ch сборки по какому то признаку, а из i_psevdofunc.ch сделать psevdofunc.lib ? Или есть др. варианты ?
| |
|
|
gfilatov2002
|
| moderator
|
Пост N: 2266
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.02.24 11:59. Заголовок: SergKis пишет: Небо..
SergKis пишет: Большое спасибо SergKis пишет: цитата: | Вопросик по использованию hrb в hmg |
| Я глубоко не разбирался с использованием hrb в hmg (только проверял для Харбор-кода). SergKis пишет: цитата: | надо отключить из hmg.ch сборки по какому то признаку, а из i_psevdofunc.ch сделать psevdofunc.lib ? |
| Полностью доверяю вашему опыту в этом вопросе.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2268
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.02.24 17:39. Заголовок: Всем кому это интересно
Решил не добавлять новую функцию PrivateExtractIcons(), а вместо этого изменить уже существующую в ядре функцию ExtractIconEx(), добавив в нее два новых параметра, которые задают высоту и ширину иконки. цитата: | Syntax: ExtractIconEx( cResName, nItem [, nX ] [, nY ] ) => { hIcon, nId }, where nX and xY are the icon sizes in pixels (32x32 by default). |
| Примеры использования: ExtractIconEx( cIcon, -1 ) возвращает количество иконок в DLL или EXE hIconFromDll := ExtractIconEx( cIcon, nIcon, 256, 256 )[1] получает хэндл иконки с номером nIcon, которая находится в файле cIcon
| |
|
Andrey
|
| постоянный участник
|
Пост N: 7680
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.02.24 18:56. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | ExtractIconEx(), добавив в нее два новых параметра, которые задают высоту и ширину иконки. |
| Супер !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 7681
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.02.24 08:28. Заголовок: А можно ещё сделать ..
А можно ещё сделать так ? aIcons := ExtractIconEx( cIcon, nIcon ) - вытащить ВСЕ иконки, т.е. все размеры иконок Или ключик какой то предусмотреть, чтобы осталась совместимость со старым синтаксисом ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2269
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.24 16:04. Заголовок: Andrey пишет: вытащ..
Andrey пишет: цитата: | вытащить ВСЕ иконки, т.е. все размеры иконок |
| В системе не хранятся иконки ВСЕХ размеров. Если в ресурсной DLL нет иконки требуемого размера, то при извлечении иконки этого размера она масштабируется из хранящейся там иконки большего размера.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 4509
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.24 17:58. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение для ф-ий Alert...(...) сделать обработку параметра Title как массива, например, для ф-ии *-----------------------------------------------------------------------------* FUNCTION AlertYesNo ( Message, Title, RevertDefault, Icon, nSize, aColors, lTopMost, bInit ) *-----------------------------------------------------------------------------* LOCAL aOptions := { '&' + _HMG_aABMLangLabel [20], '&' + _HMG_aABMLangLabel [21] } LOCAL nDefaultButton := 1 IF HB_ISARRAY( Title ) aOptions := Title[2] Title := Title[1] ENDIF ... а то получается много мороки, сохранять перед AlertYesNo(...) и др. функциями данные из _HMG_aABMLangLabel [20] и _HMG_aABMLangLabel [21], а потом надо восстанавливать и + к этому может мешать '&' + _HMG_..., надо на другое место '&' поставить.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2270
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.24 18:13. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предложение для ф-ий Alert...(...) |
| Сделал, конечно. Благодарю за подсказку
| |
|
gfilatov2002
|
| moderator
|
Пост N: 2271
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.02.24 19:42. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Иконка номер 308 размера 64x64, взятая из системной DLL, выглядит так:
| |
|
SergKis
|
| постоянный участник
|
Пост N: 4510
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 00:44. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение по FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName ) ... ON RELEASE iif( ! _SetGetGlobal( "_HMG_PressButton" ) .AND. lClosable, _HMG_ModalDialogReturn := 0, NIL ) This.Cargo := oHmgData() FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName, nMaxLen ) ... STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... LOCAL lExt, nY, nX, cIco ... DEFINE TIMER oTimer OF ( cForm ) INTERVAL nSeconds * 1000 ACTION ( _SetGetGlobal( "_HMG_PressButton", .T. ), ThisWindow.Release() ) This.Cargo:oTimer := "TIMER" This.oTimer.Enabled := .F. ... IF nLineas > 1 IF nLineas > nMaxLines cLblName := "Say_01" ... This.Cargo:Set( cLblName, This.&(cLblName).Type ) ELSE FOR n := 1 TO nLineas cLblName := "Say_" + StrZero( n, 2 ) ... This.Cargo:Set( cLblName, This.&(cLblName).Type ) NEXT n ... ELSE cLblName := "Say_01" ... This.Cargo:Set( cLblName, This.&(cLblName).Type ) ENDIF IF nIcoSize > 0 nY := nRow + GetBorderHeight() cIco := "ICON" IF ISNUMBER( cIcoFile ) IF IsHIcon( cIcoFile ) nX := MARGIN / iif( nIcoSize == 32, 1.4, iif( nIcoSize == 48, 1.7, 2 ) ) DRAW ICON IN WINDOW ( cForm ) ; AT nRow + GetBorderHeight(), MARGIN / iif( nIcoSize == 32, 1.4, iif( nIcoSize == 48, 1.7, 2 ) ) ; HICON cIcoFile WIDTH nIcoSize HEIGHT nIcoSize TRANSPARENT ELSE nX := MARGIN / 1.4 cIco := "SYSICON" DRAW SYSICON IN WINDOW ( cForm ) ; AT nRow + GetBorderHeight(), MARGIN / 1.4 ; ICON cIcoFile WIDTH nIcoSize HEIGHT nIcoSize TRANSPARENT ENDIF ELSE nX := MARGIN / iif( nIcoSize == 32, 1.4, iif( nIcoSize == 48, 1.7, 2 ) ) DRAW ICON IN WINDOW ( cForm ) ; AT nRow + GetBorderHeight(), MARGIN / iif( nIcoSize == 32, 1.4, iif( nIcoSize == 48, 1.7, 2 ) ) ; PICTURE cIcoFile WIDTH nIcoSize HEIGHT nIcoSize TRANSPARENT ENDIF This.Cargo:Draw := { cIco , nY , nX , cIcoFile , nIcoSize } ENDIF This.Cargo:lExtButton := lExt FOR n := 1 TO nLenaOp ... IF lExt ... This.Cargo:Set( cBtnName, This.&(cBtnName).Type ) ELSE ... This.Cargo:Set( cBtnName, This.&(cBtnName).Type ) ENDIF ... тогда bInit := {|| Local oWnd := _WindowObj( _HMG_THISFORMNAME ) _o2log(oWnd:Cargo, 12, "=>", .T.) Return Nil } выдаст в log => O:THMGDATA ARRAY[8] 1. SAY_01 = LABEL 2. SAY_02 = LABEL 3. SAY_03 = LABEL 4. SAY_04 = LABEL 5. DRAW = {"ICON", 34.0000, 22.8571, {{0, 128, 0}, {189, 30, 73}}, 32} 6. LEXTBUTTON = .F. 7. BTN_01 = BUTTON 8. BTN_02 = BUTTON ... или => O:THMGDATA ARRAY[5] 1. SAY_01 = EDITBOX 2. DRAW = {"ICON", 34.0000, 22.8571, {{0, 128, 0}, {189, 30, 73}}, 32} 3. LEXTBUTTON = .F. 4. BTN_01 = BUTTON 5. BTN_02 = BUTTON ... PS. Вместо oWnd := _WindowObj( _HMG_THISFORMNAME ) можно использовать ?v GetProperty(_HMG_THISFORMNAME, "Cargo"):GetAll() получим 1 {"SAY_01", "EDITBOX"} 2 {"DRAW", {"ICON", 34.0000, 22.8571, {{0, 128, 0}, {189, 30, 73}}, 32}} 3 {"LEXTBUTTON", .F.} 4 {"BTN_01", "BUTTON"} 5 {"BTN_02", "BUTTON"} ... 1 {"SAY_01", "LABEL"} 2 {"SAY_02", "LABEL"} 3 {"SAY_03", "LABEL"} 4 {"SAY_04", "LABEL"} 5 {"DRAW", {"ICON", 34.0000, 22.8571, {{0, 128, 0}, {189, 30, 73}}, 32}} 6 {"LEXTBUTTON", .F.} 7 {"BTN_01", "BUTTON"} 8 {"BTN_02", "BUTTON"} ...
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|