![]() |
Procedure Problem
Hi,
Ich hätte da ein Probleeem. Also ich habe eine Variable A
Delphi-Quellcode:
und angenommen
var A: TProcedure;
Delphi-Quellcode:
Ich habe dann eine Klasse die soll dann eine Procedure enthalten die so aussieht wie die aus A. Versteht ihr was ich meine ?
A = procedure Test(Abc: Integer);
Wie mach ich das ? Gruß Neutral General |
Re: Procedure Problem
öhm.... so?
Delphi-Quellcode:
type
TMyProc = procedure(param: Integer) of object; TMyClass = class procedure SomeProc(param: Integer); end; var Proc: TMyProc; Proc := TMyClass(nil).SomeProc; //das funzt jetzt natürlich nicht^^ |
Re: Procedure Problem
Naja ich erklärs nochmal anders:
Delphi-Quellcode:
type
TKlasse = class(Egal) private A: TProcedure; public constructor Create(...); override; procedure A; // Da soll dann die Procedure stehn die im Konstruktor zugewisen wurde... end; constructor Create(...); begin inherited Create(...); A:= *Irgendwas* // Aber oft verschieden ... end; |
Re: Procedure Problem
Na an sich war doch der Ansatz von DGL-Luke gar nicht so falsch.
Delphi-Quellcode:
[edit]
type
TMyProc = procedure(int : Integer) of object; TMyProcInvoker = class(TObject) public procedure doFoo(int : Integer); end; TMyClass = class(TObject) public mp : TMyProc; end; implementation procedure TMyClass.FormCreate(Sender: TObject); var buffer : TMyProcInvoker; begin buffer := TMyProcInvoker.Create; self.mp := buffer.doFoo; end; ein end vergessen! [/edit] |
Re: Procedure Problem
Also das Problem das die Procedure ja mal so aussehn kann:
Delphi-Quellcode:
und ein anderes mal
procedure Ka1(Bla: Integer);
Delphi-Quellcode:
und dann will ich:
procedure Hallo(S: String; Abc5: Pointer);
Delphi-Quellcode:
:mrgreen:
var Test: TMyClass;
procedure TForm1.OnCreate(Sender: TObject); begin Test := TMyClass.Create; Test.Procedure(50); // wenn Procedure = Ka1 ist Test.Procedure('Test',@Form1); // wenn Procedure = Hallo ist end; |
Re: Procedure Problem
NEIN, das geht auf gar keinen fall.
Allerdings gibt es dafür overload... Nuja...
Delphi-Quellcode:
Un jetzt bitte sehr erzeugen und SprungInsUngewisse aufrufen:
type
TZweigProc = procedure of object; TMyAbZweig = class public SprungInsUngewisse: TZweigProc; contructor Create; private procedure A; procedure B; procedure C; end; implementation procedure TMyAbZweig.Create; begin if RandSeed = 0 then Randomize; case Random(3) of 0: SprungInsUngewisse := A; 1: SprungInsUngewisse := B; 2: SprungInsUngewisse := C; end; end; procedure TMyAbzweig.A; begin ShowMessage('A'); end; procedure TMyAbzweig.B; begin ShowMessage('B'); end; procedure TMyAbzweig.B; begin ShowMessage('B'); end;
Delphi-Quellcode:
Kannst du damit was anfangen?
with TMyAbZweig.Create do
SprungInsUngewisse; |
Re: Procedure Problem
nein leider nicht weil meine Proceduren immer Parameter haben und sie auch im Quelltext wenn man z.B in deinem Beispiel Sprunginsungewisse aufruft erkennen muss welche es ist und auch entsprechend Parameter angeben können soll.. aber das geht glaub ich schon von der Logik her nicht.. der Compiler kann ja nicht vorher wissen was nachher zugewiesen wird...naja eventuell schon bei mir aber so schlau ist der leider nicht -.-^^
|
Re: Procedure Problem
ähm...
Delphi-Quellcode:
procedure a(s: string); overload;
procedure a(s: string; x: Integer); overload; procedure a(x: Integer; p: Pointer); overload;
Delphi-Quellcode:
Das ist so ungefähr die Funktionsweise von overload.
a('blubb',4); //jetzt wird die zweite funktion aufgerufen
Zitat:
Delphi-Quellcode:
So besser?
type
TIntToBool = function(param: Integer): Boolean; |
Re: Procedure Problem
ne :mrgreen:
Ich versuche ja gerade Overload zu vermeiden.. Wenn ich overload benutze ist mein ganzes vorhaben schwachsinnig :mrgreen: |
Re: Procedure Problem
:roll:
Dann erklär uns halt dein Vorhaben... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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