![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вытащить иконку из открытого окна ???????
Arhelon © (2003-06-24 14:46:00)
GetClassLong(wnd,GCL_HICON) не всегда помогает :(
Не вытаскивается из аськи и Оперы :((
Как ещё мона ????
jonni (2003-06-25 23:45:00) [1]
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.....:)
DVM (2003-06-25 12:14:00) [2]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 --------------------------------------
Игорь Шевченко (2003-06-24 18:17:00) [3]
clickmaker © (24.06.03 17:17)
У Borland"a обе. D5 на работе, D6 личная, благо бесплатная, все update packs установлены.
clickmaker (2003-06-24 17:17:00) [4]
Чудеса на виражах...
У меня и 5 и 6 ругается на эту строчку.
Причем, если сменить тип AIconSm c HICON на THandle, то ошибка еще экзотичней:
Statement expected, but expression of type "Integer" found
Игорь, а вы на каком рынке Дельфи брали ? :)))
Игорь Шевченко (2003-06-24 17:06:00) [5]
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;
Вот такой вот код :)
Игорь Шевченко (2003-06-24 17:04:00) [6]
clickmaker © (24.06.03 16:49)
D5 не ругается сейчас :)
D6 Personal - не ругалась при разработке :)
С уважением,
clickmaker (2003-06-24 16:49:00) [7]
Странно как раз то, что у вас, Игорь, дельфя не заругалась :)
Так что вопрос про гайку переадресую обратно вам: как сделать, чтоб не ругалась?
Тип HICON, он хоть и обозначен как LongWord, но по мнению компилятора не идентичен DWORD"у, отсюда и матюги
Игорь Шевченко (2003-06-24 16:40:00) [8]
clickmaker © (24.06.03 16:34)
Я сильно извиняюсь, но какую гайку надо установить в компиляторе, чтобы получить такое сообщение и избавится от него, приведением типа к Cardinal ???
clickmaker (2003-06-24 16:34:00) [9]
SendMessageTimeOut(AWindowHandle, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, Cardinal(AIconSm))
Игорь Шевченко (2003-06-24 16:29:00) [10]
1) Они Identical :) Компилировалось на D6, работало в WinXP. Пример полгода лежал в кладовке и умер при очередной аварии.
2) На какой строке-то хоть сообщение выдается ?
Arhelon (2003-06-24 15:59:00) [11]
Types of actual and formal var parameters must be identical :(
Игорь Шевченко (2003-06-24 15:26:00) [12]Еще можно
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;