Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Übergabe von Parameter an Proceduren in unterschiedlichen Units (https://www.delphipraxis.net/182414-uebergabe-von-parameter-proceduren-unterschiedlichen-units.html)

Ykcim 22. Okt 2014 14:59


Übergabe von Parameter an Proceduren in unterschiedlichen Units
 
Hallo Zusammen,

ich bin gerade auf dünnem Eis, weil ich mich mit dieser Art der Zuweisung nicht gut auskenne. Daher bitte ich Euch um Hilfe.
Das Problem ist, dass ich einer Procedure Parameter aus einer anderen Übergeben möchte. Die beiden Proceduren sind nicht in der gleichen Unit, daher gestaltet sich der Aufruf wie folgt:

Auslösende Unit:
Delphi-Quellcode:
type
   TEvent = procedure(Sender: TObject) of object;
   TFrame_Uebersicht = class(TFrame)
...


private
      { Private-Deklarationen }

      FOnFilter: TEvent;
   public
      { Public-Deklarationen }
      property OnFilter: TEvent read FOnFilter write FOnFilter;
   end;

implementation

{$R *.dfm}

procedure TFrame_Uebersicht.Grid_UebersichtClickCell(Sender: TObject; ARow,
  ACol: Integer);
begin
   if (Assigned(FOnFilter)) and (ARow=1) then
      FOnFilter(Grid_Uebersicht); //An dieser Stelle möchte ich die Parameter ACol und ARow mit übergeben.
end;
In meiner Hauptunit sieht das Ganze dann so aus:
Delphi-Quellcode:
procedure TMain.FormCreate(Sender: TObject);
begin
   Frame_Uebersicht1.OnFilter:= Filter_Actions;
end;

procedure TMain.Filter_Actions(Sender: TObject);
var  SG: TAdvStringGrid;
begin
   if Sender is TAdvStringGrid then begin
      SG:= Sender as TAdvStringGrid;
      Set_Filter(SG); //An diese Procedure möchte ich die Variablen ACol und ARow übergeben
      Apply_Filter(SG);
   end;
end;
Ich hoffe, dass das Problem mit der Kommentierung im Code nachvollziehbar ist.

Würde mich freuen, wenn jemand mir da die Zusammenhänge und Möglichkeiten zeigen würde.

Vielen Dank
Patrick

Uwe Raabe 22. Okt 2014 15:25

AW: Übergabe von Parameter an Proceduren in unterschiedlichen Units
 
Erweitere doch die Deklaration von Event:

Delphi-Quellcode:
TEvent = procedure(Sender: TObject; ARow, ACol: Integer) of object;

Ykcim 22. Okt 2014 15:38

AW: Übergabe von Parameter an Proceduren in unterschiedlichen Units
 
Hallo,

vielen Dank für den Hinweis!!!

Ich habe es jetzt so probiert:

Auslösende Unit:
Delphi-Quellcode:
type
   TEvent = procedure(Sender: TObject) of object;
   TEvent_Filter = procedure (Sender: TObject; ACol,ARow: integer);
   TFrame_Uebersicht = class(TFrame)
...
 private
      { Private-Deklarationen }
      FOnFilter: TEvent_Filter;
   public
      { Public-Deklarationen }
      property OnFilter: TEvent_Filter read FOnFilter write FOnFilter;
   end;

implementation

{$R *.dfm}

procedure TFrame_Uebersicht.Grid_UebersichtClickCell(Sender: TObject; ARow,
  ACol: Integer);
begin
   if (Assigned(FOnFilter)) and (ARow=1) then
      FOnFilter(Grid_Uebersicht, ACol, ARow);
end;
In der Hauptunit:

Delphi-Quellcode:
procedure TMain.FormCreate(Sender: TObject);
begin
   Frame_Uebersicht1.OnFilter:= Filter_Actions; //hier wird ein Fehler ausgelöst
end;

procedure TMain.Filter_Actions(Sender: TObject; ACol, ARow: integer);
var  SG: TAdvStringGrid;
begin
   if Sender is TAdvStringGrid then begin
      SG:= Sender as TAdvStringGrid;
      Set_Filter(SG);
      Apply_Filter(SG);
   end;
end;
In der TMain.FormCreate wird ein Fehler ausgelöst:
Delphi-Quellcode:
[DCC Fehler] MainUnit.pas(915): E2009 Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger'
Kannst Du mir sagen, was ich falsch mache?

Danke
Patrick

Jumpy 22. Okt 2014 15:48

AW: Übergabe von Parameter an Proceduren in unterschiedlichen Units
 
Ich vermute jetzt mal, das TEvent_Filter auch "of Object" braucht?

DeddyH 22. Okt 2014 15:51

AW: Übergabe von Parameter an Proceduren in unterschiedlichen Units
 
Da vermutest Du völlig korrekt.

Ykcim 22. Okt 2014 15:53

AW: Übergabe von Parameter an Proceduren in unterschiedlichen Units
 
Die sch... Flüchtigkeitsfehler!!!:wall:

Jetzt scheint es zu klappen.

Vielen Dank
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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