Форум: "WinAPI";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизXP Иконки в менюшках Найти похожие ветки
← →
Kinder (2003-12-13 00:12) [0]Кто подскажет. Как сделать так, чтобы XP иконки (в самой XP) в менюшках отображались нормально, а не уродливо.
← →
SPeller (2003-12-13 16:38) [1]Рисовать самому с помощью DrawIconEx, которая нормально отрисовывает тени иконок.
← →
Kinder (2003-12-14 13:44) [2]Вот код
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawIconEx(N1231.Bitmap.Canvas.Handle, 0, 0, LoadIcon(0, IDI_APPLICATION),
16, 16, 0, 0, DI_NORMAL);
DrawIconEx(Canvas.Handle, 0, 0, LoadIcon(0, IDI_APPLICATION),
16, 16, 0, 0, DI_NORMAL);
end;
На форме всё отрисовывает, а в меню не хочет. Почему?
← →
zxc (2003-12-14 18:35) [3]так а разве DrawIconEx в 98-м знает как рисовать 32-х битные иконки?
← →
Kinder (2003-12-14 18:52) [4]Причем тут 98? Я в XP и рисую.
← →
zxc (2003-12-14 21:15) [5]вообще лучше бы ты перекрыл метод DrawItem, а там рисуй как хошь.
← →
SPeller (2003-12-15 03:57) [6]Менюхи можно OwnerDraw сделать. И в методе отрисовки преспокойно рисовать.
← →
Kinder (2003-12-15 20:15) [7]Так дело в том что cв-во OwnerDraw включено.
← →
Kinder (2003-12-15 21:24) [8]Пара вопросов есть
1
Почему не работает этот код?
procedure TForm1.Button1Click(Sender: TObject);
var
bitmap:TBitmap;
begin
bitmap:=TBitmap.Create;
DrawIconEx(bitmap.Canvas.Handle, 0, 0, LoadIcon(0, IDI_APPLICATION),
16, 16, 0, 0, DI_NORMAL);
Image1.Picture.Bitmap:=bitmap;
bitmap.Free;
end;
Второй
Есть ф-ция
function GetLnkIcon (const path:string):HBITMAP;
var
wcLinkName: array[0..MAX_PATH] of WideChar;
IconIndex: Integer;
hInstance:THandle;
obj: IUnknown;
isl: IShellLink;
ipf: IPersistFile;
PathBuffer, IconBuffer: array [0..MAX_PATH] of Char;
Win32FindData: TWin32FindData;
SmallIcon, HiIcon:HIcon;
ResultIcon:HBITMAP;
begin
ResultIcon:=0;
obj := CreateComObject(CLSID_ShellLink);
isl := obj as IShellLink;
ipf := obj as IPersistFile;
StringToWideChar(path, wcLinkName, SizeOf(wcLinkName));
ipf.Load(wcLinkName, STGM_READ);
isl.Resolve(0, SLR_ANY_MATCH);
isl.GetPath(PathBuffer, MAX_PATH, Win32FindData, SLGP_UNCPRIORITY);
isl.GetIconLocation(IconBuffer, MAX_PATH, IconIndex);
// Result:=ExtractIcon(hInstance,PathBuffer,IconIndex);
ExtractIconEx(PathBuffer, IconIndex, HiIcon, SmallIcon, 1);
if (SmallIcon<=0) and (HiIcon<=0) then
DrawIconEx(ResultIcon, 0, 0, LoadIcon(0, IDI_APPLICATION),
16, 16, 0, 0, DI_NORMAL)
else
if SmallIcon<=0 then
DrawIconEx(ResultIcon, 0, 0, HiIcon, 16, 16, 0, 0, DI_NORMAL)
else
DrawIconEx(ResultIcon, 0, 0, SmallIcon, 16, 16, 0, 0, DI_NORMAL);
Result:=ResultIcon;
beep;
end;
Она получает иконку ярлыка
теперь
procedure Tthe_main_form_1983.DrawItem(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
LeftPos, LeftIcon: Integer;
TopPos, TopIcon: Integer;
Text: string;
bmp:TBitmap;
begin
bmp:=TBitmap.Create;
Text := (Sender as TMenuItem).Caption;
if Selected then begin
ACanvas.Brush.Color := clMenuHighlight;
ACanvas.Font.Color := clHighlightText;
// Draw right in the middle of the menu
end
else
begin
ACanvas.Brush.Color := clMenu;
ACanvas.Font.Color := clMenuText;
// Draw right in the middle of the menu
end;
ACanvas.FillRect(ARect);
LeftPos:=ARect.Left+16+6;
TopPos:=ARect.Top+1;
ACanvas.TextOut(LeftPos, TopPos, Text);
bmp.Handle:=GetLnkIcon("C:\windows\favico.ico");
ACanvas.Draw(LeftIcon, TopIcon, bmp);
bmp.Free;
end;
Однако икнка не прорисовывается. Почему? Т.е. первая ф-ция почему-то возвращает 0.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c