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

Вниз

Как узнать имя класса окна по его Handle ?   Найти похожие ветки 

 
GreySerg   (2003-12-01 17:21) [0]

Как узнать имя класса окна по его Handle ?


 
Семен Сорокин ©   (2003-12-01 17:25) [1]

а как узнать фио человека по его паспортному номеру?
никак.


 
PVOzerski ©   (2003-12-01 17:27) [2]

И тем не менее - API-функция GetClassName...


 
Семен Сорокин ©   (2003-12-01 17:29) [3]

:)
упс, недопонял вопрос, сорри


 
GreySerg   (2003-12-01 18:12) [4]

почему-то GetClassName возвращает 0 , а на ShowMessage(SysErrorMessage(GetLastError)); говорит Оperation compleeted successfully.


 
Юрий Зотов ©   (2003-12-01 18:14) [5]

Приведите код - как Вы вызываете GetClassName.


 
Skier ©   (2003-12-01 18:19) [6]

Это имеется в виду ?
1) function FindControl(Handle: HWnd): TWinControl;
2) TObject.ClassName


 
GreySerg   (2003-12-01 18:21) [7]

Вот код:

procedure TfrmDecisionResults.N14Click(Sender: TObject);
var
S: PAnsiChar;
begin
if GetClassName(PopupMenu1.WindowHandle, S, 255)<>0 then
ShowMessage(S)
else ShowMessage(SysErrorMessage(GetLastError));
end;


 
Юрий Федоров ©   (2003-12-01 18:23) [8]

Память под буффер (S: PAnsiChar) должна быть выделена перед вызовом GetClassName.

Вариант - S: Array[Byte] of Char;


 
GreySerg   (2003-12-01 18:29) [9]

> Юрий Федоров ©
точно, забыл совсем :-)


 
GreySerg   (2003-12-01 18:33) [10]

Тогда почему PopupMenu1.WindowHandle = хэндлу Application , а не
контрола , из которого вызвано Popup меню
(у меня ShowMessage(S) выдаёт TApplication) ?


 
PVOzerski ©   (2003-12-01 18:35) [11]

Мой любимый вариант:

var s:shortstring;
..
byte(s[0]):=GetClassName(hwnd,@s[1],255);

Только вот что можно так получить от PopupMenu? Практика показывает: TApplication, теория: меню - не окно.


 
Юрий Федоров ©   (2003-12-01 18:48) [12]

constructor TPopupMenu.Create(AOwner: TComponent);
begin
...
FWindowHandle := Application.Handle;
...
end;
...
procedure TControl.SetPopupMenu(Value: TPopupMenu);
begin
FPopupMenu := Value;
if Value <> nil then
begin
Value.ParentBiDiModeChanged(Self);
Value.FreeNotification(Self);
end;
end;

То есть никаких следов на то, что PopupMenu1.WindowHandle указывает на что-то другое...
По другому и быть не может, так как у нескольких T(Win)Control может быть один TPopupMenu


 
GreySerg   (2003-12-01 19:13) [13]

спасибо всем



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.012 c
7-36881
eRat
2003-10-08 10:49
2003.12.12
блокирование рабочей станции под NT/XP


14-36833
Thor
2003-11-19 16:31
2003.12.12
игра MAX от Interplay


3-36519
Nick-From
2003-11-19 19:55
2003.12.12
Обработка исключения - Нет прав на выполнение действия


1-36710
timM
2003-12-03 12:34
2003.12.12
fsMDIForm и Dll


3-36537
mari
2003-11-21 10:30
2003.12.12
нулевой результат запроса