| Autor |
Beitrag |
delphijanka
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 18:55
wie rufe ich eine Prozedur aus einem anderen Unit auf?
Danke.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Do 24.07.08 19:00
1. Die prozedur muss im interface-Abschnitt ihrer unit deklariert sein - sonst geht es nicht.
2. Du musst die unit in deine uses-Klausel aufnehmen
3. Dann kannst du die Prozedur aufrufen.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 19:05
Genau Punkt (1) habe ich nicht, da ich nicht weiss wie es geht. Mit
interface
procedure xxx;
kommt ein Fehler.
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.07.08 19:14
delphijanka hat folgendes geschrieben: | | [...] kommt ein Fehler. |
Dann machst du da was falsch.
_________________ We are, we were and will not be.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 19:18
Wenn ich "procedure xxx;" direkt nach dem Wort "interface" schreibe, erscheint die Fehlermeldung "Deklaraton erwartet, aber USES gefunden".
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 24.07.08 19:22
Die Meldung kommt, weil du das Schlüsselwort uses nach einer Deklaration (eben deine Prozedur) in der Datei hast. Verschiebe also die gesamte uses-Klausel vor die Deklaration der Prozedur. Dann sollte das eigentlich klappen.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 19:24
Das ist wohl ein Witz. Meine Procedure steht irgendwo mittig im Quelltext, und uses SOLL zu Beginn stehen. Der Fehler liegt also woanders.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Do 24.07.08 19:28
Poste mal deinen Code dann haben wir das ganz schnell gelöst.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.07.08 19:35
Der Aufbau einer Unit ist grob so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Unit <Name>;
interface
uses <Liste mit Units>;
<Deklarationen von Funktionen und Prozeduren>
implementation
uses <Liste mit Units>; <Implementierung der oben deklarierten Funktionen und Prozeduren> |
_________________ We are, we were and will not be.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 19:36
Delphi-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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ExtCtrls, Unit2;
type TF = class(TForm) ... public procedure xxx; end;
var
F: TF;
implementation
{$R *.DFM}
procedure xxx; begin end;
... | Delphi-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:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit1;
type TFNeu = class(TForm) ... end;
var
FNeu: TFNeu;
implementation
{$R *.DFM}
procedure yyy; begin Unit1.xxx; end;
... |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.07.08 19:39
Äh, hast du lose Prozeduren, die du aufrufen willst, oder sind das Methoden einer Klasse? So, wie das Gerüst aussieht, solltest du dir nochmal ein paar Grundlagen zu Gemüte führen. 
_________________ We are, we were and will not be.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 19:41
ich verstehe deine ANtwort nicht. Was ist der Unterschied zwischen "losen" Proceduren und Methoden einer Klasse?
PS: Bei der Deklaration der "xxx"-Methode in der Unit1 habe ich auch "TF.xxx" ausprobiert - geht auch nicht.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Do 24.07.08 19:48
Gausi meint dass man auch units anlegen kann die Sammlungen von Prozeduren und Funktionen darstellen. So hatte ich dich auch verstanden. Aber mir scheint jetzt du hast einfach nur zwei Formulare, und möchtest aus form2 auf Methoden von Form1 zugreifen. Das Problem: du darfst nicht unit1 in die interface-uses von form2 packen, wenn unit2 schon in der interface-uses von form1 steht. Lösung: schreibe sie in die implementation-uses (--> Gausis Quelltext).
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.07.08 19:50
Zuerstmal dürfte schon Unit1 nicht kompiliert werden, da die Methode xxx nicht implementiert wird
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TF = class(TForm) ... public procedure xxx; end;
var F: TF;
implementation
{$R *.DFM}
procedure TF.xxx; begin end; |
In Unit 2 müsstest du dann per F.xxx auf die Prozedur zugreifen.
Eine "lose Prozedur" ist nicht Teil einer Klasse (in deinem Beispiel ist xxx eine Methode der Klasse TF), sondern steht einfach nur so da. Zum Beispiel sowas:
Delphi-Quelltext 1: 2: 3: 4:
| function PlusEins(a: Integer): Integer; begin result := a + 1; end; |
_________________ We are, we were and will not be.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Do 24.07.08 19:55
wow, das hat geklappt, anstatt Unit1.xxx sollte ich einfach F.xxx schreiben.
Danke allen für die Aufmerksamkeit, danke Gausi.
Komisch sehe ich jedoch die Struktur bei Delphi. "Form" an sich ist ja nur die sichtbare Oberfläche - wie ich das verstehe, aber die Units selbst enthalten den Code und stellen somit die Klassen dar die ich gegenseitig nutzen kann. Ich sehe Javasprache weit im Vorteil, was diese Strukturierung angeht.
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.07.08 20:00
Man muss ja nicht alles in einer Form programmieren. Man kann auch Klassen bauen, die keine Form haben, aber mit jede Menge Funktionen und Prozeduren drin. Und man kann klassenlose Funktionen und Prozeduren in eine Unit packen.
_________________ We are, we were and will not be.
|
|