Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit 3 Formularen (https://www.delphipraxis.net/114909-problem-mit-3-formularen.html)

Lolzor 2. Jun 2008 19:11


Problem mit 3 Formularen
 
Ich hab erst vor kurzem angefangen mit Delphi 2005 zu programmieren und hoffe es bald zu beherschen

Jetzt habe ich aber ein Problem die Lage ist wie folgt:

Ich habe 3 Formulare in einem Projekt(VCL-Formularanwendung)

Formular 1 und 2 sollen per klick auf einen Button jeweils 1 Label.Caption (also Label1 und Label2)auf dem Formular3 verändern
Auf Formular 1 und 2 ist dabei jeweils ein Button.
Dann soll das 3. Formular mit den veränderten Captions angezeigt werden

Es funktioniert wenn ich nur 2 Formulare habe aber bei zahlen darüber funktioniert es nicht mehr

Ich hoffe meine Beschreibung reicht aus und ihr könnt mir helfen

Danke schonmal im voraus

mkinzler 2. Jun 2008 19:23

Re: Problem mit 3 Formularen
 
Wie sieht der Code mit 2 Formularen aus?

blackdead 2. Jun 2008 20:08

Re: Problem mit 3 Formularen
 
Also ein bischen Code wäre schonmal nicht schlecht...
Sonst guck docherstmal ob du auch in den beiden Formen(Form1, Form2) die Unit von Form3 implementiert hast und vergewissere dich das du auch den Formnamen vor das label sezt, welches du verändern möchtest.

Hier ein kleines Beispiel, funktioniert so wunderbar:

Form1:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form3.Label1.Caption := 'WAS AUCH IMMER';
end;

end.
Form2:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation
uses Unit3;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form3.Label2.Caption := 'NOCH EIN LABEL TEXT';
end;

end.
Form3:
Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

end.

omata 2. Jun 2008 20:21

Re: Problem mit 3 Formularen
 
@blackdead: ok, es ist dein erster Beitrag.

Trotzdem, nur weil es funktioniert ist es nicht sinnvoll so zu programmieren wie du das in deinem Beispiel zeigst!

Man sollte niemals von einer Unit aus auf Komponenten in einer anderen Unit direkt zugreifen. Dies geschieht immer über Zugriffsmethoden.
Warum? Ganz einfach stell dir vor du änderst eine Komponente auf einer Form. Dann würdest du in allen möglichen Units Fehlermeldungen erhalten und müsstest also überall in deinem Projekt herumändern.
Wenn du alles über Zugriffsmethoden realisierst, knallt es nur in der Unit, in der du auch gerade die Komponente verändert hast.

Das nur mal in aller Kürze...

Gruss
Thorsten

Lolzor 3. Jun 2008 12:43

Re: Problem mit 3 Formularen
 
Erstmal danke für die schnellen antworten
@mkinzler so sieht das bei mir mit 2 Formularen aus

Formular 1
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}
var
T: TForm2;

procedure TForm41.Button1Click(Sender: TObject);
begin
T := TForm2.Create(self);
T.Label1.Caption := 'Text';
T.ShowModal;
T.Free;

end;

end.
Formular 2
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.


@blackdead Ok Ich habe jetzt noch das problem das wenn ich Label2 geändert habe auch Form3 angezeigt haben will das würde ich dann so machen

Delphi-Quellcode:
var
s: TForm3;

procedure TForm38.Button1Click(Sender: TObject);
begin
Form3.Label2.Caption := 'Hans2';
s := TForm39.Create(self);
s.ShowModal;
s.Free;

end;
aber durch "Create" wird ja was erstellt und so habe ich dann ja nicht die veränderten Labels sondern die unveränderten

@omata ich werde mich dann mal mit Zugriffsmethoden beschäftigen

spaxxn 3. Jun 2008 13:03

Re: Problem mit 3 Formularen
 
Delphi-Quellcode:
Form3.Label2.Caption := 'Hans2';
s := TForm39.Create(self);
s.ShowModal;
s.Free;
Du greifst hier auf ein Label eines bereits instanzierten Formulars zu, instanzierst danach aber ein Neues und läss dies dann anzeigen.

Lolzor 3. Jun 2008 14:38

Re: Problem mit 3 Formularen
 
Und wie lasse ich mir das instanzierte Formular anzeigen?
Wenn ich einfach den Teil mit Create weglasse gibts ne fehlermeldung

NickelM 3. Jun 2008 22:09

Re: Problem mit 3 Formularen
 
Du brauchst keine Variable für das Form zu erstellen.
Wenn du sonst nichts geändert hast, dann werden die zur Laufzeit erstellt.

Delphi-Quellcode:
Form3.Label2.Caption := 'Hans2';
//Form3.ShowModal; // ist nur wichtig, wenn du bei Buttons die Eigenschaft ModalResult festlegst. Da bekommst du dan den wert von ModalResult zurück :zwinker:
Form3.Show;
Ein Formular zur Laufzeit ist was ganz anderes und ist auch viel zukompliziert für dich :zwinker:

Der Text kannst du bei beiden Buttons verwenden. Natürlich umschreiben :zwinker:

tomsel 4. Jun 2008 07:42

Re: Problem mit 3 Formularen
 
[quote="NickelM"]

Ein Formular zur Kaufzeit ist was ganz anderes und ist auch viel zukompliziert für dich :zwinker:

quote]

Ja, das würde ich auch sagen. Mir ist es ebenfalls noch nie gelungen ein Formular zur Kaufzeit zu erstellen. :mrgreen:

Aber mal davon abgesehen, würde ich schon empfehlen, sich damit zu befassen, wie Forms erstellt und zerstört werden. Einfach, um diese Problematik von allem "Mysteriösen" zu befreien. Dann hätte Lolzor künftig sehr viel weniger Probleme mit mehr als 2 Forms.
Lolzor: Schau am Besten mal in die DPR-Datei deines Projektes, dort siehst du zumindest mal, wie dein Form1, Form2 usw. zur "Kaufzeit" entsteht.

NickelM 4. Jun 2008 07:48

Re: Problem mit 3 Formularen
 
LOL Sorry ein kleiner aber lustiger Schreibfehler ändere ich gleich :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz