Автор | Сообщение |
|
| постоянный участник
|
Пост N: 3882
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.01.15 18:29. Заголовок: Чего мне не хватает в МиниГуи....
Всех с праздниками !!! Предлагаю тем кто использует МиниГуи высказать свои предложения по улучшению данного продукта, да и в какую сторону двигаться дальше.... Вот то что мне не хватает (я имею в виду примеров): 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
[только новые]
|
|
|
| постоянный участник
|
Пост N: 7666
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.01.24 14:17. Заголовок: Хочу чтобы имя фонта..
Хочу чтобы имя фонта и САМ ВИД ФОНТА отображался в контекстном меню. Имя фонта меняю, а сам размер фонта не получается. Для контекстного меню знаю что есть такие функции изменения: // для меню _SetMenuItemCaption( "SetFont" , cForm , cItem ) // для иконок _SetMenuItemIcon( "SetCopy" , cForm, if( lCopy, "iCopy32On", "iCopy32Off" ) ) // для bmp _SetMenuItemBitmap( "SetFile" , cForm, if( lFile, "bRecOn32" , "bRecOff32" ) ) А как поменять сам фонт и его размер в меню ? .... 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
|
|
|
|
| moderator
|
Пост N: 2251
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.01.24 15:38. Заголовок: Andrey пишет: как п..
Andrey пишет: цитата: | как поменять сам фонт и его размер в меню ? |
| Переписал эту функцию таким образом: 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 Результат см. на картинке ниже:
|
|
|
|
| постоянный участник
|
Пост N: 4502
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.01.24 17:10. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет цитата: | Переписал эту функцию таким образом |
| Еще небольшую правку в _o2log(...) *----------------------------------------------------------------------------* 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
|
|
|
|
| moderator
|
Пост N: 2252
Зарегистрирован: 11.02.10
|
|
Отправлено: 27.01.24 18:05. Заголовок: SergKis пишет: Еще ..
SergKis пишет: цитата: | Еще небольшую правку в _o2log(...) |
| Принято с благодарностью
|
|
|
|
| постоянный участник
|
Пост N: 7667
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.01.24 20:21. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Переписал эту функцию таким образом: |
| Спасибо БОЛЬШОЕ ! А как быть с цветом ? Т.е. меню "Change color"
|
|
|
|
| moderator
|
Пост N: 2253
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.01.24 14:53. Заголовок: Andrey пишет: А как..
Andrey пишет: Посмотри еще раз пример в папке \SAMPLES\Advanced\ComboColor, а именно функцию CreateColorBMP()
|
|
|
|
| постоянный участник
|
Пост N: 4503
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.01.24 18:33. Заголовок: gfilatov2002 Еще пр..
gfilatov2002 Еще правка в *----------------------------------------------------------------------------* 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 ...
|
|
|
|
| moderator
|
Пост N: 2254
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.01.24 19:23. Заголовок: SergKis пишет: Еще ..
SergKis пишет: Добавил, конечно. Благодарю за помощь
|
|
|
|
| постоянный участник
|
Пост N: 7668
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.01.24 22:13. Заголовок: Григорий, а можно по..
Григорий, а можно побороть: несовместимость режима TRANSPARENT для LABEL на форме и переключения тем ? gfilatov2002 пишет: цитата: | Посмотри еще раз пример в папке \SAMPLES\Advanced\ComboColor, а именно функцию CreateColorBMP() |
| А как сделать bmp 32x32 и поместить его в MENUITEM 'Change color: [[[[[[]]]]]' FONT hFont ACTION ( aZClr := ChangeColor(aZClr) )
|
|
|
|
| moderator
|
Пост N: 2255
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.01.24 12:51. Заголовок: Andrey пишет: можно..
Andrey пишет: цитата: | можно побороть: несовместимость режима TRANSPARENT для LABEL на форме и переключения тем ? |
| Уже поправил. Andrey пишет: цитата: | как сделать bmp 32x32 и поместить его в |
| Примерно вот так:
|
|
|
|
| постоянный участник
|
Пост N: 4504
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.01.24 16:13. Заголовок: gfilatov2002 Еще не..
gfilatov2002 Еще небольшая правка _o2log() ... 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 ) + "." ) ...
|
|
|
|
|
| moderator
|
Пост N: 2256
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.01.24 16:54. Заголовок: SergKis пишет: Еще ..
SergKis пишет: цитата: | Еще небольшая правка _o2log() |
| OK
|
|
|
|
| постоянный участник
|
Пост N: 4505
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.01.24 17:37. Заголовок: gfilatov2002 Пропус..
gfilatov2002 Пропустил неточность, надо чуток добавить в код выше обвязку 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 ) Пример для проверки тут https://TransFiles.ru/jw39y В demo4.ini можно задавать cMainMenuItems = MENU_1 or MENU_2 or MENU_3 и др. переменными, кроме cMainMenuFile (или сделать др. файл ini с секциями для items)
|
|
|
|
| moderator
|
Пост N: 2257
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.01.24 17:49. Заголовок: SergKis пишет: доба..
SergKis пишет: Принято
|
|
|
|
| постоянный участник
|
Пост N: 7669
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.01.24 22:34. Заголовок: А как можно получить..
А как можно получить хенлы иконок из i_controlmisc.ch ? // Alert icons #define ICON_EXCLAMATION 1 // default value #define ICON_QUESTION 2 #define ICON_INFORMATION 3 #define ICON_STOP 4 И можно ли этот хендл показать вместо файла/ресурса в меню MENUITEM '&About' .... ICON "i_About32" FONT "DlgFont" Или нужно этот хендл иконки записать в файл, и потом показывать ? Как это сделать ? Не нашёл в примерах запись иконки по хендлу.
|
|
|
|
| moderator
|
Пост N: 2258
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.02.24 16:15. Заголовок: Andrey пишет: Не на..
Andrey пишет: цитата: | Не нашёл в примерах запись иконки по хендлу. |
| Посмотри рабочий пример ниже Скрытый текст
#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 )
|
|
|
|
|
| постоянный участник
|
Пост N: 7670
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.02.24 23:26. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | C_SaveHIconToFile( cIconName, aIcons ) |
| Не то ! Это я видел. Нужна одна иконка, а не коллекция иконок, т.е. cIcoExtrn := '.\Res\IconVista3.ico' // icon file of all sizes hIcon := LoadIconByName( cIcoExtrn, 64 , 64 ) // а как записать hIcon ? Это нужно потом для показа иконок в AlertInfo( cMsg, "About", hIcon, nIcoSize, aBtnClr, .T. , bOnInit, .F. ) AlertStop( cMsg, "About", hIcon, nIcoSize, aBtnClr, .T. , bOnInit, .F. ) и т.д.
|
|
|
|
| moderator
|
Пост N: 2259
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.02.24 10:57. Заголовок: Andrey пишет: а как..
Andrey пишет: hIcon в данном случае - это временный указатель на загруженную иконку. Сохранить его для дальнейшего использования можно только в переменную (например, статическую).
|
|
|
|
| постоянный участник
|
Пост N: 7671
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.02.24 13:52. Заголовок: Понял. Спасибо ! :s..
Понял. Спасибо ! А как у других это делается в HMG или FiveWin ? Оттуда код портировать нельзя ?
|
|
|
|
| постоянный участник
|
Пост N: 7672
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.24 02:48. Заголовок: Нашёл немного не то,..
|
|
|
Ответов - 201
, стр:
1
2
3
4
5
6
7
8
9
10
11
All
[только новые]
|
|