Форум » 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: Вывожу авишку на форму ANIMATEBOX Avi_1 ... AUTOPLAY После прорисовки формы проходит секунд 30 и только потом АВИ начинает двигаться. Почему так ? Как сделать чтобы сразу анимация пошла ?

Andrey: Вопрос по подвисанию программы на МиниГуи. Есть программа на С# из неё вызывается карточка из проги на МиниГуи по GetMessageData(). Однако программа на МиниГуи может быть занята длительной операцией, а юзер тупо кликнул вызов карточки. Прога на МиниГуи виснет наглухо. Как избавиться/блокировать вызов по GetMessageData() из проги на С# ?

SergKis: Andrey пишет Как избавиться/блокировать вызов по GetMessageData() из проги на С# ? 1. Ставишь переменную длительной операции .T. (все работы, кроме приема от C#, клики, ... игнорируешь, повесив modal окно, например) 2. Принимаешь данные от C# в стек всегда 3. Проверяешь переменную длительной операции на .T., если да -> ничего не делаешь 4. Длительная операция завершилась, ставишь .F., смотришь стек, если не пустой исполняешь его или исполнение стека всегда по глобальному таймеру (проверка, если не пуст стек)


Andrey: Можно изменить кодек показа AVI-файлов в МиниГуи ? А то очень многие авишки не показываются на форме....

Andrey: А как можно передать хендл иконки для показа в функции AlertInfo() ? Там же нужно указать явное имя ресурса. А я хочу показать ранее открытую иконку из коллекции. [pre2] This.Cargo:hIcon64 := LoadIconByName( "1MG_ICO", 64, 64 ) ... hIcon := ow:Cargo:hIcon64 ... AlertInfo( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoSound )[/pre2]

SergKis: Andrey пишет А как можно передать хендл иконки для показа в функции AlertInfo() ? [pre2] FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName ) ... IF ISNUMBER( cIcoFile ) DRAW SYSICON IN WINDOW ( cForm ) ; AT nRow + GetBorderHeight(), MARGIN / 1.4 ; ICON cIcoFile WIDTH nIcoSize HEIGHT nIcoSize TRANSPARENT ELSE 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 [/pre2]

Andrey: Блин... СПАСИБО !

SergKis: Andrey пишет Показ на форме есть, а в AlertInfo() нет. Если поправить h_alert.prg, то работает [pre2] IF ISNUMBER( cIcoFile ) 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 /*DRAW SYSICON IN WINDOW ( cForm ) ; AT nRow + GetBorderHeight(), MARGIN / 1.4 ; ICON cIcoFile WIDTH nIcoSize HEIGHT nIcoSize TRANSPARENT */ ELSE [/pre2]

gfilatov2002: SergKis пишет: Если поправить h_alert.prg Добавил такую возможность Контрольный пример: hIcon := LoadIconByName( "demo.ico", 32, 32 ) ... AlertInfo ( "MiniGUI Alert Boxes demo", , hIcon ) Благодарю за подсказку

Andrey: Можно ли управлять BORDER и CLIENTEDGE после построения LABEL ?

