Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Zur Laufzeit erstellte Elemente werden nicht angezeig (https://www.delphipraxis.net/192384-zur-laufzeit-erstellte-elemente-werden-nicht-angezeig.html)

justin.kuhn 13. Apr 2017 21:27

Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Hallo, ich hoffe, dass ich das richtige Unterthema gewählt habe. Folgendes Problem habe ich mit diesem Code:
Delphi-Quellcode:
unit uMain;

interface

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

type
  TMain = class(TForm)
   procedure FormCreate (Sender: TObject);
   procedure NeuesFenster (Sender: TObject);
   procedure F2Close (Sender: TObject);
   procedure MainClose (Sender: TObject);

  private
    { Private declarations }
     bt1: TButton;
     bt2: TButton;
     F2: TFormular2;
     btEnde: TButton;
  public
    { Public declarations }
  end;

var
  Main: TMain;

implementation

{$R *.dfm}
procedure TMain.FormCreate(Sender: TObject);
begin
 bt1:= TButton.Create(Main);
 bt1.SetBounds(20,20,160,60);
 bt1.Parent:= Main;
 bt1.Caption:= 'Neues Fenster';
 bt1.OnClick:= NeuesFenster;

 btEnde:= TButton.Create(Main);
 btEnde.SetBounds(20,100,160,60);
 btEnde.Parent:= Main;
 btEnde.Caption:= 'Schliessen';
 btEnde.OnClick:= MainClose;
end;

procedure TMain.NeuesFenster(Sender:TObject);
begin
 F2:=TFormular2.Create(Main);
 F2.Show;
 bt2:= TButton.Create(F2);
 bt2.SetBounds(20,20,160,100);
 bt2.Parent:= F2;
 bt2.Caption:= 'Formular schließen';
 bt2.OnClick:= F2Close;
 bt1.enabled:=false;
end;

procedure TMain.F2Close(Sender: TObject);
begin
 F2.Close;
 bt1.enabled:=true;
end;

procedure TMain.MainClose(Sender: TObject);
begin
 close;
end;


end.
Wenn ich das Programm ausführe, sehe ich ein leeres Formular. Ich kann also keine Buttons etc. sehen und folglich nichts ausführen. Kennt jemand eine Lösung für das Problem?

EWeiss 13. Apr 2017 21:42

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Visible?

gruss

justin.kuhn 13. Apr 2017 21:49

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Habe ich auch schon probiert, klappt aber leider nicht. Trotzdem danke für die fixe Antwort :)

EWeiss 13. Apr 2017 21:51

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Zitat:

Zitat von justin.kuhn (Beitrag 1367564)
Habe ich auch schon probiert, klappt aber leider nicht. Trotzdem danke für die fixe Antwort :)

Delphi-Quellcode:
procedure TMain.NeuesFenster(Sender:TObject);
begin
  F2:=TFormular2.Create(Main);
  F2.Show;
  bt2:= TButton.Create(F2);
  bt2.SetBounds(20,20,160,100);
  bt2.Parent:= F2;
  bt2.Caption:= 'Formular schließen';
  bt2.OnClick:= F2Close;
  bt1.enabled:=false;
  bt1.Visible := True; //<< warum soll das nicht gehen?
  bt2.Visible := True; //<< warum soll das nicht gehen?
end;
ohne sie sichtbar zu schalten wirst du auch nichts sehen können.

Delphi-Quellcode:
  bt2:= TButton.Create(self); //Form1, oder self, oder wie bei dir F2
  bt2.SetBounds(20,20,160,100);
  bt2.Parent:= self;
  bt2.Caption:= 'Formular schließen';
  bt2.Visible := True; //<< warum soll das nicht gehen?

Ich sehe einen wunderschönen Button.

gruss

justin.kuhn 13. Apr 2017 22:10

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe das jetzt folgendermaßen angepasst:
Delphi-Quellcode:
procedure TMain.FormCreate(Sender: TObject);
begin
 bt1:= TButton.Create(Main);
 bt1.SetBounds(20,20,160,60);
 bt1.Parent:= Main;
 bt1.Visible:= True; //Das geht nicht
 bt1.Caption:= 'Neues Fenster';
 bt1.OnClick:= NeuesFenster;

 btEnde:= TButton.Create(Main);
 btEnde.SetBounds(20,100,160,60);
 btEnde.Parent:= Main;
 btEnde.Visible:= True; //Das geht nicht
 btEnde.Caption:= 'Schliessen';
 btEnde.OnClick:= MainClose;
end;

