Einzelnen Beitrag anzeigen

TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Problem mit meiner CalcEdit-Komponente

  Alt 21. Jun 2005, 12:47
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.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat