Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   per buttonklick neues fenster öffnen (https://www.delphipraxis.net/161227-per-buttonklick-neues-fenster-oeffnen.html)

gast5 23. Jun 2011 10:30

per buttonklick neues fenster öffnen
 
hi,hoffe ich bin hier richtig.
ich habe Lazarus delphi und wollte fragen wie man per Buttonklick ein neues Fenster öffnet. Also wenn man auf den Button drückt das sich dann ein zweites Fenster öffnet ohne dass das erste Fenster geschlossen wird.
Mit Quelltext wäre schon.
Bedanke mich schon im Vorraus für jede Antwort.

Daniela.S 23. Jun 2011 10:40

AW: per buttonklick neues fenster öffnen
 
Ähm, ein Lazarus Delphi gibt's nicht. Lazarus verwendet FreePascal :wink:

Der Code ist aber großteils kompatibel...

Delphi-Quellcode:
procedure TForm1.OnButtonClick( Sender: TObject);
begin
  Form2 := TForm2.Create( Self );
  try
    Form2.ShowModal;
  finally
    Form2.Free;
    end;
end;

himitsu 23. Jun 2011 10:54

AW: per buttonklick neues fenster öffnen
 
Bitte hierfür eine lokale Variable dafür verwenden und nicht die Globale.
Delphi-Quellcode:
procedure TForm1.OnButtonClick( Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(Self);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;
oder Keine.
Delphi-Quellcode:
procedure TForm1.OnButtonClick( Sender: TObject);
begin
  with TForm2.Create(Self) do
    try
      ShowModal;
    finally
      Free;
    end;
end;
und wenn die Fenster paralell nutzbar sein sollen, dann
Delphi-Quellcode:
MyForm2 := TForm2.Create(Self);
MyForm2.Show;

und irgendwann dann ein
MyForm2.Free;

Daniela.S 23. Jun 2011 10:57

AW: per buttonklick neues fenster öffnen
 
Zitat:

Bitte hierfür eine lokale Variable dafür verwenden und nicht die Globale
:thumb: Zustimm'... hab's der Einfachheit halber nicht erwähnt :roll:

DeddyH 23. Jun 2011 11:06

AW: per buttonklick neues fenster öffnen
 
Seid Ihr überhaupt sicher, dass das so gemeint ist? Ich hätte jetzt eher auf
Delphi-Quellcode:
procedure TForm1.ButtonWasWeissIchClick(Sender: TObject);
begin
  Form2.Show;
end;
getippt.

gast5 23. Jun 2011 12:31

AW: per buttonklick neues fenster öffnen
 
Danke für eure schnellen Antworten.
Aber leider funktioniert es bei mir nicht.
Ich habe auf Form1 einen TButton raufgelegt dann habe ich auf den Button geklickt, bin dann auf Ereignisse und dann auf OnClick.
Danach habe ich die drei Punkte ...
angeklickt und dann im Quelltexteditor den Code eingefügt.
Beim kompolieren kommen aber immer fehlermeldungen.
Was mache ich falsch?

Daniela.S 23. Jun 2011 12:34

AW: per buttonklick neues fenster öffnen
 
Also ohne Code und Beschreibung der Fehlermeldung wird uns wohl nur Raten übrig bleiben :glaskugel:

DeddyH 23. Jun 2011 12:51

AW: per buttonklick neues fenster öffnen
 
Ist denn auch die Unit des aufzurufenden Formulars in der des aufrufenden eingebunden (uses-Klausel)?

gast5 23. Jun 2011 13:20

AW: per buttonklick neues fenster öffnen
 
code:
Delphi-Quellcode:
procedure TForm1.OnButtonClick( Sender: TObject);
         begin
         Form2 := TForm2.Create( Self );
          try
           Form2.ShowModal;
           finally
           Form2.Free;
          end;
          end;
Zitat:

Fehler:Fatal Syntax Error ";" excepted but indentifier TFORM1 found
code:
Delphi-Quellcode:
procedure TForm1.OnButtonClick( Sender: TObject);
           var
          Form2: TForm2;
           begin
          Form2 := TForm2.Create(Self);
           try
          Form2.ShowModal;
          finally
         Form2.Free;
         end;
         end;
Zitat:

Fehlerr: Fatal Syntax Error ";" excepted but indentifier TFORM1 found
code:
Delphi-Quellcode:
procedure TForm1.OnButtonClick( Sender: TObject);
          begin
         with TForm2.Create(Self) do
          try
         ShowModal;
         finally
         Free;
         end;
        end;
Zitat:

Fehler: Fatal Syntax Error ";" excepted but indentifier TFORM1 found
code:
Delphi-Quellcode:
procedure TForm1.ButtonWasWeissIchClick(Sender: TObject);
          begin
          Form2.Show;
          end;
Zitat:

Fehlerr: Fatal Syntax Error ";" excepted but indentifier TFORM1 found

gast5 23. Jun 2011 13:20

AW: per buttonklick neues fenster öffnen
 
Zitat:

Zitat von DeddyH (Beitrag 1107905)
Ist denn auch die Unit des aufzurufenden Formulars in der des aufrufenden eingebunden (uses-Klausel)?

Ja ist es

mkinzler 23. Jun 2011 13:23

AW: per buttonklick neues fenster öffnen
 
Heisst den die Formklasse des Rufers auch TForm1?

gast5 23. Jun 2011 13:42

AW: per buttonklick neues fenster öffnen
 
Zitat:

Zitat von mkinzler (Beitrag 1107909)
Heisst den die Formklasse des Rufers auch TForm1?

Natürlich

DeddyH 23. Jun 2011 13:45

AW: per buttonklick neues fenster öffnen
 
In welcher Zeile tritt der Fehler auf? Hast Du den Code einfach per C&P eingefügt oder per Doppelklick auf den Button das Codegerüst erzeugen lassen?

gast5 23. Jun 2011 13:52

AW: per buttonklick neues fenster öffnen
 
Zeile 34,13
Zuerst habe ich per Doppelklick den Code erzeugen lassen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

end;
Die Codes habe ich hierherauskopiert und dann zwischen begin und end; bei der leeren Zeile eingefügt

mkinzler 23. Jun 2011 13:55

AW: per buttonklick neues fenster öffnen
 
Poste mal die komplette Unit (Code)

gast5 23. Jun 2011 14:00

AW: per buttonklick neues fenster öffnen
 
Hier der Code:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, 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

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  procedure TForm1.OnButtonClick( Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(Self);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;
end;

end.

DeddyH 23. Jun 2011 14:01

AW: per buttonklick neues fenster öffnen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
(*begin
procedure TForm1.OnButtonClick( Sender: TObject); *)
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(Self);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
(*end;*)
end;
Du hast zuviel kopiert und eingefügt.

himitsu 23. Jun 2011 17:40

AW: per buttonklick neues fenster öffnen
 
Zitat:

Zitat von DeddyH (Beitrag 1107889)
Seid Ihr überhaupt sicher, dass das so gemeint ist? Ich hätte jetzt eher auf

Gute Frage,

aber "man" erstellt doch eh nicht alle Fenster sofort, sondern erst wenn sie gebraucht werden :stupid:

Luckie 23. Jun 2011 23:55

AW: per buttonklick neues fenster öffnen
 
Also als Anfänger dürfte es am leichtesten sein, wenn man alle Fenster sofort erstellen lässt von der IDE. Hab eich früher auch immer so gemacht.

DeddyH 24. Jun 2011 07:03

AW: per buttonklick neues fenster öffnen
 
Das sehe ich genauso.

gast5 24. Jun 2011 09:52

AW: per buttonklick neues fenster öffnen
 
Zitat:

Zitat von Luckie (Beitrag 1108011)
Also als Anfänger dürfte es am leichtesten sein, wenn man alle Fenster sofort erstellen lässt von der IDE. Hab eich früher auch immer so gemacht.

Und wie geht das?

mkinzler 24. Jun 2011 09:55

AW: per buttonklick neues fenster öffnen
 
Einfach neues Formular in der IDE erstellen. Es wird dann eine Instanz davon angelegt und automatisch erzeugt, welche man dann mit
Delphi-Quellcode:
<Formx>.Show;
anzeigen lassen kann.
Ggf. muss man noch die Unit in die Quelldatei einbinden.

gast5 24. Jun 2011 11:18

AW: per buttonklick neues fenster öffnen
 
Ich habe es versucht aber nicht hinbekommen.
Kannst du vielleicht das Projekt hier hochladen? Wäre nett

DeddyH 24. Jun 2011 11:21

AW: per buttonklick neues fenster öffnen
 
"Datei - Neu - Formular" im bestehenden Projekt aufrufen, damit wird das so angelegte Form (AFAIK auch unter Lazarus) automatisch in die Liste der automatisch zu erzeugenden Formulare aufgenommen. Du musst nun nur noch in der aufrufenden Unit die Unit dieses neuen Formulars in die uses-Klausel aufnehmen. Das sollte im implementation-Abschnitt genügen.

bcvs 25. Jun 2011 21:53

AW: per buttonklick neues fenster öffnen
 
Zitat:

Zitat von DeddyH (Beitrag 1108081)
"Datei - Neu - Formular" im bestehenden Projekt aufrufen, damit wird das so angelegte Form (AFAIK auch unter Lazarus) automatisch in die Liste der automatisch zu erzeugenden Formulare aufgenommen.

Aber nur, wenn nicht genau das in den Optionen (weiß jetzt auf Anhieb nicht, wo genau) abgeschaltet ist, was bei mir der Fall ist.

gast5 26. Jun 2011 19:34

AW: per buttonklick neues fenster öffnen
 
:cry:Mein Programm scheint ein Problem damit zu haben dass da TForm1, Form1 und/oder TForm2, Form2 steht. Denn dort treten die Fehler beim kompolieren auf.

Luckie 26. Jun 2011 19:58

AW: per buttonklick neues fenster öffnen
 
Zitat:

Zitat von gast5 (Beitrag 1108402)
Denn dort treten die Fehler beim kompolieren auf.

Aha. Rat mal was jetzt hilfreich für uns wäre, wenn wir dir helfen sollen. :roll:

mkinzler 26. Jun 2011 20:07

AW: per buttonklick neues fenster öffnen
 
Zudem weiss wohl keiner was kompolieren ist. :stupid:

gast5 27. Jun 2011 11:21

AW: per buttonklick neues fenster öffnen
 
Unit1 Quelltext:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, 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

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  var
    Form2: TForm2;
  begin
    Form2 := TForm2.Create(Self);
    try
      Form2.ShowModal;
    finally
      Form2.Free;
end;
end.
Unit2 Quelltext:
Delphi-Quellcode:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type
  TForm2 = class(TForm)
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.lfm}

end.

Bei Unit 1 tritt der Fehlerauf: unit1.pas(35,5) Fatal: Syntax error, ";" expected but "identifier FORM2" found


Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, 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

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  <Form2>.Show;
end;

end.

Dort trittt dieser Feehler auf: unit1.pas(34,4) Fatal: Syntax error, ";" expected but "identifier FORM2" found

Klaus01 27. Jun 2011 11:25

AW: per buttonklick neues fenster öffnen
 
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, 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
uses
  Unit2; // <--- neu
{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(Self);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;

end.
Grüße
Klaus

gast5 27. Jun 2011 11:40

AW: per buttonklick neues fenster öffnen
 
Danke jetzt lässt es sich ohne Probleme kompilieren.:-D :thumb:
Das einzige Problem ist jetzt noch das wenn ich die Anwendung öffne und ich auf den Button klicke kein zweites Fenster geöffnet wird.

Luckie 27. Jun 2011 11:46

AW: per buttonklick neues fenster öffnen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  var
    Form2: TForm2;
  begin
    Form2 := TForm2.Create(Self);
    try
      Form2.ShowModal;
    finally
      Form2.Free;
end;
Eventuell solltest du dir mal ein Grundlagentutorial angucken oder ein Buch für Anfänger lesen. Zumindest den grundlegenden Aufbau einer Prozedur sollte man kennen und wissen was Programmblöcke sind.

DeddyH 28. Jun 2011 07:52

AW: per buttonklick neues fenster öffnen
 
Wenn ich ja nicht gefragt hätte, ob die Unit eingebunden ist :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.

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