Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prozeduren aus fremden units einbinden


Phraser - Sa 10.05.03 20:29
Titel: Prozeduren aus fremden units einbinden
Hallo!

Eine sicherlich einfache (und zugegebenermaßen dumme Frage), aber ich bin Neuling:

Wie kann ich eine spezielle Prozedur, die ich in einer Unit selbst geschrieben habe, in einer anderen (zweiten) Unit aufrufen, ohne sie dort noch einmal neu zu schreiben?

Ich glaube, es hat was mit uses zu tun, aber keine Ahnung wie ich es realisieren soll :?

Danke!


Christian S. - Sa 10.05.03 20:37

Wenn Du die Prozedur / Funktion in Unit1 geschrieben hast, so schreibst Du Unit1 einfach in die LIste der Untis in der USES-Klausel und Du kannst die Prozedur / Funktion benutzen. Du musst sie allerdings im Interface-Teil von Unit1 deklariert haben, damit Du sie auf diese Weise in einer anderen Unit verwenden kannst.


Phraser - So 11.05.03 13:06

Danke für die Antwort!

Ich habs mal so versucht, wie es beschrieben wurde, aber es funktioniert noch nicht. Hier der Auszug aus der unit 1 (mit einem sehr einfachen Beispiel):


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
unit Unit1;

interface

procedure zahl;

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;


{$R *.DFM}

procedure zahl;
begin
form2.label1.caption := inttostr(strtoint(form2.label1.caption) + 1);
end;


-> Deklaration erwartet, aber uses gefunden

:?: :?: :?:


Popov - So 11.05.03 14:48

Es gibt im Interface-Teil eine Reihenfolge die eingehalten werden muß. Zuerst die Auflistung der Units und erst dann weitere Deklarationen. Bei dir ist somit die Reihenfolge falsch:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; 

type 
  TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end; 

  procedure zahl; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

var 
  Form1: TForm1; 

implementation 

uses Unit2; 


{$R *.DFM} 

procedure zahl; 
begin 
  form2.label1.caption := inttostr(strtoint(form2.label1.caption) + 1); 
end;


In diesem Fall kannst du dir das Leben ein wenig leichter machen. Der Vorteil von der nächsten Methode ist, daß du es in das Formularobjekt einbindes:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; 

type 
  TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
    procedure zahl; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  end; 

var 
  Form1: TForm1; 

implementation 

uses Unit2; 


{$R *.DFM} 

procedure Form1.zahl; 
begin 
  label1.caption := inttostr(strtoint(label1.caption) + 1); 
end;


Phraser - Mo 12.05.03 20:36

Vielen Dank an euch, es klappt jetzt! :)