Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ein 'KeyDownEvent'-Ereignis...in eine andere Unit auslagern (https://www.delphipraxis.net/137779-ein-keydownevent-ereignis-eine-andere-unit-auslagern.html)

Codix32 28. Jul 2009 15:51


Ein 'KeyDownEvent'-Ereignis...in eine andere Unit auslagern
 
Hallo Leute,

um meine FormUnit etwas übersichtlicher zu gestalten, möchte ich gern

die Ereignisse 'KeyDownevent' für Editfelder und 'Clickevent' für dynamisch erstellte Labels
in eine 2.Unit auslagern und diese dann einbinden:

Delphi-Quellcode:
{OnKeyDown Methode - den Edits im Objektinsp. zugewiesen}
procedure TForm1.EditKeyDownEvent(Sender:TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (Sender is TEdit)and(Key=VK_Return) then
 begin
   LblColorSwap;
   Label9.Top:=TEdit(Sender).Top;
   Label9.Caption:= '<- Focus';
   Edit1.maxlength :=5;
   Edit2.maxlength :=5;
   if (Sender =Edit1)and (length(Edit1.text)=5) then
...
...

{das Klick Ereignis}
procedure TForm1.ClickEvent(Sender: TObject);
begin
if (Sender is TLabel) then
 with TagArray[(Sender as TLabel).Tag] do
  begin
   LblTmp:=TNum;
   Label1.Caption:= inttostr(TNum);
   Label2.caption:='TagArray.Anw: '+ Anw;
   Label3.Caption:='TagArray.abwBegin: '+ abwBegin;
   Label4.Caption:='TagArray.abwEnde: '+ abwEnde;
   Label5.Caption:='TagArray.abwZeit:  '+ abwZeit;
   Label10.Caption:='TagArray.TgName: '+ TgName;
   Label13.Caption:= inttostr(WerkTag)+'. Werktag';
   Edit1.Text:=abwBegin;
   Edit2.Text:=abwEnde;
   Edit3.Text:=abwZeit;
   Edit4.Text:=Anw;
  end;
  LblColorSwap;
end;
Habt ihr einen Ansatz, oder müssen diese Events in der Formunit bleiben?

DeddyH 28. Jul 2009 15:54

Re: Ein 'KeyDownEvent'-Ereignis...in eine andere Unit ausla
 
Wenn ich nicht irre, ist es wurscht, in welcher Unit sie stehen, aber es müssen Methoden sein.

Medium 28. Jul 2009 19:48

Re: Ein 'KeyDownEvent'-Ereignis...in eine andere Unit ausla
 
Man kann prinzipiell Ereignishandler aus Units nehmen die nicht zum Formular gehören, nur ist das recht unübersichtlich auf Dauer. Zudem müssen diese dann auch "procedure of object", also eben Methoden sein, und somit in eine Klasse eingebettet werden. Wenn man das aber schon tun muss, wäre es die sauberere Lösung die Eventhandler in der Formular-Unit zu belassen, und in diesen dann als Einzeiler die ausgelagerten Methoden einer Helferklasse aus einer anderen Unit aufrufen zu lassen. Um diese Helferklasse nicht instanziieren zu müssen bieten sich da statische Methoden an ("class procedure/function").


Delphi-Quellcode:
// Unit1
TMyForm = class(TForm)
  procedure OnMouseClick(Sender: TObject);
private
public
end;

implementation

uses
  Unit2;

procedure TMyForm.OnMouseClick(Sender: TObject);
begin
  {Unit2.}TMyFormHelper.OnMouseClick(Sender);
end;

//-------------------

// Unit2
TMyFormHelper = class
private
public
  class procedure OnMouseClick(Sender: TObject);
end;

implementation

class procedure TMyFormHelper.OnMouseClick(Sender: TObject);
begin
  // was beim Klick passiert
end;
So die Richtung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz