Форум: "WinAPI";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
ВнизКак вытащить иконку из открытого окна ??????? Найти похожие ветки
← →
Arhelon (2003-06-24 14:46) [0]GetClassLong(wnd,GCL_HICON) не всегда помогает :(
Не вытаскивается из аськи и Оперы :((
Как ещё мона ????
← →
Игорь Шевченко (2003-06-24 15:26) [1]Еще можно
var AIconSm : HICON;
begin
AIconSm := GetClassLong(AWindowHandle, GCL_HICONSM);
if AIconSm = 0 then
( AWindowHandle, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, AIconSm) Еще можно
var AIconSm : HICON;
begin
AIconSm := GetClassLong(AWindowHandle, GCL_HICONSM);
if AIconSm = 0 then
if SendMessageTimeOut(AWindowHandle, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, AIconSm) = 0 then
AIconSm := 0;
...
end;
← →
Arhelon (2003-06-24 15:59) [2]Types of actual and formal var parameters must be identical :(
← →
Игорь Шевченко (2003-06-24 16:29) [3]1) Они Identical :) Компилировалось на D6, работало в WinXP. Пример полгода лежал в кладовке и умер при очередной аварии.
2) На какой строке-то хоть сообщение выдается ?
← →
clickmaker (2003-06-24 16:34) [4]SendMessageTimeOut(AWindowHandle, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, Cardinal(AIconSm))
← →
Игорь Шевченко (2003-06-24 16:40) [5]clickmaker © (24.06.03 16:34)
Я сильно извиняюсь, но какую гайку надо установить в компиляторе, чтобы получить такое сообщение и избавится от него, приведением типа к Cardinal ???
← →
clickmaker (2003-06-24 16:49) [6]Странно как раз то, что у вас, Игорь, дельфя не заругалась :)
Так что вопрос про гайку переадресую обратно вам: как сделать, чтоб не ругалась?
Тип HICON, он хоть и обозначен как LongWord, но по мнению компилятора не идентичен DWORD"у, отсюда и матюги
← →
Игорь Шевченко (2003-06-24 17:04) [7]clickmaker © (24.06.03 16:49)
D5 не ругается сейчас :)
D6 Personal - не ругалась при разработке :)
С уважением,
← →
Игорь Шевченко (2003-06-24 17:06) [8]
procedure TfMain.DesktopWindowsListBoxDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
AWindowHandle : HWND;
AIconSM : THandle;
Icon : TIcon;
begin
with DesktopWindowsListBox do begin
Canvas.FillRect(Rect);
AWindowHandle := HWND(Items.Objects[Index]);
if AWindowHandle = HWND(-2) then begin
Canvas.Font.Color := clRed;
Canvas.Brush.Color := Color;
end else begin
Inc(Rect.Left, 2);
AIconSm := GetClassLong(AWindowHandle, GCL_HICONSM);
if AIconSm = 0 then
if SendMessageTimeOut(AWindowHandle, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, AIconSm) = 0 then
AIconSm := 0;
if AIconSm <> 0 then begin
Icon := TIcon.Create();
Icon.Handle := AIconSm;
try
Canvas.Draw(Rect.Left, Rect.Top+2,Icon);
Icon.ReleaseHandle();
finally
Icon.Free();
end;
end;
Inc (Rect.Left, GetSystemMetrics(SM_CXSMICON)+3);
end;
( Canvas.Handle, PChar(Items[Index])
procedure TfMain.DesktopWindowsListBoxDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
AWindowHandle : HWND;
AIconSM : THandle;
Icon : TIcon;
begin
with DesktopWindowsListBox do begin
Canvas.FillRect(Rect);
AWindowHandle := HWND(Items.Objects[Index]);
if AWindowHandle = HWND(-2) then begin
Canvas.Font.Color := clRed;
Canvas.Brush.Color := Color;
end else begin
Inc(Rect.Left, 2);
AIconSm := GetClassLong(AWindowHandle, GCL_HICONSM);
if AIconSm = 0 then
if SendMessageTimeOut(AWindowHandle, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, AIconSm) = 0 then
AIconSm := 0;
if AIconSm <> 0 then begin
Icon := TIcon.Create();
Icon.Handle := AIconSm;
try
Canvas.Draw(Rect.Left, Rect.Top+2,Icon);
Icon.ReleaseHandle();
finally
Icon.Free();
end;
end;
Inc (Rect.Left, GetSystemMetrics(SM_CXSMICON)+3);
end;
DrawText(Canvas.Handle, PChar(Items[Index]), -1, Rect, DT_SINGLELINE OR DT_VCENTER);
end;
end;
Вот такой вот код :)
← →
clickmaker (2003-06-24 17:17) [9]Чудеса на виражах...
У меня и 5 и 6 ругается на эту строчку.
Причем, если сменить тип AIconSm c HICON на THandle, то ошибка еще экзотичней:
Statement expected, but expression of type "Integer" found
Игорь, а вы на каком рынке Дельфи брали ? :)))
← →
Игорь Шевченко (2003-06-24 18:17) [10]clickmaker © (24.06.03 17:17)
У Borland"a обе. D5 на работе, D6 личная, благо бесплатная, все update packs установлены.
← →
DVM (2003-06-25 12:14) [11]function GetIconFromWindow(hWnd:HWND; bBigIcon:boolean):HICON;
var
BigOrSmall,BigOrSmall2:integer;
hIcon:THandle;
begin
hIcon:=0;
if bBigIcon then
begin
BigOrSmall:=ICON_BIG;
BigOrSmall2:=GCL_HICON;
end
else
begin
BigOrSmall:=ICON_SMALL;
BigOrSmall2:=GCL_HICONSM;
end;
SendMessageTimeout(hWnd, WM_GETICON, BigOrSmall, 0, SMTO_ABORTIFHUNG, 1000, HIcon);
if hIcon=0 then hIcon := GetClassLong(hWnd, BigOrSmall2);
if hIcon=0 then SendMessageTimeout(hWnd, WM_GETICON, BigOrSmall, 1,
( hWnd, BigOrSmall2) function GetIconFromWindow(hWnd:HWND; bBigIcon:boolean):HICON;
var
BigOrSmall,BigOrSmall2:integer;
hIcon:THandle;
begin
hIcon:=0;
if bBigIcon then
begin
BigOrSmall:=ICON_BIG;
BigOrSmall2:=GCL_HICON;
end
else
begin
BigOrSmall:=ICON_SMALL;
BigOrSmall2:=GCL_HICONSM;
end;
SendMessageTimeout(hWnd, WM_GETICON, BigOrSmall, 0, SMTO_ABORTIFHUNG, 1000, HIcon);
if hIcon=0 then hIcon := GetClassLong(hWnd, BigOrSmall2);
if hIcon=0 then SendMessageTimeout(hWnd, WM_GETICON, BigOrSmall, 1,
SMTO_ABORTIFHUNG, 1000, hIcon);
if hIcon=0 then hIcon := GetClassLong(hWnd, BigOrSmall2);
if hIcon=0 then SendMessageTimeout(hWnd, WM_QUERYDRAGICON, BigOrSmall,
0, SMTO_ABORTIFHUNG, 1000, hIcon);
result:=hIcon;
end; // End of function GetIconFromWindow --------------------------------------
← →
jonni (2003-06-25 23:45) [12]nado dobavit" k DMV esche strochku!!!!!!! v samiy konec vseh pereborov
if hIcon=0 then hIcon:=LoadIcon(0,IDI_APPLICATION);
//----------
IDI_APPLICATION---- vot eto po vkusu
//----------
budet togda voobcshe na vse sluchai zizni
toka s razmerami kak bit.....:)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c