On-line: Alex_Cher, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2245
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.01.24 21:16. Заголовок: SergKis пишет: Проп..


SergKis пишет:

 цитата:
Пропустил ошибку в строке


Поправил. Большое спасибо!

SergKis пишет:

 цитата:
тогда в _LogFile(...)

IF ! IsErrorLogActive ()
RETURN .F.
ENDIF


Добавил этот код.

Спасибо: 0 
Профиль
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П

Если не трудно, напишите ваш комментарий...

Спасибо: 0 
Профиль
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, согласен с этим выводом уже давно.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2247
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.01.24 19:19. Заголовок: SergKis пишет: дела..


SergKis пишет:

 цитата:
делать проект на псевдо ООП командах hmg значительно быстрее


Как обычно, благодарю за Ваш быстрый ответ.
Надеюсь, что это интересно не только мне.

Спасибо: 0 
Профиль
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 года.

Спасибо: 0 
Профиль
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 ?

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2248
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.01.24 18:50. Заголовок: SergKis пишет: prgf..


SergKis пишет:

 цитата:
prgflags=-DHBMK_HAS_HMGE -работает


Этот пример был доработан для корректного использования с библиотекой Минигуи.
Работа с другими библиотеками не тестировалась...

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2249
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.01.24 14:48. Заголовок: Всем кому это интересно


Продолжаем хорошие новости

Рекомендую посмотреть довольно зрелый IDE, заточенный для работы с SQL базами, свежая версия которого была выпущена вчера. Этому проекту уже пять лет, и он поставляется в 3-х версиях:
- полной;
- персональной;
- для экспертов.

click here

Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
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 ?
Или есть др. варианты ?

Спасибо: 0 
Профиль
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 ?


Полностью доверяю вашему опыту в этом вопросе.

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 7680
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.24 18:56. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
ExtractIconEx(), добавив в нее два новых параметра, которые задают высоту и ширину иконки.


Супер !

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 7681
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.02.24 08:28. Заголовок: А можно ещё сделать ..


А можно ещё сделать так ?
aIcons := ExtractIconEx( cIcon, nIcon )  - вытащить ВСЕ иконки, т.е. все размеры иконок

Или ключик какой то предусмотреть, чтобы осталась совместимость со старым синтаксисом ?

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2269
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.02.24 16:04. Заголовок: Andrey пишет: вытащ..


Andrey пишет:

 цитата:
вытащить ВСЕ иконки, т.е. все размеры иконок


В системе не хранятся иконки ВСЕХ размеров.
Если в ресурсной DLL нет иконки требуемого размера, то при извлечении иконки этого размера она масштабируется из хранящейся там иконки большего размера.

Спасибо: 0 
Профиль
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_..., надо на другое место '&' поставить.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2270
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.02.24 18:13. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение для ф-ий Alert...(...)


Сделал, конечно.
Благодарю за подсказку

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 2271
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.02.24 19:42. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Примеры использования:


Иконка номер 308 размера 64x64, взятая из системной DLL, выглядит так:



Спасибо: 0 
Профиль
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"}
...


Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 28
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет