Rückgabewert von Fenster

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mr.mc.mauser
Beiträge: 33
Registriert: Di 8. Jun 2010, 19:38

Rückgabewert von Fenster

Beitrag von mr.mc.mauser »

Hallo,

stehe im Moment bisserl Arg auf dem Schlauch ;-)
Ist es möglich aus einem "Unterfenster" Daten in das Hauptfenster zu übertragen, wenn ja wie ?
Beispiel (wirklich nur exemplarisch, ich hoffe es veranschaulicht alles):
Hauptprogramm:
<Button> -> onClick öffne Fenster
<Text1>
<Text2>
<Text3>

Fenster:
<Editfield1>
<Checkbox1>
<Editfield2>
<Button> -> onClick schließe Fenster und 'Zeigewerte'

(Öffnen und schließen klappt, nur das Zeigewerte eben nicht, da steh ich voll auf dem Schlauch, absolut keine Idee)

Zeigewerte (in Hauptprogramm ?):
<Text1> = Wert<Editfield1>
<Text2> = Wert<Checkbox1>
<Text3> = Wert<Editfield2>

Gruß
Robert

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Rückgabewert von Fenster

Beitrag von theo »

Du kannst von einer Unit auf die Daten der anderen zugreifen.
Vielleicht verstehe ich dein Problem nicht ganz.

Code: Alles auswählen

implementation
uses Unit1;
...
Form1.Memo1.Text:=Form2.Edit1.Text; //Form2 ist nur zur Verdeutlichung

mr.mc.mauser
Beiträge: 33
Registriert: Di 8. Jun 2010, 19:38

Re: Rückgabewert von Fenster

Beitrag von mr.mc.mauser »

hab mich bisserl blöd ausgedrückt:
hier mal der Demo Quelltext

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Unit2;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure machwas;
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;
 
procedure TForm1.machwas;
begin
    Label1.Caption:='Fenster 2 geklickt';
end;
 
end.

Code: Alles auswählen

unit Unit2; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form2: TForm2; 
 
implementation
 
{$R *.lfm}
 
{ TForm2 }
 
procedure TForm2.Button1Click(Sender: TObject);
begin
    // rufe Irgendwie die Procedure Tform1.machwas auf
 
  	Form2.Close;
end;
 
end.
 
Wenn ich in Unit2 die Unit1 bei Uses einbinde gibt es ja einen Fehler:

Code: Alles auswählen

unit2.pas(8,83) Fatal: Circular unit reference between Unit2 and Unit1
Gruß
Robert

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Rückgabewert von Fenster

Beitrag von corpsman »

Code: Alles auswählen

unit Unit2; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form2: TForm2; 
 
implementation
 
Uses Unit1;// mus unter Implementation stehen sonst hast du ne Zirkuläre Abhängigkeit die nicht aufgelöst werden kann.
 
{$R *.lfm}
 
{ TForm2 }
 
procedure TForm2.Button1Click(Sender: TObject);
begin
    // rufe Irgendwie die Procedure Tform1.machwas auf
     Form1.Machwas;
     Form2.Close;
end;
 
end.
--
Just try it

mr.mc.mauser
Beiträge: 33
Registriert: Di 8. Jun 2010, 19:38

Re: Rückgabewert von Fenster

Beitrag von mr.mc.mauser »

Danke, genau das habe ich gesucht.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Rückgabewert von Fenster

Beitrag von Bauer321 »

da hab ich auch nochmal kurz ne Frage, dass das so sein muss hab ich auch irgendwann mal festgestellt aber was ist eigentlich eine Zirkuläre abhängigkeit?
www.mcpatcher.net | www.hoeper.me

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: Rückgabewert von Fenster

Beitrag von MAC »

Wenn du 2 Units hast und beide ganz oben bei uses die anderen Units eingebudnen haben, dann passiert folgendes:

Der FPC (Compiler) will jetzt das Projekt kompilieren.
Er fängt mit der Unti 1 an.
Dort steht aber ein haufen Uses: Da diese in Unit1 benötigt werden müsssen diese vorher abgearbeitet werden.
Also arbeitet er die 5 standartunits ab und kommt zu unit2.
Diese will er auch abarbeiten. Aber bei Unit2 steht das Unit1 benötig wird. Das heißt er muss zuerst Unit1 abarbeiten bevor er Unit2 bearbeiten kann.
Unit1 will aber das er zuerst Unit2 macht u.s.w

Deshalb kann nur 1 Unit ganz oben eine Andere als Abhängigkeit deklarieren.
Alle anderen müssen im implementation treil deklariert sein (Dann haben diese leicht einschränkungen, ka genau welche ... )

Code: Alles auswählen

Signatur := nil;

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Rückgabewert von Fenster

Beitrag von Socke »

MAC hat geschrieben:Alle anderen müssen im implementation treil deklariert sein (Dann haben diese leicht einschränkungen, ka genau welche ... )
Die Einschränkung ist offensichtlich: Im Implementations-Teil kann diese Unit nicht verwendet werden, da die ganzen Klassen und Typen nicht bekannt sind.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten