WQ | Дата: Пятница, 08.08.2014, 14:58 | Сообщение # 1 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Почему-то, если пытаюсь загружать иконки с помощью Extract_Icon из Window9 или LoadIcon, они показываются в различных контролах неправильно -какими-то грубыми, с темными пикселями по краям. Что-то делаю не так...
Нужен пример работы с иконкой с прозрачностью, чтобы она отображалась красиво - в тулбаре, комбобоксе, или просто в static.
Сообщение отредактировал WQ - Пятница, 08.08.2014, 14:59 |
|
| |
haav | Дата: Пятница, 08.08.2014, 16:53 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Да, ты прав. С иконками в библиотеке дело не закончено. Точнее работа проведена крайне поверхностно. Я начал делать поддержку, по крайней мере для imageGadget и ButtonGadget сделано. Но вот для других гаджетов вроде тулбара или combobox не сделано. Изначально при разработке библиотеки как то вообще была затруднительна работа с иконками (в частности я не мог преобразовать красиво из PNG в ICO). Поэтому все гаджеты были сделаны только с поддержкой изображений. Потом я нашел код , написанный под purebasic. Код был чуть-чуть непричесанный (то есть не совсем годный для моей цели), но выполнял это действие отлично. Я покопался в нем, что-то убрал, что-то добавил... так появилась функция CreateIconOrCursorFromGpBitmap. Далее между делом прикрутил поддержку для двух гаджетов, а остальные че-то так упустил. Сейчас посмотрев я вижу еще некоторые недоработки по уже имеющимся функциям (например Load_Icon). В общем как освобожусь от всех дел , постараюсь это дело исправить и дополнить. Скорее всего это будет не раньше зимы.
Ну вот простой код для ImageGadget:
Код #Include "window9.bi"
Dim As HWND hWnd
hwnd=OpenWindow("",10,10,300,300) ImageGadget(1,10,10,100,100,,,SS_ICON) SetIconGadget(1,LoadImage(0,@"1.ico",IMAGE_ICON,0,0, LR_LOADFROMFILE Or LR_DEFAULTSIZE)) Do Var ev=WaitEvent If ev=EventClose Then Exit do Loop В этом коде в функции LoadImage вместо 2 нулей можно выставлять размер иконки. В данном же случае берется размер по умолчанию.
Extract_Icon была задумана именно для извлечения иконки и преобразования ее в битмап (все по той же причине, что описана выше). Если необходима такая функциональность, то для иконок лучше взять WINAPI (ExtractIcon).
Для тулбара я взял встроенную функцию и чуть подправил ее для иконок, в общем код будет что-то типа этого :
Код #Include "window9.bi" Dim Shared tbb As TBBUTTON Function ToolBarImageButton2(ByVal hwndToolBar As Integer,ByVal buttonID As Integer,ByVal ImageID_ As Integer,ByVal String_ As String,ByVal IndexButton As Integer,ByVal Style As Integer,ByVal Style2 As Integer,ByVal SizeIcon As Integer) As Integer Export Dim As hImageList hImageList = GetProp(Cast(HWND,hwndToolBar),"HIMAGELISTTOOLBAR") If hImageList = 0 Then hImageList = ImageList_Create(SizeIcon,SizeIcon,ILC_COLOR32,1,1) ImageList_SetBkColor(hImageList,&hF0F0F0) ' цвет фона SetProp(Cast(HWND,hwndToolBar),"HIMAGELISTTOOLBAR",hImageList) SendMessage(Cast(hwnd,hwndToolBar), TB_SETIMAGELIST, 0, Cast(LPARAM,hImageList)) EndIf Dim As Integer ppoos=ImageList_AddIcon(hImageList,Cast(hicon,ImageID_)) With tbb .iBitmap= ppoos .fsState = style .fsStyle = style2 .idCommand = buttonID .dwData = 0 .iString = Cast(Integer,@String_) End With Return SendMessage( Cast(hwnd,hwndToolBar), TB_INSERTBUTTON,IndexButton , CInt( @tbb ) ) SendMessage(Cast(hwnd,hwndToolBar),TB_AUTOSIZE,0,0) End Function
Dim As Integer hwToolBar Dim sArray(42) As String
Var hwnd=OpenWindow("",10,10,406,400) CenterWindow(hwnd) hwToolBar=CreateToolBar(,TBSTYLE_WRAPABLE Or TBSTYLE_FLAT Or 256)
For m As Integer=0 To 42 If m=10 Or m=21 Or m=32 Or m=34 Then ToolBarSeparator(hwToolBar,-1) Else ToolBarImageButton2(hwToolBar,m+1,LoadImage(0,@"1.ico",IMAGE_ICON,0,0, LR_LOADFROMFILE Or LR_DEFAULTSIZE),"",-1,4,6,32) sArray(m) = "button " & Str(m+1) ToolBarToolTip(hwnd,m+1,sArray(m)) EndIf Next
Do Var ev=WaitEvent If ev=EventClose Then End ElseIf ev=EventGadget Then Select Case EventNumberToolBar Case 1 To 46 MessBox("","Кнопка с номером " & EventNumberToolBar) End Select EndIf Loop P.S. Иконку найдешь какую-нибудь, я уж не стал прикладывать к сообщению
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Вторник, 12.08.2014, 11:01 | Сообщение # 3 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| haav
Отличные примеры! Изменения в библиотеке будем ждать.
Сообщение отредактировал WQ - Вторник, 12.08.2014, 11:01 |
|
| |