Einzelnen Beitrag anzeigen

Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 17:25
Zitat von Christian18:
Hallo,

hier mal was ich eigentlich machen will. Ich habe ein Projekt mit 25 Forms. Alle dieser Forms soll auf die ESC Taste(27), Enter Taste(13), Einfg Taste(45) und Entf(46) reagieren können. Das zu programmieren ist nicht schwer. Nur habe ich nun auf jeder Form folgende procedure:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if shift = [] then
    begin
      case Key of
        13 : Edit(Sender);
        27 : Exit(Sender);
        45 : New(Sender);
        46 : Delete(Sender);
      end;
    end;
end;
Die einzelnen proceduren machen auf jeder Form etwas anderes. Nun habe ich mir gedacht erzeuge ich eine Mutter Klasse TProgramm, damit ich das nur einmal machen muss. An die Klasse TProgramm übergebe ich nun immer die proceduren die dann ausgeführt werden.

Übergeben würde ich die proceduren so:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FProcedure1:=Edit(Sender);
  FProcedure2:=Exit(Sender);
  FProcedure3:=New(Sender);
  FProcedure4:=Delete(Sender);

  Form1.OnKeyDown:=KeyDown;
end;
Ist sowas möglich wie ich vorhabe??? Das ganze soll kein weiteren sinn haben. Sondern nur ein bisschen Quellcode einsparen.

MFG Christian18
Hallo, da gibt es eine ganze Reihe von Möglichkeiten, die OO-gerechteste ist meiner Meinung nach die verwendung virtueller Methoden: du definierst Edit bereits in TProgram, aber virtuell, und überschreibst sie in allen Abkömmlingen. Das Übergeben von prozeduralen Parametern ist dabei völlig überflüssig.

Nur macht das Ganze so oder so keinen Sinn: wenn du 25 verschiedene Versionen hast, dann musst du 25 Prozeduren schreiben, ganz egal, wo du sie unterbringst. Alles was du dir bisher überlegt hast, ist sinnlose Mehrarbeit. Die in Handbüchern erläuterte Verwendung virtueller Methoden dient auch nicht der Ersparnis, sondern der Einheitlichkeit - Draw zeichnet beim Typ TRectangle eben ein Rechteck und bei TCircle einen Kreis, der Befehl ist einheitlich, was dem Programmierer das Gedächtnis schont, aber schreiben muss er natürlich 2 Methoden.

Gruss Reinhard
  Mit Zitat antworten Zitat