Форум » 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

SergKis: Andrey пишет Это большой пример. Попроще может быть пример ? Форма и одна кнопка без окантовки с иконкой ... Бери demo.prg и оставляй, только то, что интересно, остальное удали - это сборка под hmg 24.02 и даже без SET OOP ON Вопрос, наверное, надо ставить по другому, может вкл. этот обработчик в minigui.lib, соединив его с тем что есть ? + команды для установки вариантов, но это требует детального понимания кода, я не разбирался, где и что лежит PS Наследование данных из App.Cargo позволит делать для каждого окна свое поведение кнопок ButtonEx, надо использовать в окне команду This.Cargo:aButStyles := AClone( App.Cargo:aButStyles ) ... потом менять значения для поведения в This.Cargo:aButStyles у кнопок без установленного Cargo будет поведение из App.Cargo:aButStyles по умолчанию iButStyle := 1 aButMisc := { 1, '' }

Andrey: SergKis пишет: Вопрос, наверное, надо ставить по другому, может вкл. этот обработчик в minigui.lib, соединив его с тем что есть ? Согласен с этим !!! Я вывожу png на форму и назначаю на картинку клик мышки. Но картинка фигово выглядит, линия соединения с формой ЗУБЧИКАМИ вся... Из-за этого и захотел сделать кнопку без окантовки.

SergKis: Andrey пишет Я вывожу png на форму и назначаю на картинку клик мышки. Но картинка фигово выглядит, линия соединения с формой ЗУБЧИКАМИ вся... Из-за этого и захотел сделать кнопку без окантовки. ButtonEx тут причем ? В нем bmp и icon Может хотел png и Label ?


Andrey: SergKis пишет: ButtonEx тут причем ? В нем bmp и icon PNG выводить не вариант. Вывод ICON на форму тоже не вариант, т.к. на иконку нельзя повесить клик мышки. Вернее можно по координатам, но коду дофига. Остаётся только BUTTONEXT с иконкой без окантовки, там можно повесить ACTION Вот и спрашиваю, как проще убрать окантовку кнопки ?

SergKis: Andrey пишет Вот и спрашиваю, как проще убрать окантовку кнопки ? Кнопки из Label с Avi ты делал, аналог (пример с Popup_Menu) с DRAW ICON ~ такой (окантовки нет) [pre2] nW := This.ClientWidth nH := This.ClientHeight nY := 5 ; nX := nW - 64 DRAW ICON IN WINDOW &cForm AT nY, nX HICON This.Cargo:hIcon ; WIDTH 64 HEIGHT 64 COLOR This.Backcolor @ nY, nX LABEL DrawIcon VALUE "" WIDTH 64 HEIGHT 64 TRANSPARENT ; ACTION AlertInfo("Click: "+ThisWindow.Name+"."+This.Name) nY := 2 ; nX := 10 @ nY, nX LABEL Buff VALUE cVal WIDTH nW - 80 HEIGHT nH FONT "FontHmg" ; FONTCOLOR WHITE BACKCOLOR oAC():aBClrMain RIGHTALIGN ; ACTION AlertInfo("Click: "+ThisWindow.Name+"."+This.Name) ... o:Event({ 1, "Paint"}, {|ow| // прорисовка иконки сразу на форме This.DrawIcon.Hide() DoEvents() SendMessage( ow:Handle, WM_PAINT, 0, 0 ) This.DrawIcon.Show() DoEvents() Return Nil }) ... [/pre2]

Andrey: Иконка конфликтует с LABEL, т.е. она будет затираться LABEL'ом

SergKis: Andrey Не затирается в примере со строками выше

Andrey: SergKis пишет: Не затирается в примере со строками выше Это похоже на кнопку с иконкой. А мне нужно чтобы юзер на иконку кликнул и получил результат, причём при попадание в фокус иконки мышка меняла форму на палец.

SergKis: Andrey пишет Это похоже на кнопку с иконкой. А мне нужно чтобы юзер на иконку кликнул и получил результат, причём при попадание в фокус иконки мышка меняла форму на палец. Так ты же этого и хочешь, т.е. чтобы была кнопка без окантовки, смотри файл i_label.ch[pre2] #command @ <row>,<col> LABEL <name> ; ... [ <dummy2: ACTION, ON CLICK, ONCLICK> <action> ] ; [ ON DBLCLICK <dblclick> ] ; [ ON RCLICK <rclick> ] ; [ <dummy3: ON MOUSEHOVER, ONMOUSEHOVER> <overproc> ] ; [ <dummy4: ON MOUSELEAVE, ONMOUSELEAVE> <leaveproc> ] ; ...[/pre2] все есть, даже выпадающее меню можешь приделать, как на кнопку DEFINE CONTEXT MENU CONTROL &cLbl ... окантовку делать ф-ей DrawRR(...) из примеров, если надо (могут быть с закругленными углами) Цвета и градиента не будет, но палец и окантовка цветная будет и с темной темой будет сочетатся

Andrey: Может я плохо объяснил. Сделал пример для иконки, Григорий добавил обработку иконки. Но иконка часто при уходе НЕ МЕНЯЕТСЯ... Да и кода дофига писать приходиться. Вот пример - https://cloud.mail.ru/public/prnj/7gHLfUwwW Можно ли сделать класс для иконки похожий на кнопку/картинку ? [pre2] @ nY, nX ICON Icon_2 PICTURE 'iDebug64x1' WIDTH 64 HEIGHT 64 BACKGROUNDCOLOR aBackColor ; OnMouseHover {|| This.Icon := 'iDebug64x2' , RC_CURSOR("MINIGUI_FINGER") } ; OnMouseLeave {|| This.Icon := 'iDebug64x1' } ; ACTION {|| MsgDebug( This.Name ) } [/pre2] Самый простой выход - убрать окантовку кнопки... Но как не знаю...

gfilatov2002: Andrey пишет: Самый простой выход - убрать окантовку кнопки... Так, как на картинке ниже, подойдет Изменения, которые сделал в коде примера, см. ниже [pre2]... App.Cargo:aButStyles := { ; { 0, 1, aBackColor, aBackColor, aBackColor, aBackColor, BLACK, BLACK, 1, aBackColor, aBackColor } ; } DEFINE WINDOW Form_Main ; TITLE (App.Cargo):cPRG_NAME ; MAIN NOMAXIMIZE NOSIZE ; BACKCOLOR aBackColor ; ON INIT {|| DoEvents() , _wPost(0) } ; // выполняется после инициализации окна ON RELEASE {|| _wSend(92) } ; // выполняется перед разрушением окна ON INTERACTIVECLOSE {|| NIL } ; // закрытие окна по [x] ON MOUSEMOVE DisplayCoords() // обработка координат мышки This.Cargo := oHmgData() // для окна создаем объект без переменных (условно пустой) This.Cargo:aWinBtn := Nil // кнопки окна This.Cargo:aBColor := aBackColor // цвет фона окна This.Cargo:aButStyles := App.Cargo:aButStyles DEFINE STATUSBAR STATUSITEM "+" FONTCOLOR RED STATUSITEM "Item 1" WIDTH 230 FONTCOLOR BLUE STATUSITEM "Item 2" WIDTH 230 FONTCOLOR BLUE STATUSITEM "Item 3" WIDTH 230 FONTCOLOR BLUE END STATUSBAR nY := nX := 5 DRAW ICON IN WINDOW Form_Main AT nY, nX PICTURE 'iQuest64x1' WIDTH 64 HEIGHT 64 COLOR aBackColor nX += 64 + 5 @ nY, nX BUTTONEX Btn_1 WIDTH 64 HEIGHT 64 ; CAPTION '' ICON 'iQuest64x1' ; FLAT NOXPSTYLE HANDCURSOR NOTABSTOP ; BACKCOLOR aBackColor ; ON MOUSEHOVER ( This.Backcolor := GRAY , This.Icon := 'iQuest64x2' ) ; ON MOUSELEAVE ( This.Backcolor := aBackColor , This.Icon := 'iQuest64x1' ) ; ACTION {|| This.Enabled := .F. ,; MsgDebug( This.Name ) ,; This.Enabled := .T. } ; ON INIT {|| This.Cargo := oHmgData(), ; This.Cargo:cButMisc := '0', ; This.Cargo:aButStyles := ThisWindow.Cargo:aButStyles } ... [/pre2]

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

Andrey: gfilatov2002 пишет: Изменения, которые сделал в коде примера, см. ниже У меня что-то не срабатывают эти изменения... Положил к Сергею на ftp свой исправленный файл....

gfilatov2002: Andrey пишет: У меня что-то не срабатывают эти изменения Положил к Сергею на ftp в папку Andrey свой рабочий проект

Andrey: Спасибо ! Я забыл добавить в проект myownbut51.prg Мой тоже заработал с этим добавлением. Ещё вопрос, допустим на форму вывожу 3 иконки: [pre2] DRAW ICON IN WINDOW Form_Main AT nY, nX PICTURE 'Icon1' WIDTH 64 HEIGHT 64 COLOR aBackColor nX += 64 + 10 DRAW ICON IN WINDOW Form_Main AT nY, nX PICTURE 'Icon2' WIDTH 64 HEIGHT 64 COLOR aBackColor nX += 64 + 10 DRAW ICON IN WINDOW Form_Main AT nY, nX PICTURE 'Icon2' WIDTH 64 HEIGHT 64 COLOR aBackColor[/pre2] После закрытия формы нужно удалять хендлы иконок. А как в этом случае быть ? Как определить эти хендлы ?

gfilatov2002: Andrey пишет: После закрытия формы нужно удалять хендлы иконок В этом случае ничего специально НЕ НАДО делать. Все хендлы иконок будут очищены автоматически Это легко проверить, если собрать проект с отладчиком или просто добавить в проект вызов функции AltD( 1 ) Если в проекте есть утечка ресурсов, то при выходе из программы будет создан дополнительный текстовый файл с указанием, где в коде были определены эти ресурсы.

Andrey: СПАСИБО БОЛЬШОЕ !

Andrey: gfilatov2002 пишет: Так, как на картинке ниже, подойдет На форме ВСЕ кнопки теряют окантовку !!! А как можно сделать, чтобы только у некоторых кнопок можно удалять окантовку ? SergKis пишет: у кнопок без установленного Cargo будет поведение из App.Cargo:aButStyles по умолчанию iButStyle := 1 aButMisc := { 1, '' } Это не работает...

SergKis: Andrey пишет Это не работает... А ты обратил внимание что произошло упрощение примера, как ты и просил, все поведения кнопок убраны из массива[pre2] :aButStyles := { ; // для кнопки - убрать окантовку { 0, 1, aBackColor, aBackColor, aBackColor, aBackColor, BLACK, BLACK, 1, aBackColor, aBackColor } ; } [/pre2] надо разбирать назначения всех элементов в нем и применять правильно, т.е. из кода myownbut51.prg надо инструкцию писать, вот немного начал, можешь продолжить [pre2] // 1 2 3 4 5 6 7 8 9 10 11 // Styl Tip, Fill // gradient App.Cargo:aButStyles := { ; { 0, 1, {106,131,160}, {106,131,160}, {106,131,160}, {106,131,160}, BLACK, BLACK , 1, {106,131,160}, RED },; { 1, 3, {182,189,210}, {220,220,220}, {182,189,210}, WHITE , BLACK, BLACK , 1, {220,220,220}, WHITE },; { 2, 4, {106,131,160}, {220,220,220}, {220,220,220}, {220,220,220}, BLACK, BLACK , 0, {220,220,220}, WHITE },; { 3, 4, {192,192,192}, {192,192,192}, {192,192,192}, {192,192,192}, BLACK, BLACK , 0, { 82,189,210}, BLACK },; { 4, 2, GRAY , {255,255,255}, {106,131,160}, {255,255,255}, BLACK, BLACK , 1, GRAY , {106,131,160} },; { 5, 2, GRAY , {220,220,220}, GRAY , {255,255,255}, BLACK, {196,0,0}, 1, GRAY , RED },; { 6, 4, GRAY , {220,220,220}, {106,131,160}, {255,255,255}, BLACK, BLACK , 1, GRAY , {106,131,160} },; { 7, 2, GRAY , {255,255,255}, {106,131,160}, {255,255,255}, BLACK, BLACK , 2, GRAY , {106,131,160} },; { 8, 2, GRAY , {220,220,220}, GRAY , {255,255,255}, BLACK, {196,0,0}, 2, GRAY , RED },; { 9, 4, GRAY , {220,220,220}, {106,131,160}, {255,255,255}, BLACK, BLACK , 2, GRAY , {106,131,160} },; {10, 1, {196,164,164}, {196,164,164}, {196,164,164}, {196,164,164}, WHITE, WHITE , 0, {106,131,160}, RED },; {11, 1, {196,164,164}, {196,164,164}, {196,164,164}, {196,164,164}, BLACK, RED , 0, {106,131,160}, RED } ; } // 1 2 3 4 5 6 7 8 9 10 11 // ^ // | FillGradient(hDC, ...) // 1 - Type fill grag vert 1 // 2 - Type fill grag vert 2 // 3 - Type fill grag horiz 1 // 4 - Type fill grag horiz 2 // [/pre2] без понимания, как применять А как можно сделать, чтобы только у некоторых кнопок можно удалять окантовку ? Разобраться в алгоритмах myownbut51.prg примера и заодно в алгоритмах такой же ф-ии из h_buttonex.prg

Andrey: Есть пример C:\MiniGUI\SAMPLES\BASIC\GetBox_3 Как в нём заменить окно с ошибкой MsgXXX() для даты на окно с AlertStop() ? [pre2] DEFINE GETBOX Text_1 // Alternate Syntax ROW ( :Y := :T ) COL ( :X := :L ) WIDTH :W(1.5) HEIGHT :H1 VALUE DATE() PICTURE '@K' TOOLTIP "Date Value: Must be greater or equal to "+DTOC(DATE()) VALID {|| Compare(this.value)} VALIDMESSAGE "Must be greater or equal to "+DTOC(DATE()) MESSAGE "Date Value"[/pre2]



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