procedure TMain.NeuesFenster(Sender:TObject);
begin
 F2:=TFormular2.Create(Main);
 F2.Show;
 bt2:= TButton.Create(F2);
 bt2.SetBounds(20,20,160,100);
 bt2.Parent:= F2;
 bt2.Caption:= 'Formular schließen';
 bt2.OnClick:= F2Close;
 bt1.enabled:=false;
 bt2.Visible:=true; //Das geht nicht
end;
Entweder habe ich dich noch nicht richtig verstanden, und diese Möglichkeit besteht durchaus, aber es funktioniert noch nicht.

EWeiss 13. Apr 2017 22:15

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Was soll TFormular2 denn sein?

Delphi-Quellcode:
F2 : TForm
//.............

  F2 := TForm.Create(nil);
  F2.Show;

  bt2:= TButton.Create(F2);
  bt2.SetBounds(20,20,160,100);
  bt2.Parent:= F2;
  bt2.Caption:= 'Formular schließen';
  bt2.Visible := True; //<< warum soll das nicht gehen?
gruss

EWeiss 13. Apr 2017 22:30

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Damit du nicht soviel raten must.
Delphi-Quellcode:
unit uMain;

interface

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

type
  TMain = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure NeuesFenster (Sender: TObject);
    procedure F2Close (Sender: TObject);
    procedure MainClose (Sender: TObject);
  private
    { Private-Deklarationen }
     bt1: TButton;
     bt2: TButton;
     F2: TForm;
     btEnde: TButton;
  public
    { Public-Deklarationen }
  end;

var
  Main: TMain;

implementation

{$R *.dfm}

procedure TMain.F2Close(Sender: TObject);
begin
  F2.Close;
  bt1.enabled:=true;
end;

procedure TMain.FormCreate(Sender: TObject);
begin

  bt1:= TButton.Create(self);
  bt1.SetBounds(20,20,160,60);
  bt1.Parent:= self;
  bt1.Caption:= 'Neues Fenster';
  bt1.OnClick := NeuesFenster;
  bt1.Visible := True;

  btEnde:= TButton.Create(self);
  btEnde.SetBounds(20,100,160,60);
  btEnde.Parent:= self;
  btEnde.Caption:= 'Schliessen';
  btEnde.OnClick:= MainClose;
  btEnde.Visible := true;
end;

procedure TMain.MainClose(Sender: TObject);
begin
 close;
end;

procedure TMain.NeuesFenster(Sender: TObject);
begin
  F2 := TForm.Create(self);
  F2.Show;
  bt2:= TButton.Create(F2);
  bt2.SetBounds(20,20,160,100);
  bt2.Parent:= F2;
  bt2.Caption:= 'Formular schließen';
  bt2.OnClick:= F2Close;
  bt1.enabled:=false;
  bt2.Visible := true;
end;

end.
Es gibt kein TFormular2...
Siehe F2: TForm;

EDIT:
Du must F2 von TForm ableiten wie schon gesagt TFormular2 gibt es nicht.
Es sei denn du hast dafür eine eigene Classe angelegt.

bsp.
Delphi-Quellcode:
  TFormular2 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
gruss

justin.kuhn 13. Apr 2017 22:42

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Formular2 ist in einer gesonderten Unit. Das Formular wird eben durch einen Button geöffnet und wieder geschlossen. Hier der Code aus der Unit uForm2
Delphi-Quellcode:
unit uForm2;

interface

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

type
  TFormular2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;


implementation

{$R *.dfm}

end.
Und egal, wie ich es anstelle, ich sehe einfach keine Buttons. Ich habe auch schon mit der Vorlage meines Informatik-Lehrers verglichen - keine neue Erkenntnis.

justin.kuhn 13. Apr 2017 22:45

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Zitat:

Zitat von justin.kuhn (Beitrag 1367569)
Und egal, wie ich es anstelle, ich sehe einfach keine Buttons.

Und auch bei einem weniger komplexen Programm tauchen keine Buttons etc. auf, die zur Laufzeit erstellt wurden.

EWeiss 13. Apr 2017 23:16

AW: Zur Laufzeit erstellte Elemente werden nicht angezeig
 
Zitat:

Zitat von justin.kuhn (Beitrag 1367571)
Zitat:

Zitat von justin.kuhn (Beitrag 1367569)
Und egal, wie ich es anstelle, ich sehe einfach keine Buttons.

Und auch bei einem weniger komplexen Programm tauchen keine Buttons etc. auf, die zur Laufzeit erstellt wurden.

Ok hier..

Vergleich das mal mit deinem.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Seite 1 von 5  1 23     Letzte » 

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