Hallo und guten Morgen an alle
DP´ler,
Hab noch eine Frage zu Komponenten. Ich möchte erkennen, ob in außerhalb meiner Komponente geklickt wurde, so dass ich diese wieder in den "deaktivierten" Anzeigemodus überführen kann. Das Klicken auf meine Komponente habe ich eigentlich gut im Griff. Jetzt scheint das Problem zu bestehen, dass keine WM bei meiner Komponente ankommt, wenn ichaußerhalb dieser bin. Wollte das eigentlich mal so probieren:
Delphi-Quellcode:
// Deklarationsraum
const MouseClick = WM_LBUTTONDOWN;
MouseOver = CM_MOUSEENTER;
MouseLeave = CM_MOUSELEAVE;
type TLabEdit = Class(TWinControl)
private
FbMouseOverComponent: boolean;
...
// Event-Prozeduren
procedure WMMouseClick(var Msn: TMessage); message MouseClick;
procedure CMMouseOver(var Msn: TMessage); message MouseOver;
procedure CMMouseLeave(var Msn: TMessage); message MouseLeave;
...
// Funktionen
procedure TLabEdit.WMMouseClick(var Msn: TMessage);
begin
inherited;
if assigned(FOnClick) then FOnClick(Self);
if FbMouseOverComponent then
begin
FEdEingabe.Visible := true;
FLblAnzeige.Visible := false;
end
else
begin
FEdEingabe.Visible := false;
FLblAnzeige.Visible := true;
FLblAnzeige.Caption := FEdEingabe.Text;
if FsTextWert <> FEdEingabe.Text then if assigned(FOnChange) then FOnchange;
FsTextWert := FEdEingabe.Text;
end;
end;
// Wenn die Maus über dem Label ist, ändert sich der Cursor, damit erkannt werden
// kann, dass man hier eine Eingabe tätigen kann.
procedure TLabEdit.CMMouseOver(var Msn: TMessage);
begin
FbMouseOverComponent := true;
Cursor := crHandPoint;
end;
// Cursor wird auf den normalen Default-Cursor zurück gesetzt.
procedure TLabEdit.CMMouseLeave(var Msn: TMessage);
begin
FbMouseOverComponent := false;
Cursor := crDefault;
end;
Wie kann ich dies Bewerkstelligen? Habe schon einiges von Hooks gehört, leider kann ich damit noch nicht sehr viel drunter vorstellen andererseits weiß ich nicht, ob dies wirklich notwendig ist, aufgrund des nicht vorhandenen Wissens. Werde es mir aber jetzt mal anschauen. Vieleicht kann mir ja jemand dazu einen Tipp geben.
2. Account Sero