Witam. Poniższy kod działa, ale ja chciałbym zamiast GetClassName użyć ControlAtPos i sprawdzać
komponenty po ClassType, a nie po zwróconej nazwie w. Jak prawidłowo użyć ControlAtPos aby
otrzymać ClassType, a nie wyjątek AV, jak do tej pory albo nic. Poniżej wklejam kod obu moich prób.
Zresztą pierwszy kod po drobnej przeróbce znalazłem właśnie googlując, na tym forum.
var
P : TPoint;
Window : HWND;
Str : string;
begin
GetCursorPos(P);
Window := WindowFromPoint(P);
Setlength(Str, 128);
GetClassName(Window, Pchar(Str), 128);
Str := Copy(Str, 0, Pos(#0, Str) -1);
if (Str = 'TListView')
or (Str = 'TEdit')
or (Str = 'TBitBtn')
or (Str = 'TComboBox')
then
begin
StatusBar.SimpleText := ''
end
else
begin
StatusBar.SimpleText := Application.Hint;
end;
end;
I to działa ok, bo wyświetla Hinty dla pozycji Menu w StatusBarze, a dla pozostałych komponentów w "dymkach".
Ale próbowałem też tak i nic się nie pokazuje po najechaniu na ListView. Jak dawałem z Parent. to miałem AV,
a jak robię tak jak poniżej to nie pokazuje się w ogóle Message po najechaniu na ListViewa. Proesę o pomoc.
var
P : TPoint;
AControl : TControl;
begin
GetCursorPos(P);
AControl := ControlAtPos(P, True);
if AControl <> nil then
begin
if AControl.ClassType = TListView then
ShowMessage('Wybrałeś ListView');
end;
end;