![]() |
procedure an Mutter Klasse übergeben
Hallo,
kann man ganze proceduren an die Mutter Klasse übergeben?
Delphi-Quellcode:
so in etwa?? funktioniert aber leider nicht.
procedure TProgramm.Entscheide(p1, p2, p3 : TProcedure);
begin case i of 1 : p1; // Procedure 1 ausführen 2 : p2; // Procedure 2 ausführen 3 : p3; // Procedure 3 ausführen end; end; MFG Christian18 |
Re: procedure an Mutter Klasse übergeben
Ein paar Beispiele:
Delphi-Quellcode:
Jetzt sollte eigentlich alles klar sein.
p1, p2, p3: procedure; //ohne Parameter
p1, p2, p3: procedure(const a:integer; var b:double); //Parameter müssen gleichen Typ haben, dürfen aber anders heißen p1, p2, p3: function: integer; stdcall; //Funktion mit Aufrufkonvention stdcall p1, p2, p3: procedure (param1:string) of object; //of object heißt Methode |
Re: procedure an Mutter Klasse übergeben
Hallo,
ich habe das mal probiert. Funktioniert aber leider nicht. unit Unit2; interface
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TProgramm = class(TForm) procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private public FP1 : procedure; end; implementation procedure TProgramm.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if shift = [] then begin case Key of 27 : FP1; end; end; end; end.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Unit2; type TForm1 = class(TProgramm) procedure Neu(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Neu(Sender: TObject); begin ShowMessage('Hallo'); end; procedure TForm1.FormCreate(Sender: TObject); var p : procedure; begin FP1:=Neu; // Hier der fehler [Pascal Fehler] Unit1.pas(34): E2009 Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger' Form1.OnKeyDown:=KeyDown; end; end. |
Re: procedure an Mutter Klasse übergeben
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:
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.
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; Übergeben würde ich die proceduren so:
Delphi-Quellcode:
Ist sowas möglich wie ich vorhabe??? Das ganze soll kein weiteren sinn haben. Sondern nur ein bisschen Quellcode einsparen.
procedure TForm1.FormCreate(Sender: TObject);
begin FProcedure1:=Edit(Sender); FProcedure2:=Exit(Sender); FProcedure3:=New(Sender); FProcedure4:=Delete(Sender); Form1.OnKeyDown:=KeyDown; end; MFG Christian18 |
Re: procedure an Mutter Klasse übergeben
Zitat:
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 |
Re: procedure an Mutter Klasse übergeben
Hallo,
hat jemand vieleicht ein kleines Beispiel für mich??? |
Re: procedure an Mutter Klasse übergeben
Hallo,
so funktioniert es schonmal. Aber Neu muss so deklariert (procedure TForm1.Neu(Sender: TObject);) werden weil Neu auch ausgelöst werden soll wenn ein button geklickt wird. Ist das auch möglich???
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Unit2; type TForm1 = class(TProgramm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure Neu; begin ShowMessage('sdf'); end; procedure TForm1.FormCreate(Sender: TObject); begin pro:=Neu; Form1.OnKeyDown:=KeyDown; end; end.
Delphi-Quellcode:
LG Chris
unit Unit2;
interface uses Forms, Classes; type TProgramm = class(TForm) procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private public pro : procedure; end; implementation procedure TProgramm.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if shift = [] then begin case key of 27 : pro; end; end; end; end. |
Re: procedure an Mutter Klasse übergeben
Delphi-Quellcode:
Dazu nimmst du deinen alten Code für die andere Unit.
unit Unit2;
interface uses Forms, Classes; type TProgramm = class(TForm) procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private public pro : TNotifyEvent; end; implementation procedure TProgramm.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if shift = [] then begin case key of 27 : pro(self); end; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz