Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.17;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-53515
alless
2004-02-05 18:28
2004.02.17
Word


4-53810
QUSTION
2003-12-12 12:14
2004.02.17
Как отлавить событие активизации какого-либо окна в win2000/XP?


6-53665
Pavels
2003-12-15 12:54
2004.02.17
посылка письма из ActiveX


1-53643
VID
2004-02-06 17:08
2004.02.17
Определить необходиму высоту для RichEdit


3-53366
Xmen
2004-01-28 08:23
2004.02.17
Перекодировка