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

Вниз

Как вытащить иконку из открытого окна ???????   Найти похожие ветки 

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

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

Наверх




Память: 0.49 MB
Время: 0.011 c
1-92109
Song
2003-08-15 11:48
2003.08.28
TVS_CHECKBOXES. Как определить что ветвь с галочкой?


14-92226
Cosmic
2003-08-09 17:04
2003.08.28
Свой SMTP-сервер


6-92164
Lamer111
2003-06-21 00:19
2003.08.28
чат и интернет


3-92057
Separator
2003-08-02 16:52
2003.08.28
Paradox7 и тип поля Time


14-92200
Артем К
2003-08-11 04:51
2003.08.28
Где можно найти исходник простенького интерпретатора?