Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Procedure "public-en" ...


KeinePanik - Fr 03.01.03 19:08
Titel: Procedure "public-en" ...

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
[...]
var {meine Variablen}

procedure sowieso;

implementation
[...]

procedure sowieso;
begin
showmessage('irgendwas');
end;


solang ich die Prozedur dort lasse wo sie ist, ist alles OK ... Nun will ich diese Prozedur aber auch von einer anderen Form aufrufen z.B. von Form3 ... wenn ich die Prozedur jetzt von Form3 so aufrufe

Quelltext
1:
form1.sowieso;                    

wird sie nicht gefunden ...

Setze ich die Deklaration der Prozedur jetzt in den "Public-Bereich" funktioniert das ganze auch nicht ...

Wie deklariere ich die Prozedur nun so, dass ich sie auch von anderen "Forms" aufrufen kann ?? ...


DaFox - Fr 03.01.03 19:32

Hi!


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
[...] 
public
  procedure sowieso; 
[...]

implementation 
[...] 

procedure Form1.sowieso; 
begin 
showmessage('irgendwas'); 
end;


Gruß,
Markus


AndyB - Fr 03.01.03 20:05

Ich glaube nicht, dass KeinePanik eine Klasse einsetzen will.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
unit MyUnit;
interface
uses Dialogs;
{ Hier die Deklarationen der global verfügbaren Variablen, Konstaten, Typen, Klassen und Funktionen. Bei Funktionen aber nur der Funktionskopf. In diesem Bereich wird die Schnittstelle (=Interface) bereitgestellt. }

procedure MyFunc(const s: String);

implementation

{ Hier werden die für diese Unit "privaten" Variablen, Konstanten, Typen, Klassen deklariert. Die Funktionen und Prozeduren werden hier "ausprogrammiert" (=implementiert => implementation) }

procedure MyFunc(const s: String);
begin
  ShowMessage(s);
end;

end.


DaFox - Fr 03.01.03 20:19

AndyB hat folgendes geschrieben:
Ich glaube nicht, dass KeinePanik eine Klasse einsetzen will.

Prima, dann ist die Antwort noch kürzer! :D

"Unit1" siehe Dein Code, KeinePanik.
"Unit2":

Quelltext
1:
2:
uses
  Unit1;


Gruß,
Markus


KeinePanik - Sa 04.01.03 00:41

@dafox:

Genauso hab ich es ausprobiert ... rufe ich jetzt aber die Prozedur von z.B. Form3 auf, ist sie unbekannt bzw. "nicht genügend Forward - bzw. external-Deklaration ... ...

@andy:

Ich will keine Klasse einsetzen, sondern einfach meine Prozedur, die in Form1 deklariert ist und auch der "quelltext" der Prozedur steht, von einem anderen Formular (Form3) aufrufen ... das "showmessage" ist nur ein einfaches Beispiel, um zur Laufzeit zu erkennen, dass die Prozedur tatsächlich aufgerufen wird ... in der eigentlichen Prozedur steht was anderes ... ausserdem verlangt die prozedur keine Parameter ...

nochmal @dafox :

Mit den USes hab ich schon beachtet ... also bei form3 steht in den Uses auch die Form1 ... also daran liegt es auch nicht ...


AndyB - Sa 04.01.03 01:51

KeinePanik hat folgendes geschrieben:
@andy:
Ich will keine Klasse einsetzen

Und was habe ich geschrieben?
AndyB hat folgendes geschrieben:
Ich glaube nicht, dass KeinePanik eine Klasse einsetzen will.


KeinePanik - Sa 04.01.03 02:56

@andy:

Sorry .... überlesen ... entschuldigung ,....

Aber dein Code bringt auch mnicht wirklich weiter, da ich ihn (in abgewandelter Form) so schon gepostet habe und er eben so nicht funktioniert ....


Tino - So 05.01.03 00:49

KeinePanik hat folgendes geschrieben:
Ich will keine Klasse einsetzen, sondern einfach meine Prozedur, die in Form1 deklariert ist

Ist die Procedure nun in einer Klasse deklariert oder nicht? Wenn Du diese in tForm1 deklariert ist ist die Procedure Bestandteil der Klasse tForm1 und muss dann so implementiert werden:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Type 
  tForm1 = {...}
    public
      procedure test;
    end;

{...}

procedure tForm1.test;
begin
end;

Aufgerufen wird die Procedure dann zum Beispiel so:

Quelltext
1:
Form1.test;                    


Gruß
TINO