Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktion mit variabler Übergabe (https://www.delphipraxis.net/50789-funktion-mit-variabler-uebergabe.html)

VT-DA 31. Jul 2005 22:30


Funktion mit variabler Übergabe
 
Hi,

Gibt es irgend eine Möglichkeit bei Aufruf einer Funktion die Parameter variabel zu machen?
z.B. ich möchte mir eine Funktion schreiben die alle Fenster/Memos/buttons etc freigeben kann.
Doch leider müsste ich ja dann für jedes gadget(buttons/Forms/Memos etc.) eine Funktion schreiben obwohl ja alle mit handel.free freigegeben werden können.
Ich hoffe ich habe mich verständlich ausgedrückt. :)

Mfg

dizzy 31. Jul 2005 22:47

Re: Funktion mit variabler Übergabe
 
Du kannst alles auf TObject casten, welches der gemeinsame Vorfahre aller Klassen in Delphi ist, und bereits die MEthode Free implementiert.
Delphi-Quellcode:
procedure FreeThis(obj: TObject);
begin
  obj.Free;
end;

// Aufruf:
var
  btn: TButton;
begin
  btn := TButton.Create(nil);
  FreeThis(TObjcet(btn));
end;
Der Cast im Aufruf kann imho auch weg bleiben - habs grad nicht getestet, aber eigentlich sollte es auch gehen.


Gruss,
Fabian

VT-DA 1. Aug 2005 10:23

Re: Funktion mit variabler Übergabe
 
Hi,

hmm. Klappen tuts irgendwie nicht. Das Problem ist, dass ich die procedure aus einer DLL hole und ich es dann nicht so übergeben kann wie Sie es in dem Beispiel gezeigt haben. :?
Hat vielleicht jemand noch ne andere Idee?

Mfg

Flocke 1. Aug 2005 10:46

Re: Funktion mit variabler Übergabe
 
Zitat:

Zitat von VT-DA
z.B. ich möchte mir eine Funktion schreiben die alle Fenster/Memos/buttons etc freigeben kann.
Doch leider müsste ich ja dann für jedes gadget(buttons/Forms/Memos etc.) eine Funktion schreiben

Nein, musst du nicht.

Denn ein TForm ist auch ein TWinControl, genau wie ein TButton oder ein TEdit oder ein TMemo. Alle Formularkomponenten, die die Eigenschaft "Handle" haben, stammen davon ab. Du musst deine Routine also nur für den "kleinsten gemeinsamen Vorfahren" all dieser Komponenten schreiben, in diesem Fall für "TWinControl".

VT-DA 1. Aug 2005 10:58

Re: Funktion mit variabler Übergabe
 
Hi,

hmm. Wenn du meinst TWinControl als übergabe Parameter zu nehme, dass geht nicht.
Wenn du aber meinst das ich einfach nur das Fenster freigeben muss, das geht leider auch nicht weil ich manchmal nur ein Memo oder nur Button freigeben möchte und nicht alles aufeinmal.

Delphi-Quellcode:
procedure FreeThis(obj: TWinControl); stdcall;
begin
  obj.Free;
end;
So gehts auf jeden fall nicht. Ist genau das gleiche wie TObject.

Mfg

Flocke 1. Aug 2005 11:03

Re: Funktion mit variabler Übergabe
 
Zitat:

Zitat von VT-DA
Wenn du meinst TWinControl als übergabe Parameter zu nehme, dass geht nicht.

...und WAS GENAU geht daran nicht (wenn du immer so antwortest muss deine Nase schon ziemlich lang sein von Dingen, die da rausgezogen werden müssen ... :roll: )

VT-DA 1. Aug 2005 11:04

Re: Funktion mit variabler Übergabe
 
Hi,

"blitzcc.exe hat ein Problem blabla...Programm musss beendet werden..."
Was soll man dazu groß sagen? :roll:

Mfg

VT-DA 1. Aug 2005 11:51

Re: Funktion mit variabler Übergabe
 
Hi,

Okay. Sorry. Es lag nicht an der Funktion sondern an etwas anderem. Danke.

Mfg

BlackJack 1. Aug 2005 18:30

Re: Funktion mit variabler Übergabe
 
Zitat:

Zitat von Flocke
Du musst deine Routine also nur für den "kleinsten gemeinsamen Vorfahren" all dieser Komponenten schreiben, in diesem Fall für "TWinControl".

naja der "_kleinste_ gemeinsame Vorfahre" wäre ja wohl TObject, oder? ;)
und wie gesagt sollte ein TObject als Parameter reichen; wenn ein objekt mit einem anderen typ als TObject übergeben wird, wird ja eh dessen Free; aufgerufen und nicht das von TObject.

Khabarakh 1. Aug 2005 20:20

Re: Funktion mit variabler Übergabe
 
Zitat:

Zitat von BlackJack
und wie gesagt sollte ein TObject als Parameter reichen; wenn ein objekt mit einem anderen typ als TObject übergeben wird, wird ja eh dessen Free; aufgerufen und nicht das von TObject.

Nö. Free bleibt gleich, Destroy wird von den Nachfahren überschrieben :zwinker: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.
Seite 1 von 2  1 2      

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