Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Иконка из файла на кнопке   Найти похожие ветки 

 
Destroyer   (2004-06-25 00:35) [0]

У меня есть кнопки. Они запускают программы. Я хочу чтобы на каждой кнопке было по картинке той программы, которую она запускает. Я делаю так:
Form1.Image1.Picture.Icon.Handle:=ExtractIcon(hInstance,PChar(opendialog1.FileName),0);
Когда я присваиваю иконку картинке так, то все ок, а я хочу картинку на кнопке, присвоить кнопке не получается, т.к. ругается , что один тип icon, а другой картинка, что делать? И т.к. у меня кнопка меньше получаемой картинки, можно ли как-нибудь масштабировать полученную картинку?
А можно ли как-нибудь доставать иконки из файла, но не те, которые стоят первым номером, т.е. большие, а те, которые показываются, например в  OpenDialog?


 
grom   (2004-06-25 07:53) [1]

используй ImageList


 
begin...end ©   (2004-06-25 09:11) [2]


> Destroyer   (25.06.04 00:35)


> А можно ли как-нибудь доставать иконки из файла, но не те,
> которые стоят первым номером


HICON ExtractIcon(

   HINSTANCE hInst, // instance handle
   LPCTSTR lpszExeFileName, // filename of file with icon
   UINT nIconIndex  // index of icon to extract
  );

nIconIndex

Specifies the index of the icon to retrieve. If this value is 0, the function returns the handle of the first icon in the specified file. If this value is -1, the function returns the total number of icons in the specified file.


 
Destroyer   (2004-06-25 12:12) [3]


> HICON ExtractIcon(
>
>    HINSTANCE hInst, // instance handle
>    LPCTSTR lpszExeFileName, // filename of file with icon
>    UINT nIconIndex  // index of icon to extract
>   );
>
> nIconIndex
>
> Specifies the index of the icon to retrieve. If this value
> is 0, the function returns the handle of the first icon
> in the specified file. If this value is -1, the function
> returns the total number of icons in the specified file.

