AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

procedure an Mutter Klasse übergeben

Ein Thema von Christian18 · begonnen am 11. Aug 2007 · letzter Beitrag vom 11. Aug 2007
Antwort Antwort
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 15:30
Hallo,

kann man ganze proceduren an die Mutter Klasse übergeben?
Delphi-Quellcode:
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;
so in etwa?? funktioniert aber leider nicht.

MFG Christian18
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 15:38
Ein paar Beispiele:
Delphi-Quellcode:
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
Jetzt sollte eigentlich alles klar sein.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 15:55
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.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#4

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 16:07
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
  Mit Zitat antworten Zitat
Reinhard Kern

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

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 16: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
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#6

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 20:35
Hallo,

hat jemand vieleicht ein kleines Beispiel für mich???
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#7

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 21:35
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:
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.
LG Chris
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: procedure an Mutter Klasse übergeben

  Alt 11. Aug 2007, 21:44
Delphi-Quellcode:
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.
Dazu nimmst du deinen alten Code für die andere Unit.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 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