FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 13:25Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Проблема с иконками
Проблема с иконками
WQДата: Пятница, 08.08.2014, 14:58 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Почему-то, если пытаюсь загружать иконки с помощью Extract_Icon из Window9 или LoadIcon, они показываются в различных контролах неправильно -какими-то грубыми, с темными пикселями по краям. Что-то делаю не так...

Нужен пример работы с иконкой с прозрачностью, чтобы она отображалась красиво - в тулбаре, комбобоксе, или просто в static.


Сообщение отредактировал WQ - Пятница, 08.08.2014, 14:59
 
haavДата: Пятница, 08.08.2014, 16:53 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Репутация: 7
Статус: Offline
haav

Отличные примеры!
Изменения в библиотеке будем ждать.


Сообщение отредактировал WQ - Вторник, 12.08.2014, 11:01
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Проблема с иконками
  • Страница 1 из 1
  • 1
Поиск: