Форум: "Основная";
Текущий архив: 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.032 c