Ich habe nochmal kurz ein bisschen in der
OH herumgewühlt, weil mir die CM-Messages und CM-Procs bisher nämlich auch eher unbekannt waren. Sie sind da allerdings auch nicht richtig breit und fett herausgekehrt oder erklärt und deswegen würde ich auf die auch nicht größer drauf aufbauen.
Wo immer du deinen obigen Code her hast, aber zur normalen DelphiUser-Schnittstelle gehört diese CM_Exit-Message u. CMExit-Proc (mit ihrem TCMExit-Datentyp in der Parameterliste) eher nicht, obgleich es aber auch damit gegangen wäre:
Delphi-Quellcode:
procedure CMExit(var Msg : TCMExit); message CM_Exit;
...
procedure TCalcEdit.CMExit(var Msg : TCMExit);
begin
inherited;
// + deinem zusätzlich Code für diese Situation
end;
Die für deine Zwecke jedoch normale bzw. richtige Schnittstelle ist hier mit Sicherheit aber mehr die 'DoExit'-Methode von TWinControl. Die hättest du für deine Zwecke nämlich auch gut überschreiben können:
Delphi-Quellcode:
...
protected
procedure DoExit; override;
...
procedure TOwnEdit.DoExit;
begin
inherited;
// + deinem zusätzlich Code für diese Situation
end;
Und so wie es aussieht, wird diese DoExit-Methode dann ja ihrerseits auch wieder von einer Control-eigenen Botschaftsbehandlungsroutine für WM_KillFocus aufgerufen. Also ist auch die Lösung die ich dir ganz oben genannt hatte völlig ok. (In so einem Fall ist es dann nämlich egal welche der beiden Procs du überschreibst, wenn nur das inherited im Code vorkommt.)
PS. Und warum bist du eigentlich nicht mit dem einfachen Eventhandler (der über die OnExit-Property aufgerufen wird) zufrieden?
Der wird doch in den Fällen, in dem das Control durch das TAB oder das SHIFT-TAB verlassen wird, auch immer angesprungen. Oder wolltest du ja auch überhaupt nie mehr?
(Dann einfach:
Delphi-Quellcode:
constructor TCalcEdit.Create(AOwner: TComponent);
begin
inherited;
OnExit := CalcEdit1Exit;
end;
procedure TCalcEdit.CalcEdit1Exit(Sender : TObject);
begin
MemoCalc.Visible := false;
MemoCalc.Clear;
end;
)
PPS. Gut möglich, dass ich mich durch deinen irgendwo aus dem I-Net aufgegabelten Code da auf eine etwas überflüssig komplizierte Bahn habe bringen lassen.