Entwickler-Ecke
Sonstiges (Delphi) - mehrere Units Verknüpfen
seppel86 - Sa 07.02.04 16:22
Titel: mehrere Units Verknüpfen
Hi,
ich hab folgendes Problem. In meinem Programm benutze ich 2 Units. Die Prozeduren aus unit2 muss ich in unit1 verwenden, also hab ich in unit1 stehen uses unit2.
In unit2 sind die Proceduren in der Klasse TForm1 gespeichert.
Wenn ich die Prozedur X nun folgendermaßen in unit1 aufrufe:
unit2.TForm1.X(...); kriege ich folgenden Fehler: This form of method call only allowed for class methods.
Was mach ich falsch?
tomtom62 - Sa 07.02.04 16:32
Das "T" ist zuviel... :wink:
seppel86 - Sa 07.02.04 16:39
Hab ich auch schon probiert. Der fragt mich dann, ob er uses unit1 in die unit1 hinzufügen soll, wenn ichs mach sagt er dass sich die Unit nicht selbst benutzen kann, wenn nicht kompiliert er nicht.
tomtom62 - Sa 07.02.04 16:42
Hast Du in unit2 unit1 auch drin stehen ?
Dann schreib das uses unit2 mal in unit1 unterhalb von implementation nicht direkt oben..
seppel86 - Sa 07.02.04 16:46
da hab ichs auch stehen. wenn ichs unters interface reinsetze erkennt er das X aus der Prozedur als undeklarierte Variable an.
tomtom62 - Sa 07.02.04 16:49
Poste mal die beiden Unitköpfe inkl. TForm1...
seppel86 - Sa 07.02.04 16:52
Das ist Unit1:
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: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Grids;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; StringGrid1: TStringGrid; Image1:TImage; Label4: TLabel; procedure FormCreate(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; xglobal,yglobal,b :Integer;
a:array [1..9] of Integer; spieler1,spieler2 :String; implementation
uses unit2, Unit1; |
Das ist Unit2
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Grids;
type Tform1 = class(TForm) image1:TImage; StringGrid1:TStringGrid;
procedure Kreis(Sender: TObject); procedure X(Sender: TObject); procedure Spieler1Win(Sender: TObject); procedure Spieler2Win(Sender: TObject); end; |
die Prozeduren selbst brauch ich nicht posten,oder?
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt
tomtom62 - Sa 07.02.04 17:00
Zitat: |
implementation
uses unit2, Unit1;
|
Was ist das ?. Wieso "benutzt" Du Unit1 in Unit1 ??
seppel86 - Sa 07.02.04 17:02
hab ich oben erklärt. wenn ich unit2.form1.X schreibe weill der die automatisch da reinsetzen (funzt natürlich nicht). Mir ist klar das das da nix zu suchen hat.
tomtom62 - Sa 07.02.04 17:14
Zuerst einmal kann man in einem Projekt nicht zwei Formulare mit dem gleichen Namen haben. Ändere also einen ab..
Dann muss dieses uses Unit1 raus...
Dann solltest Du diese Prozedur X im Public von TFormxx deklarieren, weil man sonst nicht drauf zugreifen kann...
GSE - Sa 07.02.04 17:14
So wird es nicht funktionieren.
Die Formulare der beiden Units heißen gleich! Das geht in einem Projekt aber nicht. Also eins umbenennen und dann erstmal unit1 und unit2 komplett aus den uses löschen. Dann den Aufruf so gestalten:form1.X(...);Also das Unit1 weglassen.
Dann Kompilieren jetzt auf ja drücken, wen er fragt, ob er die Unit in die uses schreiben soll. Sollte funktionieren.
[edit]Mist. Wide rmal zu spät![/edit]
mfg
GSE
seppel86 - Sa 07.02.04 17:29
Funzt auch nicht. Das macht absolut keinen unterschied.
GSE - Sa 07.02.04 20:11
Zitat: |
Dann solltest Du diese Prozedur X im Public von TFormxx deklarieren, weil man sonst nicht drauf zugreifen kann... |
Hast du das schon gemacht?
Also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type Tform1 = class(TForm) image1:TImage; StringGrid1:TStringGrid; private public procedure Kreis(Sender: TObject); procedure X(Sender: TObject); procedure Spieler1Win(Sender: TObject); procedure Spieler2Win(Sender: TObject); end; |
mfg
GSE
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!