Это я видел, но когда я указываю, например, 2 , то никаких иконок не находится :(  ни у одного файла. Когда ставлю -1, компилятор ругается. И как узнать под каким номером находится маленькая иконка?


 
GuAV ©   (2004-06-25 12:24) [4]


> Когда ставлю -1, компилятор ругается.

Cardinal(-1) - чтоб не ругался.


 
Destroyer   (2004-06-25 22:06) [5]

А как в этом случае использовать ImageList?


 
Destroyer   (2004-06-25 22:40) [6]

Я делаю так:
form1.SpeedButton2.Glyph:=(TBitmap(ExtractIcon(hInstance,PChar(opendialog1.FileName),2)));
Но получаю AccessViolation. Видимо так не конвертируется.
Как сконвертировать HIcon в Bitmap?


 
GuAV ©   (2004-06-25 23:55) [7]

Так не пойдет. Нужно нарисовать HIcon на HBitmap.
Ксати, посмотри ExtractIconEx


 
Destroyer   (2004-06-26 00:09) [8]

А можно примерчик, как нарисовать HIcon на HBitmap?


 
GuAV ©   (2004-06-26 00:13) [9]

DrawIcon(HBitmap,0,0,HIcon);


 
Destroyer   (2004-06-26 00:32) [10]

Делаю так, но что-то ничего не рисуется :
DrawIcon(HBitmap(form1.speedbutton2.glyph),0,0,ExtractIcon(hInstance,PChar(opendialog1.FileName),1));
Там, наверное еще надо loadicon использовать:

hIcon
Identifies the icon to be drawn.
Windows NT: The icon resource must have been previously loaded by using the LoadIcon function.

Так?


 
dynamic ©   (2004-06-26 04:56) [11]

procedure TfmObjEditor.GetFileIcon(const aFile: string; Bitmap: TBitmap);
var
  fi: _SHFILEINFOA;
begin
   ZeroMemory(@fi, SizeOf(fi));
   SHGetFileInfo(PChar(Trim(aFile)), FILE_ATTRIBUTE_NORMAL, fi, SizeOf(fi),
                 SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES);
   Bitmap.Width := 16;
   Bitmap.Height := 16;
   DrawIconEx(Bitmap.Canvas.Handle, 0, 0, fi.hIcon,0,0,0,0,DI_NORMAL);
end;


 
Destroyer ©   (2004-06-26 21:30) [12]

Надо было делать так:
form1.SpeedButton2.Glyph.Width := 32;
form1.SpeedButton2.Glyph.Height := 32;
DrawIco((Form1.speedbutton2.Glyph.Canvas.Handle),0,0,ExtractIcon(hInstance,PChar(opendialog1.FileName),0)) ;

т.е. задать еще ширину и высоту.
Теперь еще вопрос: как достать из файла именно smallicon (маленькую иконку)?
Индекс у нее в разных файлах разный.


 
K.o.Z   (2004-06-26 23:54) [13]

GetRgn(...);
FillRgn(...);


 
GuAV ©   (2004-06-27 00:13) [14]

Теперь еще вопрос: как достать из файла именно smallicon (маленькую иконку)?
HICON ExtractIconEx(

   LPCSTR lpszFile,
   int nIconIndex,
   HICON FAR * phiconLarge,
   HICON FAR * phiconSmall,
   UINT nIcons  
  );

и кроме того (из MSDN) (это касается как ExtractIcon так и ExtractIconEx)

Remarks

You must destroy the icon handle returned by ExtractIcon by calling the DestroyIcon function.

поэтому всегда нужно кроме хелпа проверять MSDN (в хелпе этого нет).


 
Destroyer ©   (2004-06-27 00:18) [15]


> GetRgn(...);
> FillRgn(...);

Это немного не то. Проблема в том, что я достаю иконку, рисую ее на кнопке, которая меньше чем она сама. Помещается только часть. Мне надо ее любым способом уместить на кнопке (сжать или вытащить маленькую, как в Opendialog).
Как это сделать?


 
GuAV ©   (2004-06-27 00:25) [16]


> сжать или вытащить маленькую

Вытащить маленькую - ExtractIconEx
Сжать - DrawIconEx


 
Destroyer ©   (2004-06-27 00:49) [17]

Спасибо всем!


 
grom   (2004-06-27 16:27) [18]

Преобразование ICO в BMP I
-----------------------------
var
Icon   : TIcon;
Bitmap : TBitmap;
begin
Icon   := TIcon.Create;
Bitmap := TBitmap.Create;
Icon.LoadFromFile("c:\picture.ico");
Bitmap.Width := Icon.Width;
Bitmap.Height := Icon.Height;
Bitmap.Canvas.Draw(0, 0, Icon);
Bitmap.SaveToFile("c:\picture.bmp");
Icon.Free;
Bitmap.Free;
end;
-------------------------
Преобразование ICO в BMP II
------------
Чтобы преобразовать Icon в Bitmap используйте TImageList. для обратного преобразования замените метод AddIcon на Add, и метод GetBitmap на GetIcon.
-----------
function Icon2Bitmap(Icon: TIcon): TBitmap;
begin

with TImageList.Create (nil) do begin
AddIcon (Icon);
Result := TBitmap.Create;
GetBitmap (0, Result);
Free;
end;
end;
------
Советы по Delphi.Валентин Озеров


 
grom   (2004-06-27 16:34) [19]

ImageList.Height:=16;
ImageList.Width:=16; = размер картинок



Страницы: 1 вся ветка

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

Наверх





Память: 0.49 MB
Время: 0.033 c
14-1087986481
Tornado
2004-06-23 14:28
2004.07.11
Программы не запускаются....что за глюк???


1-1088003235
Новенький
2004-06-23 19:07
2004.07.11
Имя файла


4-1085718626
Alibaba
2004-05-28 08:30
2004.07.11
Уважаемые мастера подскажите плиз, как в сервисе установить


14-1087779761
Vasya.ru
2004-06-21 05:02
2004.07.11
RTF - чем хуже DOC а?


1-1088486764
ABL
2004-06-29 09:26
2004.07.11
Как из одного richedita передать часть текста в другой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский