Zwischen zwei units hin und her kommunizieren
Zwischen zwei units hin und her kommunizieren
Liebe Lazarus-Forum,
wie kann ich zwischen zwei Units hin und her kommunizieren?
Ich will eine Unit aus einer anderen aufrufen um dann wiederum mit dieser Unit die Prozeduren der anderen Unit und deren Objekte zu verwenden. geht das irgendwie?
wie kann ich zwischen zwei Units hin und her kommunizieren?
Ich will eine Unit aus einer anderen aufrufen um dann wiederum mit dieser Unit die Prozeduren der anderen Unit und deren Objekte zu verwenden. geht das irgendwie?
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Zwischen zwei units hin und her kommunizieren
Unit1:
Unit2:
Wenn die Unit durch uses verbunden ist, geht das ganz einfach. Wichtig ist, dass eine unit erst im implementation-Teil eingebunden ist. Wenn du auf globale Objekte der einen unit zugreifen willst, solltest du den Namen der Unit davo schreiben, z.B. Unit1.testobjekt.tolleMethode();
Code: Alles auswählen
type TXYZ = class
[blah]
var xy: TXYZ;
[...]
procedure TuWas;
[...]
implementation
uses Unit1;
procedure bumm()
begin
unit2Call();
end;
Code: Alles auswählen
uses Unit1;
[..]
procedure unit2Call();
[...]
procedure machWas();
begin
unit1.xy:=TXYZ.Create;
TuWas();
end;
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Zwischen zwei units hin und her kommunizieren
wenn dir das zu kompliziert seien sollte
. (mir wäre es zu kompliziert, weil wo ich angefangen habe wäre mir das zu kompliziert (ich weis zwar nicht wieviel erfahrung du mit lazarus hast, aber ich nehme mal an recht wenig
).)
@ Targion: nichts gegen den post, jedoch finde ich den leicht kompliziert, also geb ich mal ne ganz einfache ^^ anleitung.
Du hast 2 Units, zur einfachheit halbe 2 Formulare mit jeweils 1 Button.
dann sieht das erste so aus:
und du schreibst hinter implementation
"uses Unit2;" wie Targion es schon gesagt hat. und bei unit2 schreibst du eben "uses Unit1;".
also
und jetzt kannst du auf die andere Unit zugreifen mit
wobei du eigentlich das unit2 weglassen kannst...
Wenn du selbst definierte proceduren (also jetzt kein Button1.Click oder so etwas)hast
dann schreibst du z.b. in unit2:
der Vorteil ist das man beim Aufrufen einfach den Namen schreiben kann also "umbenennen" und nicht "Form2.umbenennen" oder soetwas


@ Targion: nichts gegen den post, jedoch finde ich den leicht kompliziert, also geb ich mal ne ganz einfache ^^ anleitung.
Du hast 2 Units, zur einfachheit halbe 2 Formulare mit jeweils 1 Button.
dann sieht das erste so aus:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
//genau hier ...................................................................//hier.................................
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
initialization
{$I unit1.lrs}
end.
"uses Unit2;" wie Targion es schon gesagt hat. und bei unit2 schreibst du eben "uses Unit1;".
also
Code: Alles auswählen
implementation
uses Unit2;
{ TForm1 }
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.Form2.Button1.Caption := 'hihihi das ist toll';
end;
Wenn du selbst definierte proceduren (also jetzt kein Button1.Click oder so etwas)hast
dann schreibst du z.b. in unit2:
Code: Alles auswählen
type
TForm2 = class(TForm)
private
{ private declarations }
public
{ public declarations }
end;
procedure umbenennen(neuername:string); // hier procedure wird hier erwähnt
var
Form2: TForm2;
implementation
procedure umbenennen(neuername:string); // und hier kommt dann der code der ausgeführt werden soll.
begin
Form1.Button1.Caption := neuername;
end;
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
umbenennen('das hier ist jetzt der neue Text...');
end;
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Zwischen zwei units hin und her kommunizieren
Ich war da halt etwas faul...
@karkov: Hast du es denn schon hinbekommen?

@karkov: Hast du es denn schon hinbekommen?
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Zwischen zwei units hin und her kommunizieren
die gute alte Faulheit...
Code: Alles auswählen
Signatur := nil;
Re: Zwischen zwei units hin und her kommunizieren
Hatte es auch so kapiert, mir war einfach entfallen, wo man die Unit implementieren kann, danke!!! 
