Entwickler-Ecke

Sonstiges (Delphi) - OnClick Ereignisse in andere Unit auslagern


SmileySN - Do 23.03.06 19:49
Titel: OnClick Ereignisse in andere Unit auslagern
Kann man OnClick-Ereignisse z.B. von Form1 in unit2 auslagern ?
wenn ja was muss man dazu machen, damit noch alles gefunden wird ?


Vera - Do 23.03.06 19:51

Ja, das fuktioniert.

Nur bedenke, dass es sich dabei um eine Methode und keine Procedure handeln muss.


SmileySN - Do 23.03.06 20:54

Na immerhin es soll also grundsätzlich funktionieren.
Jetzt stellt sich nur noch die Frage wie ?

Nehmen wir als Beispiel die OnKeyPress Routine von Form1.

Die soll in Unit2, dort habe ich aber keine Form mit angelegt, ich hoffe das stellt kein Problem dar.
In dieser Routine habe ich aber auch den Befehl Perform(WM_NextDlgCtl, 0, 0); verwendet, den erkennt er in Unit2 nicht.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//----------------------------------------------------------------------------//
//-----Return-Taste abfangen und wenn gedrückt zum nächsten Feld springen-----//
//----------------------------------------------------------------------------//

procedure TForm1.EdBarcodeKeyPress(Sender: TObject; var Key: Char);
begin
  if key = chr(vk_Return) then
    begin
      Key := #0;
      Perform(WM_NextDlgCtl, 00);
    end;
end;

procedure TForm1.EdMandantKeyPress(Sender: TObject; var Key: Char);
begin
  if key = chr(vk_Return) then
    begin
      Key := #0;
      Perform(WM_NextDlgCtl, 00);
    end;
//  if not (key in ['0'..'9', 'A'..'Z', 'a'..'z', '-', '(', ')', #8, #9]) then key := #0;
end;


Oder fällt jemand noch eine bessere Möglichkeit ein um z.B. die Keypress Ereignisse zu zentralisieren und zu optimieren.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


SmileySN - Mi 19.04.06 11:06

user profile iconVera hat folgendes geschrieben:
Ja, das fuktioniert.

Nur bedenke, dass es sich dabei um eine Methode und keine Procedure handeln muss.


Was wollen uns diese Worte sagen !

Eine Procedure setze ich einfach in eine andere Unit in den Implementation Teil, deklariere sie im Interface Teil und setze die HerkunftsUnit in die Uses Klausel unter Implementation dazu.

Wie geht das bei Methoden ????


mkinzler - Mi 19.04.06 11:11

Methoden gehören zu einer Klasse. Diese muß also instantiiert werden (kann im Initialisierungsteil der Unit automatisch geschehen). Unit in uses einbinden, dann kanst du auf die Methoden zugreifen. Einfach obj.onClick := envclass.onObjClick;