Автор | Сообщение |
|
| постоянный участник
|
Пост 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
[только новые]
|
|
|
| moderator
|
Пост N: 2260
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.02.24 13:11. Заголовок: Andrey пишет: Иконк..
Andrey пишет: цитата: | Иконку можно записать как .png и .bmp |
| Уже есть такая возможность extern HBITMAP Icon2Bmp( HICON hIcon ); HB_FUNC( BMPFROMICON ) { HICON hIcon = ( HICON ) hb_parnl( 1 ); hb_retnl( ( LONG ) Icon2Bmp( hIcon ) ); } Можно использовать так: цитата: | Win_1.Image_1.hBitmap := BmpFromIcon( hIcon1 ) |
| Кстати, этот код взят из твоего примера /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2023 Verchenko Andrey <verchenkoag@gmail.com> Dmitrov, Moscow region * Copyright 2023 Grigory Filatov <gfilatov@inbox.ru> * * Манипуляции с объектами на форме * Manipulating objects on a form */
|
|
|
|
| постоянный участник
|
Пост N: 7673
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.24 19:53. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Кстати, этот код взят из твоего примера |
| Так это только заготовка, недоделанная... И всего ОДНА операция - иконка в Bmp без прозрачности. А в png нет...
|
|
|
|
| moderator
|
Пост N: 2261
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.02.24 20:23. Заголовок: Andrey пишет: А в p..
Andrey пишет: Есть такая функция И снова она взята из твоего примера // извлечь файл картинки из ресурсов программы FUNCTION myICO2PNG(cRes) LOCAl aImage, cFileLogo, aXY, cMsg, nResult, cFile Default cRes := "LogoMG" cFile := cRes + ".ico" aImage := {} // нет картинки ! файл для экспорта ! cFileLogo := GetTempFolder() + "\" + cFile If !hb_FileExists( cFileLogo ) nResult := RCDataToFile( cRes, cFileLogo ) If nResult > 0 Else cMsg := "cRes = '" + cRes + "'" + CRLF cMsg += "RCDataToFile() - Code: " + hb_NtoS( nResult ) + CRLF cMsg += cFileLogo + CRLF MsgStop( cMsg, "Checkout error" ) Endif Endif If hb_FileExists( cFileLogo ) cFile := hb_dirBase() + cRes + ".png" HMG_SaveImage( cFileLogo, cFile, "PNG" ) // Save to PNG FErase ( cFileLogo ) aXY := hb_GetImageSize( cFile ) cMsg := cFile + ": " + hb_NtoS( aXY[1] ) + " x " + hb_NtoS( aXY[2] ) + " Pixels" //AlertInfo(cMsg) aImage := { cFile, aXY[1], aXY[2] } Endif RETURN aImage
|
|
|
|
| постоянный участник
|
Пост N: 7674
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.24 22:27. Заголовок: Тогда осталось запис..
Тогда осталось запись хендла в иконку и оформить все в одном примере. Или лучше записать всё в хелпе. Что-то в примерах уже путаешься, искать нужный вариант сложно. И не понял как иконку с формы записать в png ? И ещё вопрос по иконкам. Как можно положить маску цвета на иконку ? Сейчас приходиться для кнопок вносить в ресурсы 2 кнопки: обычную и с наложенным цветом желтую иконку. Для смены иконки при наведении на кнопки мышкой. Если можно сделать как в редакторе иконок: Тогда бы ресурсы проги стали бы занимать в 2 раза меньше места. А у меня 20 мб картинок и иконок в ресурсах моей проги...
|
|
|
|
| moderator
|
Пост N: 2262
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.02.24 12:05. Заголовок: Andrey пишет: Как м..
Andrey пишет: цитата: | Как можно положить маску цвета |
| Для этого надо использовать дополнительные библиотеки: 1) bostaurus, которая входит в состав Минигуи; 2) бесплатную мощную внешнюю DLL - freeimage (есть примеры использования в поставке Минигуи). Andrey пишет: цитата: | Тогда бы ресурсы проги стали бы занимать |
| 1) Обрати внимание на оптимизацию ресурсов по размеру и цветности; 2) можно с помощью дополнительной бесплатной библиотеки hbsvg создавать простые векторные рисунки. Ниже см. пример картинки, созданной с помощью этой библиотеки:
|
|
|
|
| moderator
|
Пост N: 2263
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.02.24 15:22. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | можно с помощью дополнительной бесплатной библиотеки hbsvg создавать простые векторные рисунки. |
| Еще один пример использования этой библиотеки - вывод табличных данных из DBF файла на картинку Полный код этой программы см. ниже: Скрытый текст
PROCEDURE Main() LOCAL hSvg, aCol FIELD CODE, NAME, RESIDENTS dbCreate( "country", { { "CODE", "C", 3, 0 }, { "NAME", "C", 30, 0 }, { "RESIDENTS", "N", 10, 0 } },, .T. ) dbAppend(); CODE := "LTU"; NAME := "Lithuania"; RESIDENTS := 3369600 dbAppend(); CODE := "USA"; NAME := "United States of America"; RESIDENTS := 305397000 dbAppend(); CODE := "POR"; NAME := "Portugal"; RESIDENTS := 10617600 dbAppend(); CODE := "POL"; NAME := "Poland"; RESIDENTS := 38115967 dbAppend(); CODE := "AUS"; NAME := "Australia"; RESIDENTS := 21446187 dbAppend(); CODE := "FRA"; NAME := "France"; RESIDENTS := 64473140 dbAppend(); CODE := "RUS"; NAME := "Russia"; RESIDENTS := 141900000 hSvg := svg_init( "table.svg", 566, 793 ) svg_text( hSvg, 50, 50, "Table of countries", "Arial", 16, 0xFF0000 ) aCol := { { "Code", "CODE", 60 }, { "Country", "NAME", 200 }, { "Residents", "RESIDENTS", 90 } } draw_table( hSvg, 50, 75, aCol ) svg_close( hSvg ) dbCloseAll() RETURN STATIC PROCEDURE draw_table( hSvg, nX, nY, aCol ) LOCAL nI, nDX, xValue, cValue, nTextWidth nDX := nX svg_line( hSvg, nX, nY + 5, nX + 350, nY + 5, 1, 0x000000 ) FOR nI := 1 TO Len( aCol ) xValue := aCol[ nI, 1 ] nTextWidth := Len( xValue ) * 6 svg_text( hSvg, nDX + ( aCol[ nI, 3 ] - nTextWidth ) / 2, nY, xValue, "Arial", 10, 0x000000 ) nDX += aCol[ nI, 3 ] IF nI < Len( aCol ) svg_line( hSvg, nDX, nY - 15, nDX, nY + 200, 1, 0x000000 ) ENDIF NEXT nY += 20 dbGoTop() DO WHILE ! Eof() nDX := nX FOR nI := 1 TO Len( aCol ) xValue := FieldGet( FieldPos( aCol[ nI, 2 ] ) ) IF ValType( xValue ) == "N" cValue := hb_NToS( xValue ) ELSE cValue := xValue ENDIF svg_text( hSvg, nDX + 10, nY + 10, cValue, "Arial", 10, 0x000000 ) nDX += aCol[ nI, 3 ] NEXT dbSkip() nY += 20 ENDDO RETURN
|
|
|
|
|
| постоянный участник
|
Пост N: 7675
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.02.24 03:30. Заголовок: Вот нашёл https://ww..
|
|
|
|
| moderator
|
Пост N: 2264
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.02.24 12:57. Заголовок: Andrey пишет: FW_Sa..
Andrey пишет: цитата: | FW_SaveHIContoIco( hIcon, cIconFile ) --> lSuccess |
| Такая функция уже есть в Минигуи: FUNCTION SaveHIconToIco( hIcon, cIconName ) IF ".ICO" $ Upper( cIconName ) ELSE cIconName := Trim( cIconName ) + ".ICO" ENDIF RETURN C_SaveHIconToFile( cIconName, { hIcon } ) Она была использована в примере samples\Basic\Icons\demo2.prg
|
|
|
|
| постоянный участник
|
Пост N: 7676
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.02.24 13:45. Заголовок: А я не нашёл... Спас..
А я не нашёл... Спасибо БОЛЬШОЕ ! Вот что значит хелпа нет по функциям... Что искать и не знаешь... Тогда в примере-3 нужно сделать как то наложение маски цвета и пример будет готов. Как это можно сделать ? P.S. Есть пример \MiniGUI\SAMPLES\Advanced\GrayBmp, там используется функция GrayBmp( GetControlHandle( "Image_1", "Form_1" ), cImage, Form_1.Image_1.Width, Form_1.Image_1.Height ) Вот наподобие надо для иконок.
|
|
|
|
| постоянный участник
|
Пост N: 7677
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.02.24 19:06. Заголовок: А сменить Background..
А сменить BackgroundColor картинки уже выведенной на форму можно ? Делаю сначала: @ y, x + n IMAGE &cN OF Win_1 PICTURE '' WIDTH aSz HEIGHT aSz ; ;//TRANSPARENT BACKGROUNDCOLOR aBColor а потом пытаюсь сделать: Win_1.&(cN).BackgroundColor := aBColor и фон НЕ МЕНЯЕТСЯ !!!
|
|
|
|
| moderator
|
Пост N: 2265
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.02.24 19:28. Заголовок: Andrey пишет: смени..
Andrey пишет: цитата: | сменить BackgroundColor картинки уже выведенной на форму |
| Посмотри, как это сделано в примере Basic\IMAGE_2 - параметры картинки изменяются динамически.
|
|
|
|
|
| постоянный участник
|
Пост N: 7678
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.02.24 10:18. Заголовок: Использую выборку ко..
Использую выборку коллекций иконок из dll и сохранение этой коллекции в файл: aIcons := ExtractIconEx( cIconDll, nItem ) // icon with number XX to write along the path lRet := C_SaveHIconToFile( cIconSave, aIcons ) В файл записываются только иконки 16x16 и 32x32. А мне нужны все иконки и большие тоже. Как это сделать ? Можно модифицировать функцию ExtractIconEx() чтобы все иконки брались ?
|
|
|
|
| moderator
|
Пост N: 2267
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.02.24 15:59. Заголовок: Andrey пишет: мне н..
Andrey пишет: цитата: | мне нужны все иконки и большие тоже. Как это сделать ? |
| Нужно вместо функции ExtractIconEx() использовать другую WINAPI функцию PrivateExtractIcons(), которая позволяет извлекать иконки больших размеров. Пример использования: cIcon := 'IconVista.ico' hIcon1 := LoadIconByName( cIcon, 256, 256 ) hIcon2 := LoadIconByName( cIcon, 128, 128 ) hIcon3 := LoadIconByName( cIcon, 64, 64 ) cIcon := 'v:\rh.exe' msgdebug(PRIVATEEXTRACTICONS(cIcon, -1)) // return 9 a:=PRIVATEEXTRACTICONS(cIcon, 0, 256, 256) // icon 256x256 if ishicon(a[1]) hIcon1:=a[1] endif hIcon2:=PRIVATEEXTRACTICONS(cIcon, 8, 128, 128)[1] // icon 128x128 Результат ее работы при извлечении иконок из внешнего приложения см. на картинке: P.S. Другой пример извлекает большие иконки из DLL в папке minigui\samples\Basic\Icons . cIcon := 'myicons.dll' msgdebug(PRIVATEEXTRACTICONS(cIcon, -1)) // return 1 a:=PRIVATEEXTRACTICONS(cIcon, 0, 256, 256) IF ISHICON(a[1]) hIcon1:=a[1] ENDIF hIcon2:=PRIVATEEXTRACTICONS(cIcon, 0, 128, 128)[1] hIcon3:=PRIVATEEXTRACTICONS(cIcon, 0, 64, 64)[1]
|
|
|
|
| постоянный участник
|
Пост N: 7679
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.02.24 17:33. Заголовок: Спасибо БОЛЬШОЕ ! g..
Спасибо БОЛЬШОЕ ! gfilatov2002 пишет: цитата: | Другой пример извлекает большие иконки из DLL в папке minigui\samples\Basic\Icons . |
| Там в примере demo3.prg есть функция hb_BitOr( DST_ICON, DSS_MONO ) Я пропустил этот пример, только сейчас увидел. А можно наподобие такой функции сделать наложение маски цвета ?
|
|
|
|
| постоянный участник
|
Пост N: 7695
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.24 20:42. Заголовок: Можно ли на объекте ..
Можно ли на объекте ButtonEX отключить ВООБЩЕ окантовку кнопки ?
|
|
|
|
| moderator
|
Пост N: 2291
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.03.24 12:36. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно ли на объекте ButtonEX отключить ВООБЩЕ окантовку |
| Надеюсь, пример \SAMPLES\Advanced\ExpButton уже видел Вроде, там нет никакой окантовки у кнопок...
|
|
|
|
| постоянный участник
|
Пост N: 7697
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.03.24 13:28. Заголовок: Да, помню этот приме..
Да, помню этот пример, красивые кнопки. Мне нужно допустим форма SILVER и сделать кнопку без окантовки тоже SILVER с иконкой. Т.е. чтобы не было видно что это кнопка. А при смене фокуса, меняю иконку. Как то можно окантовку отключить ?
|
|
|
|
| постоянный участник
|
Пост N: 4535
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.03.24 15:17. Заголовок: gfilatov2002 пишет В..
gfilatov2002 пишет цитата: | Вроде, там нет никакой окантовки у кнопок... |
| Что бы шире использовать Cargo кнопки, исправил код примера с использованием oHmgData() Тут пример https://TransFiles.ru/6i56x Andrey пишет цитата: | Как то можно окантовку отключить ? |
| В примере ф-я *-----------------------------------------------------------------------------* FUNCTION OwnButtonPaint( pdis ) *-----------------------------------------------------------------------------* заменяет родную из minigui.lib читай readme.txt, там режимы описаны Надо подстраивать под себя массив App.Cargo:aButStyles и в Cargo кнопки варианты для painting и image, т.е. ON INIT {|o| This.Cargo := oHmgData(), o := ThisWindow.Cargo, ; This.Cargo:aButStyles := o:aButStyles, ; This.Cargo:cButMisc := '3,'+o:cResPath+'open.bmp' }
|
|
|
|
| moderator
|
Пост N: 2292
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.03.24 16:05. Заголовок: SergKis пишет: испр..
SergKis пишет: цитата: | исправил код примера с использованием oHmgData() |
| Большое спасибо за помощь
|
|
|
|
| постоянный участник
|
Пост N: 7698
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.03.24 16:09. Заголовок: Это большой пример. ..
Это большой пример. Попроще может быть пример ? Форма и одна кнопка без окантовки с иконкой ...
|
|
|
Ответов - 201
, стр:
1
2
3
4
5
6
7
8
9
10
11
All
[только новые]
|
|