gfilatov2002: Andrey пишет: Можно ли управлять BORDER и CLIENTEDGE после построения LABEL ? Да, это возможно. См. рабочий пример ниже [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo */ #include "minigui.ch" #include "i_winuser.ch" FUNCTION MAIN DEFINE WINDOW Form_1 ; AT 0, 0 ; WIDTH 640 HEIGHT 380 ; TITLE 'Harbour MiniGUI Demo' ; MAIN ; FONT 'Arial' SIZE 10 ; NOMAXIMIZE ; NOMINIMIZE ; NOSIZE DEFINE STATUSBAR STATUSITEM ' HMG Power Ready!' END STATUSBAR ON KEY ESCAPE ACTION ThisWindow.RELEASE DEFINE LABEL Label_1 COL 10 ROW 30 WIDTH 100 HEIGHT 30 VALUE 'Label Test 1' BORDER .T. CLIENTEDGE .F. CENTERALIGN .T. VCENTERALIGN .T. END LABEL DEFINE LABEL Label_2 COL 120 ROW 30 WIDTH 100 HEIGHT 30 VALUE 'Label Test 2' BORDER .F. CLIENTEDGE .T. CENTERALIGN .T. VCENTERALIGN .T. END LABEL DEFINE BUTTON B ROW 240 COL 10 CAPTION 'Remove Border' ACTION ( ChangeStyle( GetControlHandle( 'Label_1', 'Form_1' ), , WS_BORDER ) ) END BUTTON DEFINE BUTTON B2 ROW 240 COL 120 WIDTH 140 CAPTION 'Remove ClientEdge' ACTION ( ChangeStyle( GetControlHandle( 'Label_2', 'Form_1' ), , WS_EX_CLIENTEDGE, .T. ) ) END BUTTON END WINDOW Form_1.Center() Form_1.Activate() RETURN NIL [/pre2]

Andrey: Спасибо БОЛЬШОЕ !

Andrey: На форме куча ави-файлов. Получаю список этих ави [pre2] aName := HMG_GetFormControls(ow:Name, "ANIMATEBOX") [/pre2] А как получить имена файлов из которого состоит этот объект ? [pre2] @ ... ANIMATEBOX &cName ... File cResAvi ... [/pre2] P.S. Конечно можно сделать массив и запоминать там, но хочется попробовать сделать это через функции МиниГуи.

SergKis: А как получить имена файлов из которого состоит этот объект ? [pre2] FOR EACH oAvi IN ow:GetObj4Type( "ANIMATEBOX" ) Default oAvi:Cargo := oHmgData() oAvi:Cargo:cFile := _HMG_aControlCaption[ oAvi:Index ] // avi file тут NEXT PS. в твоем варианте в цикле (в GetProperty(...) нет этого) ? _HMG_aControlCaption[ GetControlIndex(aName[ i ], ow:Name) ] [/pre2]

SergKis: PS. Если у тебя avi логически связаны с Label, то соединить их для совместной работы можно так [pre2] @ y, x LABEL &cN VALUE "Info win" WIDTH nWBtn HEIGHT nHBtn ; FONTCOLOR aBtnFClr[1] BACKCOLOR aBtnBClr[1] ; CENTERALIGN VCENTERALIGN BORDER CLIENTEDGE ; ON MOUSEHOVER {|| MouseFocus_Label(.T., This.Cargo) } ; ON MOUSELEAVE {|| MouseFocus_Label(.F., This.Cargo) } ; ON CLICK {| | _wPost(This.Cargo:nPost, This.Index ) } ; ON INIT {|o| This.Cargo := oHmgData() o := This.Cargo o:oObj := This.Object o:cObj := o:oObj:Name o:nObj := 1 o:cAvi := "Avi_1" // на др. Label свои имена avi контролов o:lAction := .F. o:lHover := .F. o:lBorder := .T. o:lClientEdge := .T. Return Nil } ... в ON INIT окна сделать FOR EACH oLbl IN ow:GetObj4Type( "LABEL" ) Default oLbl:Cargo := oHmgData() IF Empty(oLbl:Cargo:cAvi) ; LOOP // label без avi пропускаем ENDIF oAvi := ow:GetObj( oLbl:Cargo:cAvi ) Default oAvi:Cargo := oHmgData() oAvi:Cargo:cFile := _HMG_aControlCaption[ oAvi:Index ] // avi file тут oAvi:Cargo:oLabel := oLbl // запомнили в avi объект label oLbl:Cargo:oAvi := oAvi // запомнили в label объект avi oLbl:Cargo:cAviFile := oAvi:Cargo:cFile // если надо, продублировали на label имя avi file NEXT ... [/pre2]

Andrey: А на LABEL положить градиент можно ? Что то примеры не найду...

gfilatov2002: Andrey пишет: на LABEL положить градиент можно ? Например, можно сделать так: в примере из папки \SAMPLES\Advanced\DrawGradient

Andrey: Классный пример, СПАСИБО ! А после установки объекта на форме [pre2] DRAW GRADIENT IN WINDOW &cForm AT 250, 20 TO 278, 300 ; VERTICAL BORDER PANEL [/pre2]Можно поменять следующие параметры и как поменять ? [pre2]VERTICAL - убрать PANEL - заменить на BOX BEGINCOLOR - задать заново цвет ENDCOLOR - задать заново цвет [/pre2]

gfilatov2002: Andrey пишет: Можно поменять следующие параметры и как поменять ? Например, можно сделать так: [pre2] /* * DrawBoxGradient.prg * * Author: P.Chornyj <myorg63@mail.ru> */ ANNOUNCE RDDSYS #include "minigui.ch" #define NONE 0 #define BOX 2 #define PANEL 3 PROCEDURE Main () LOCAL aColor := HMG_n2RGB( GetSysColor( 15 ) ) SET FONT TO "Arial", 12 DEFINE WINDOW x ; WIDTH 640 ; HEIGHT 420 ; TITLE "Draw Box and Panel Gradient Sample" ; MAIN ; NOMAXIMIZE NOSIZE ; BACKCOLOR aColor DRAW GRADIENT IN WINDOW x AT 20, 20 TO 200, 300 BORDER BOX @ 95, 110 LABEL Label_1 VALUE "Gradient Box In" AUTOSIZE TRANSPARENT FONTCOLOR YELLOW DRAW GRADIENT IN WINDOW x AT 20, 320 TO 200, 610 ; VERTICAL BORDER PANEL @ 95, 410 LABEL Label_2 VALUE "Gradient Panel" AUTOSIZE TRANSPARENT FONTCOLOR YELLOW DRAW GRADIENT IN WINDOW x AT 250, 20 TO 278, 300 ; VERTICAL BORDER BOX ; BEGINCOLOR { 255, 255, 255 } ; ENDCOLOR { 220, 220, 220 } @ 255, 110 LABEL Label_3 VALUE "Gradient Box In" AUTOSIZE TRANSPARENT DRAW GRADIENT IN WINDOW x AT 250, 320 TO 278, 610 ; VERTICAL BORDER PANEL ; BEGINCOLOR { 255, 255, 255 } ; ENDCOLOR { 200, 200, 216 } @ 255, 410 LABEL Label_4 VALUE "Gradient Panel" AUTOSIZE TRANSPARENT DRAW GRADIENT IN WINDOW x AT 300, 20 TO 302, 316 ; BORDER NONE ; BEGINCOLOR { 250, 0, 0 } ; ENDCOLOR { 130, 0, 0 } DRAW GRADIENT IN WINDOW x AT 300, 316 TO 302, 610 ; BORDER NONE ; BEGINCOLOR { 130, 0, 0 } ; ENDCOLOR { 250, 0, 0 } @ 330, 240 BUTTON Button_1 ; CAPTION "&Switch" ; ACTION SwitchBoxPanel() ; WIDTH 150 HEIGHT 26 END WINDOW CENTER WINDOW x ACTIVATE WINDOW x RETURN PROCEDURE SwitchBoxPanel() ERASE WINDOW x DRAW GRADIENT IN WINDOW x AT 20, 20 TO 200, 300 VERTICAL BORDER PANEL x.Label_1.VALUE := "Gradient Panel" DRAW GRADIENT IN WINDOW x AT 20, 320 TO 200, 610 ; BORDER BOX x.Label_2.VALUE := "Gradient Box In" DRAW GRADIENT IN WINDOW x AT 250, 20 TO 278, 300 ; VERTICAL BORDER PANEL ; BEGINCOLOR { 255, 255, 255 } ; ENDCOLOR { 200, 200, 216 } x.Label_3.VALUE := "Gradient Panel" DRAW GRADIENT IN WINDOW x AT 250, 320 TO 278, 610 ; VERTICAL BORDER BOX ; BEGINCOLOR { 255, 255, 255 } ; ENDCOLOR { 220, 220, 220 } x.Label_4.VALUE := "Gradient Box In" DRAW GRADIENT IN WINDOW x AT 300, 20 TO 302, 316 ; BORDER NONE ; BEGINCOLOR { 250, 0, 0 } ; ENDCOLOR { 130, 0, 0 } DRAW GRADIENT IN WINDOW x AT 300, 316 TO 302, 610 ; BORDER NONE ; BEGINCOLOR { 130, 0, 0 } ; ENDCOLOR { 250, 0, 0 } InvalidateRect( x.HANDLE, 0 ) RETURN [/pre2]

Andrey: Что-то мудрённый объект этот... А обработку на этот объект можно сделать ? [pre2] DRAW GRADIENT IN WINDOW x AT 20, 20 TO 200, 300 BORDER BOX < ACTION | ONCLICK > [/pre2]Да и имя бы иметь на этот объект было бы хорошо.... Да и синтаксис привести как у LABEL было бы лучше. А возможно разместить градиент на уже готовой кнопке ? Или расширить синтаксис LABEL ? у BUTTONEX же есть уже градиент - [ GRADIENTFILL <aGradInfo> [ HORIZONTAL ] ]



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