Zwischen zwei units hin und her kommunizieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
karkov
Beiträge: 69
Registriert: Di 27. Okt 2009, 17:52

Zwischen zwei units hin und her kommunizieren

Beitrag von karkov »

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?

Targion
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

Beitrag von Targion »

Unit1:

Code: Alles auswählen

type TXYZ = class
[blah]
var xy: TXYZ;
[...]
procedure TuWas;
[...]
implementation
 uses Unit1;
 
procedure bumm()
begin
 unit2Call();
end;

Unit2:

Code: Alles auswählen

uses Unit1;
[..]
procedure unit2Call();
[...]
procedure machWas();
begin
  unit1.xy:=TXYZ.Create;
  TuWas();
end;

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();

MAC
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

Beitrag von MAC »

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:

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.


und du schreibst hinter implementation
"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 }


und jetzt kannst du auf die andere Unit zugreifen mit

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.Form2.Button1.Caption := 'hihihi das ist toll';
end;


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:

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;


der Vorteil ist das man beim Aufrufen einfach den Namen schreiben kann also "umbenennen" und nicht "Form2.umbenennen" oder soetwas

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;

Targion
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

Beitrag von Targion »

Ich war da halt etwas faul... :D
@karkov: Hast du es denn schon hinbekommen?

MAC
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

Beitrag von MAC »

die gute alte Faulheit...

Code: Alles auswählen

Signatur := nil;

karkov
Beiträge: 69
Registriert: Di 27. Okt 2009, 17:52

Re: Zwischen zwei units hin und her kommunizieren

Beitrag von karkov »

Hatte es auch so kapiert, mir war einfach entfallen, wo man die Unit implementieren kann, danke!!! :-)

Antworten