Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

hIcon и SpeedButton 


IgoX   (2002-01-22 15:47) [0]

Привет каждому
Подскажите как если это можно имея hIcon поместить ее на SpeedButton



Serghei   (2002-01-22 15:55) [1]

Один метод но не самый лучший наверное и достаточно длинный!

Создаешь TImageList, в него запихиваешь свой Hicon при помощи метода AddIcon потом рисуешь это изображение на Glyph для кнопки.



Serghei   (2002-01-22 16:01) [2]

По моему так:

Var tmp_Icon : TIcon;
ImageList : TImageList;
tmp_BMP : TBitMap;
begin
tmp_Icon:=TIcon.Create;
ImageList:=TImageList.Create;
tmp_BMP:=TBitmap.Create;
//tmp_Icon.Handle:=LoadIcon ili ExtractAssociatedIcon(...)
//SpeedButton1.Glyph.Canvas.Loa
ImageList1.AddIcon(tmp_Icon);
ImageList1.GetBitmap(indexbitmapa, tmp_bmp);
SpeedButton1.Glyph.Assign(tmp_bmp);
end;



Serghei   (2002-01-22 16:09) [3]

Сорри, можно и не создавать дополнительный битмап просто пишешь

ImageList1.GetBitmap(indexbitmapa, SpeedButton1.Glyph);

Если получится, сообщи!
Удачи!



IgoX   (2002-01-22 17:55) [4]

Спасибо все работает а можно как нибудь без каких либо других
визуальных компонентов.



Serghei   (2002-01-22 18:01) [5]

Tac ietio i esti nevizualiniie componenti! :o)
TIcon i TImageList!
Citobi ne zagrujati svoi proceduri v proge, mojeshi sozdati functiu cotoraia vhodnim parametrom imeet iconcu, vernee ee handl a vihodnim - bitmap cotorii prisvaivaeshi svoemu SpeedButton.
Cioto tipa
SB.Glipgh:=IcoToBmp(_HI : HICON);
A po drugomu ia ne znaiu kak, ne proboval!
Udaci!



Serghei   (2002-01-22 18:09) [6]

Opiati ia!
Vspomnil escio odno sredstvo!
Porabotai s DrawIcon ili DrawIconEx risua ee na Glyph.Canvas dlia SpeedButton
Udaci!



IgoX   (2002-01-22 18:36) [7]

Через DrawIcon я пробывал но в GetDC я должен указать handle окна а SpeedButton таким не является, я прорисовал на обычную кнопку но после нажатия она исчезает
Вот я надыбал но несовсем то т.к. не все иконки нормально получаются
ICONINFO inf;
GetIconInfo(FileInfo.hIcon,&inf);
SpeedButton1->Glyph->Handle = inf.hbmColor;



Serghei   (2002-01-23 09:41) [8]

Почему ГетДС для окна, этот ДС ты получаешь для кнопкп, точнее
DrawIconEx(SpeedButton1.Glyph.Canvas.Handle,....)
Или я ошибаюсь?
Object.Canvas.Handle и есть тот самый ДС для обжекта (SpeedButton) насколько я помню!



Serghei   (2002-01-23 09:52) [9]

Да, и еще одно - не знаю как СпеедБатон а обычную кнопку ТБатон можно приделать с заголовком, с кнопками минимайз, максимайз, клоуз как и у нормального окна, то есть можно сделать из нее что-то вроде окна и передвигать ее по форме, изменять размеры. Это делается при помощо функции GetWindowLong i SetWindowLong. Так что фактически она и является окном!

Удачи!



IgoX   (2002-01-23 11:04) [10]

Specifies the Windows GDI handle to the device context for this canvas.
__property HDC Handle = {read=GetHandle, write=SetHandle, nodefault};
Set Handle to the HDC for the device context the canvas must draw into. When a windowed control responds to a Windows paint message, the HDC for drawing is passed in to the PaintWindow method. In other cases, an HDC can be obtained for a window by calling the GetDeviceContext method of a control. Additionally, Windows provides API calls to obtain an HDC for a printer or for a memory image.

Из help видно что это только для windowed control а SpeedButton таким не является, GetDeviceContext это одно и тоже что API функция GetDC(hwnd) а у SpeedButton нет hwnd



Serghei   (2002-01-23 11:24) [11]

Не помню уже где читал но точно помню что там было сказано что DC это эквивалентно Canvas.Handle - а тебе ведь именно это и надо, ведь ты рисуешь не самой кнопке а используя ее свойство Glyph которое при этом является TBitmap-ом и имеет ведь свойство Canvas.Handle что равно DC.



IgoX   (2002-01-23 11:32) [12]

Я попробывал но ни чего не вышло DrawIcon(SpeedButton1->Glyph->Canvas->Handle,0,0,FileInfo.hIcon);
GetLastError() выдает 0



Serghei   (2002-01-23 11:40) [13]

Cм.
TCanvas.handle (Properties)

Specifies the Windows GDI handle to the device context for this canvas.

property Handle: HDC;

Description

Set Handle to the HDC for the device context the canvas must draw into. When a windowed control responds to a Windows paint message, the HDC for drawing is passed in to the PaintWindow method. In other cases, an HDC can be obtained for a window by calling the GetDeviceContext method of a control. Additionally, Windows provides API calls to obtain an HDC for a printer or for a memory image.

Read the Handle property to supplement the drawing services provided by the TCanvas object with API calls that require a handle to a device context. Most of the Windows GDI calls require an HDC.
С ДровИкон должно получиться но только он тебе отрисует иконку в 32х32 а не 16х16, а вот с этим ДровИконЕх и у меня были те же самые проблемы - рисовал рисовал а ничего так и не отрисовывалось! :o( Фиг его знает почему - значит придется наверное тебе остановится на том варианте что ты реализовал вчера!
Удачи!



IgoX   (2002-01-23 12:10) [14]

Спасибо за отзыв




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.026 c
3-18695           Ars P                 2002-01-09 13:38  2002.02.07  
Interbase - как сделать в Stored Procedure базы вывод окошка с сообщением для пользователя?


6-18936           Yuraz                 2001-11-13 17:05  2002.02.07  
Помогите найти компоненты D5D6 для работы с ICQ


4-19020           ikar                  2001-12-08 13:51  2002.02.07  
Системные ловушки и VCL


1-18872           AndrewK               2002-01-23 09:54  2002.02.07  
Как правильно создать и уничтожить форму


7-18996           T2                    2001-10-29 17:04  2002.02.07  
Эквалайзер