Форум » GUI » Чего мне не хватает в МиниГуи.... » Ответить

Чего мне не хватает в МиниГуи....

Andrey: Всех с праздниками !!! Предлагаю тем кто использует МиниГуи высказать свои предложения по улучшению данного продукта, да и в какую сторону двигаться дальше.... Вот то что мне не хватает (я имею в виду примеров): 1. Очень мало примеров для работы с DLL (хотя это и не относиться к МиниГуи, но как делать не знаю). 1.1 Как собирать свои ресурсы к программе в отдельную dll-ку. Как подключать её при запуске, показ картинок из dll (я может и догадываюсь, но пока не могу сделать этого) ? 1.2. Как сделать отдельный свой ехе-ник, а Харбор и Минигуи затолкать в отдельную dll-ку, ну и LetoDB в отдельную dll. Как подключать при запуске эти отдельные dll и пользоваться функциями из этих dll ? 1.3. Как использовать чужие dll (допустим на Дельфи) в своих программах на МиниГуи (хотя FastReport'ом пользуюсь, но он специально сделан под Харбор) ? Разные примеры из МиниГуи на эту тему смотрел, кое что понятно, кое что нет. 2. Полноценная работа с иконками 2.1. Сейчас приходиться каждый размер иконки (16х16, 32х32 и т.д.) хранить отдельно в ресурсном файле и выводить на кнопки по отдельности. Нужна функция вывода из ОДНОГО файла иконки (содержащий все размеры от 16х16 до 128х128) выбранного размера. 2.2. Как из shell32.dll (она содержит все размеры иконок) можно выбрать и показать иконку отличную от размера 32х32 ? 2.3. Как вывести на форму (не на кнопку) иконку заданного размера ? Вот пока часть чего хочется... Может на Рождество желания сбудутся ?

Ответов - 201, стр: 1 2 3 4 5 6 7 8 9 10 11 All

Andrey: Хочу чтобы имя фонта и САМ ВИД ФОНТА отображался в контекстном меню. Имя фонта меняю, а сам размер фонта не получается. Для контекстного меню знаю что есть такие функции изменения: [pre2] // для меню _SetMenuItemCaption( "SetFont" , cForm , cItem ) // для иконок _SetMenuItemIcon( "SetCopy" , cForm, if( lCopy, "iCopy32On", "iCopy32Off" ) ) // для bmp _SetMenuItemBitmap( "SetFile" , cForm, if( lFile, "bRecOn32" , "bRecOff32" ) )[/pre2] А как поменять сам фонт и его размер в меню ? [pre2].... STATIC cStaticFont, hStaticFont DEFINE FONT TestFnt FONTNAME "DejaVu Sans Mono" SIZE 12 BOLD hStaticFont := GetFontHandle( "TestFnt" ) aFont := GetFontParam( hStaticFont ) cStaticFont := aFont[1] + " " + HB_NtoS(aFont[2]) cStaticFont += IIF(aFont[3]," Bold", "" ) cStaticFont += IIF(aFont[4]," Itl" , "" ) DEFINE MAIN MENU .... SEPARATOR MENUITEM 'Change font: ' + cStaticFont NAME SetFont FONT hStaticFont ACTION ChangeFont() ... END MENU ......... Static FUNCTION ChangeFont() LOCAL aFont, aF, cItem, cForm := "wMain" aF := GetFontParam( hStaticFont ) // вызвать стандартное меню шрифт для Windows aFont := GetFont( aF[1] , aF[2], aF[3], aF[4] , {0,0,0} , .f. , .f. , 0 ) if ! empty ( aFont[1] ) RELEASE FONT TestFnt // удаляем фонт // Name , Size , Bold , Italic aFont := { aFont[1] , aFont[2], aFont[3], aFont[4] } DEFINE FONT TestFnt FONTNAME aFont[1] SIZE aFont[2] DO EVENTS // запишем новые значения фонта cStaticFont := aFont[1] + " " + HB_NtoS(aFont[2]) cStaticFont += IIF(aFont[3]," Bold", "" ) cStaticFont += IIF(aFont[4]," Itl" , "" ) hStaticFont := GetFontHandle( "TestFnt" ) // запишем в меню новые значения фонта cItem := _GetMenuItemCaption( "SetFont" , cForm ) cItem := SUBSTR(cItem, 1, AT(":",cItem) + 1 ) cItem += oCargo:cFont2 _SetMenuItemCaption( "SetFont" , cForm , cItem ) EndIf RETURN NIL[/pre2]

gfilatov2002: Andrey пишет: как поменять сам фонт и его размер в меню ? Переписал эту функцию таким образом: [pre2] Static FUNCTION ChangeFont() LOCAL aFont, aF, cItem, cForm := "wMain" aF := GetFontParam( hStaticFont ) // вызвать стандартное меню шрифт для Windows aFont := GetFont( aF[1] , aF[2], aF[3], aF[4] , {0,0,0} , .f. , .f. , 0 ) if ! empty ( aFont[1] ) RELEASE FONT TestFnt // удаляем фонт // Name , Size , Bold , Italic aFont := { aFont[1] , aFont[2], aFont[3], aFont[4] } //DEFINE FONT TestFnt FONTNAME aFont[1] SIZE aFont[2] _DefineFont ( 'TestFnt', aFont[1], aFont[2], aFont[3], aFont[4] ) DO EVENTS // запишем новые значения фонта cStaticFont := aFont[1] + " " + HB_NtoS(aFont[2]) cStaticFont += IIF(aFont[3]," Bold", "" ) cStaticFont += IIF(aFont[4]," Itl" , "" ) hStaticFont := GetFontHandle( "TestFnt" ) // запишем в меню новые значения фонта cItem := _GetMenuItemCaption( "SetFont" , cForm ) cItem := SUBSTR(cItem, 1, AT(":",cItem) + 1 ) cItem += cStaticFont _SetMenuItemCaption( "SetFont" , cForm , cItem ) _SetMenuItemFont( "SetFont" , cForm , hStaticFont ) EndIf RETURN NIL [/pre2] Результат см. на картинке ниже:

SergKis: gfilatov2002 пишет Переписал эту функцию таким образом Еще небольшую правку в _o2log(...) [pre2] *----------------------------------------------------------------------------* FUNCTION _o2Log( o, nLen, cMsg, lExt, cLog ) *----------------------------------------------------------------------------* LOCAL a, b, c, i, j, k := pCount(), l := .F., xRet := .T. LOCAL lLog := IsErrorLogActive() IF Valtype(cLog) $ "LND" l := .T. cLog := hb_FNameDir( _SetGetLogFile() ) + "_" + hb_ntos( Seconds() ) _HMG_CreateErrorLog := .T. ENDIF ... IF l .and. hb_FileExists( cLog ) xRet := hb_memoread( cLog ) hb_FileDelete( cLog ) _HMG_CreateErrorLog := lLog ENDIF RETURN xRet [/pre2]


gfilatov2002: SergKis пишет: Еще небольшую правку в _o2log(...) Принято с благодарностью

Andrey: gfilatov2002 пишет: Переписал эту функцию таким образом: Спасибо БОЛЬШОЕ ! А как быть с цветом ? Т.е. меню "Change color"

gfilatov2002: Andrey пишет: А как быть с цветом ? Посмотри еще раз пример в папке \SAMPLES\Advanced\ComboColor, а именно функцию CreateColorBMP()

SergKis: gfilatov2002 Еще правка в [pre2] *----------------------------------------------------------------------------* FUNCTION _o2Log( o, nLen, cMsg, lExt, cLog ) *----------------------------------------------------------------------------* LOCAL a, b, c, i, j, k := pCount(), l := .F., xRet := .T. LOCAL lLog := IsErrorLogActive(), aTmp, xTmp, cTmp ... IF HB_ISOBJECT( o ) ... FOR EACH a IN o:GetAll() ... IF HB_ISOBJECT( a[2] ) ... ELSEIF HB_ISARRAY( a[2] ) .and. lExt aTmp := {} FOR EACH xTmp IN a[2] IF HB_ISOBJECT(xTmp) cTmp := "O:" + xTmp:ClassName IF xTmp:ClassName $ "THMGDATA,TKEYDATA,TTHRDATA,TINIDATA" cTmp += " "+"ARRAY[" + hb_ntos( xTmp:Len() ) + "]" IF xTmp:ClassName == "TINIDATA" cTmp += " "+xTmp:cIni ENDIF ELSEIF xTmp:ClassName == "TWNDDATA" cTmp += " "+xTmp:Name+" "+xTmp:Type ELSEIF xTmp:ClassName $ "TCNLDATA,TTSBDATA,TGETDATA,TSTBDATA" cTmp += " "+xTmp:Window+" "+xTmp:Name+" "+xTmp:Type ELSEIF xTmp:ClassName == "TSBROWSE" cTmp += " "+xTmp:cControlName+" "+xTmp:cParentWnd+" "+xTmp:cAlias ENDIF AAdd( aTmp, cTmp ) ELSE AAdd( aTmp, xTmp ) ENDIF NEXT _LogFile( {.F., cLog}, hb_valtoexp( aTmp ) ) //_LogFile( {.F., cLog}, hb_valtoexp( a[2] ) ) ELSE ... [/pre2]

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

Andrey: Григорий, а можно побороть: несовместимость режима TRANSPARENT для LABEL на форме и переключения тем ? gfilatov2002 пишет: Посмотри еще раз пример в папке \SAMPLES\Advanced\ComboColor, а именно функцию CreateColorBMP() А как сделать bmp 32x32 и поместить его в [pre2] MENUITEM 'Change color: [[[[[[]]]]]' FONT hFont ACTION ( aZClr := ChangeColor(aZClr) ) [/pre2]

gfilatov2002: Andrey пишет: можно побороть: несовместимость режима TRANSPARENT для LABEL на форме и переключения тем ? Уже поправил. Andrey пишет: как сделать bmp 32x32 и поместить его в Примерно вот так:

SergKis: gfilatov2002 Еще небольшая правка _o2log()[pre2] ... IF HB_ISOBJECT( o ) ... ELSEIF HB_ISARRAY( o ) _LogFile( {.F., cLog}, o ) FOR EACH a IN o i := hb_enumIndex( a ) j := TR0( i, nLen - 1 ) + "." + " " + '"' + Valtype( a ) + '"' _LogFile( {.T., cLog}, j + " -> " ) IF HB_ISOBJECT( a ) _o2Log( a, nLen + 5, , lExt, cLog ) ELSEIF HB_ISARRAY( a ) _LogFile( {.T., cLog}, TR0( i, nLen - 1 ) + "." ) ... [/pre2]

gfilatov2002: SergKis пишет: Еще небольшая правка _o2log() OK

SergKis: gfilatov2002 Пропустил неточность, надо чуток добавить в код выше обвязку[pre2] FOR EACH a IN o i := hb_enumIndex( a ) IF ! HB_ISARRAY( a ) j := TR0( i, nLen - 1 ) + "." + " " + '"' + Valtype( a ) + '"' _LogFile( {.T., cLog}, j + " -> " ) ENDIF IF HB_ISOBJECT( a ) [/pre2] Пример для проверки тут https://TransFiles.ru/jw39y В demo4.ini можно задавать cMainMenuItems = MENU_1 or MENU_2 or MENU_3 и др. переменными, кроме cMainMenuFile (или сделать др. файл ini с секциями для items)

gfilatov2002: SergKis пишет: добавить в код выше Принято

Andrey: А как можно получить хенлы иконок из i_controlmisc.ch ? [pre2]// Alert icons #define ICON_EXCLAMATION 1 // default value #define ICON_QUESTION 2 #define ICON_INFORMATION 3 #define ICON_STOP 4[/pre2] И можно ли этот хендл показать вместо файла/ресурса в меню [pre2] MENUITEM '&About' .... ICON "i_About32" FONT "DlgFont" [/pre2] Или нужно этот хендл иконки записать в файл, и потом показывать ? Как это сделать ? Не нашёл в примерах запись иконки по хендлу.

gfilatov2002: Andrey пишет: Не нашёл в примерах запись иконки по хендлу. Посмотри рабочий пример ниже [pre2] #include "minigui.ch" PROCEDURE Main() LOCAL cIconDll := System.SystemFolder + "\imageres.dll" // LOCAL cIconSave := System.TempFolder + '\temp.ico' LOCAL cIconSave := GetStartUpFolder() + '\temp.ico' SET MULTIPLE OFF WARNING // icon with number SYSICO_WARN to write along the path IF ! SaveIcon( cIconSave, cIconDll, SYSICO_WARN ) MsgInfo( "Icon is NOT saved!", "Error" ) ENDIF SET DEFAULT ICON TO cIconSave DEFINE WINDOW Form_1 ; AT 50, 50 ; WIDTH 660 HEIGHT 450 ; TITLE "This is icon SYSICO_WARN from the file - " + cIconDll ; MAIN ; BACKCOLOR ORANGE ; ON RELEASE FErase( cIconSave ) DRAW SYSICON IN WINDOW Form_1 ; AT ( This.ClientHeight - 32 ) / 2, ( This.ClientWidth - 32 ) / 2 ; FROM cIconDll ID SYSICO_WARN COLOR CLR_ORANGE ON KEY ESCAPE ACTION ThisWindow.Release() END WINDOW Form_1.Activate() RETURN FUNCTION SaveIcon( cIconName, cIconSrc, nItem ) LOCAL aIcons := ExtractIconEx( cIconSrc, nItem ) RETURN C_SaveHIconToFile( cIconName, aIcons ) [/pre2]

Andrey: gfilatov2002 пишет: C_SaveHIconToFile( cIconName, aIcons ) Не то ! Это я видел. Нужна одна иконка, а не коллекция иконок, т.е. [pre2] cIcoExtrn := '.\Res\IconVista3.ico' // icon file of all sizes hIcon := LoadIconByName( cIcoExtrn, 64 , 64 ) // а как записать hIcon ? [/pre2] Это нужно потом для показа иконок в [pre2] AlertInfo( cMsg, "About", hIcon, nIcoSize, aBtnClr, .T. , bOnInit, .F. ) AlertStop( cMsg, "About", hIcon, nIcoSize, aBtnClr, .T. , bOnInit, .F. ) [/pre2]и т.д.

gfilatov2002: Andrey пишет: а как записать hIcon ? hIcon в данном случае - это временный указатель на загруженную иконку. Сохранить его для дальнейшего использования можно только в переменную (например, статическую).

Andrey: Понял. Спасибо ! А как у других это делается в HMG или FiveWin ? Оттуда код портировать нельзя ?

Andrey: Нашёл немного не то, но тоже интересно. Иконку можно записать как .png и .bmp Тоже бы не помешало в МиниГуи иметь такое. https://forums.fivetechsupport.com/viewtopic.php?f=3&t=35109 Пост N: 1186 Там в исходнике на С есть такое: [pre2] // Write the iconheader first of all // WriteIconHeader(hFile, nNumIcons); [/pre2] И ещё нашёл на С++ [pre2]HRESULT SaveIcon(HICON hIcon, const wchar_t* path) { // Create the IPicture intrface PICTDESC desc = { sizeof(PICTDESC) }; ....[/pre2] https://stackoverflow.com/questions/2289894/how-can-i-save-hicon-to-an-ico-file



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