Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Wie kann ich ein weiteres Fenster anzeigen?


canada - Sa 06.03.04 20:24
Titel: Wie kann ich ein weiteres Fenster anzeigen?
Erstmal Hi!,

Ich habe schon gesucht obs hier etwas zu diesem Thema gab, hab aber nichts gefunden Poste es jetzt mal, nebenbei, es gibt hier gute Infos :!: Ich habe in der letzten Zeit schon etwas selbst rum expandiert, habs trotzdem bis jetzt net selbst hin bekommen deswegen mal die Frage an euch, ob Ihr es vielleicht wisst wie das geht??

Ich möchte gerne so ein Fenster in mein Proggi haben
http://mitglied.lycos.de/robertpuegner/db_2.jpg
http://mitglied.lycos.de/robertpuegner/db_3.jpg (naturlich ohne den Inhalt :wink: )

einzigster Unterschied ist, das ich das auf einen Button legen will:
http://mitglied.lycos.de/robertpuegner/db_1.jpg (der Impressum)

kurz, wenn ich auf den Button drücke (Impressum), sich so ein Fenster öffnet.

nutze Delphi 7

schon mal thx!

Moderiert von user profile iconTino: IMG-Tags entfernt; Titel geändert; Topic verschoben.


grayfox - So 07.03.04 00:08

hallo canada!

ich bin mir nicht ganz sicher, ob ich deine frage richtig verstanden habe. kann es sein, dass du so etwas suchst?


Delphi-Quelltext
1:
2:
3:
4:
begin
  Form2.ShowModal;
  Form2.Free
end


diese 2 zeilen trägst du in den OnClickEvent deines buttons und schon wird die form geöffnet.

oder du erstellst die form zur laufzeit, dann sieht das so aus:
aber nicht drauf vergessen, form2 aus der liste der selbständig erzeugten formulare zu entfernen.


Delphi-Quelltext
1:
2:
3:
4:
5:
begin
  Form2:= TForm.Create(self);
  Form2.ShowModal;
  Form2.Free
end



Zitat:
einzigster Unterschied ist, das ich das auf einen Button legen will

was willst auf einen button legen?

mf, stefan

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


Anonymous - So 07.03.04 00:11

grayfox hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
begin
  Form2.ShowModal;
  Form2.Free
end


Das Free würde ich da mal weg lassen, sonst krachts wenn der user 2x auf den Button klickt.

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


canada - So 07.03.04 10:58

ich mein das so,
wenn ich zb. Beispiel, wie auf den ersten beiden Bildern zusehen ist, auf "About" klicke sich das Fenster "About Web Browser" öffnet, soweit klar?!

Jetzt möchte ich aber so etwas in mein Proggi einbauen, nähmlich wenn ich den Button "Impressum" (Bild 3) anklicke, sich auch so ein Fenster öffnet (Bild 2), jetzt verständlich erklärt??

thx


rokdd - So 07.03.04 11:13

hallo canada,
der source dafür wurde doch schon oben gepostet... was gibts denn da noch für ein Problem?


Rokdd


grayfox - So 07.03.04 14:45

hallo obbschtkuche!

sorry, bei meinem ersten code-schnippsel ist das FREE natürlich zuviel des guten, sonst findet beim nächsten mal öffnen delphi kein formular mehr ;)

Zitat:
beim zweiten must du es beim schliesen des programmes einfügen (OnClose) !

das wäre aber ganz ungeschickt, wenn du die form erst beim schliessen des programmes free'st. denn es wäre ja denkbar, dass der user sich das formular öfters anzeigen lässt, und somit räumst du nur die letzte instanz aus dem speicher.

Zitat:
und Form2:= TForm.Create(self); muss bei OnCreate rein

und so würde ich es gar nicht machen - denn dann würde das formular erstellt, auch wenn der user den button nicht klickt.

mit deinem vorschlag kannst die form gleich in der liste der beim programmstart zu erzeugenden formularen belassen. das macht nämlich genau dasselbe...

und dass man eine unit, die man verwenden will, einbindet, hatte ich aber schon vorausgesetzt :D


grayfox - So 07.03.04 15:03

hallo canada!

dann versuch ich mal licht ins dunkel zu bringen, denn ich habs ja auch verursacht :twisted:

- du erstellt das formular, das zu anzeigen willst
- gibst ihm den namen 'AboutDlg'
- speicherst es unter 'AboutFrm.pas' ab
- in deinem programm wählst mit [File] - [use Unit] 'AboutFrm' aus
- und verschiebst es in [Project] - [Options] von 'auto-create forms' nach 'available forms'

so weit, so gut.
danach doppelklickst du den 'ImpressumBtn' und trägst in seinen OnClickEvent folgendes ein


Delphi-Quelltext
1:
2:
3:
  AboutDlg:= TAboutDlg.Create(self);
  AboutDlg.ShowModal;
  AboutDlg.Free;


[für fortgeschrittene]

Delphi-Quelltext
1:
2:
3:
4:
  with TAboutDlg.Create(self) do begin
    ShowModal;
    Free
  end;


somit wird dir dein formuar auf buttonclick angezeigt. dabei ist es völlig egal, mit welchem button du es öffnest - du brauchst ihm nur in seinen OnClickEvent mitteilen, was er zu tun hat
ich hoffe, dass es nun taghell geworden ist :)

mfg, stefan

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.


Motzi - So 07.03.04 15:26

@grayfox: und was is mit den Resource-Schutblöcken - auch als SEH-Frame (Structured Exception Handling) bekannt..? :roll:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  AboutDlg:= TAboutDlg.Create(self);
  try
    AboutDlg.ShowModal;
  finally
    AboutDlg.Free;
  end;


[für fortgeschrittene]

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  with TAboutDlg.Create(self) do
    try
      ShowModal;
    finally
      Free
    end;


grayfox - So 07.03.04 17:45

hallo motzi!

danke fürs tags-ersetzen! du machst das echt super! ;)
setzt du beim anzeigen von aboutboxen wirklich schutzblöcke? normalerweise sollte ja das programm dort nicht abstürzen, da nur etwas angezeigt und nichts eingegeben oder berechnet wird, das zu fehlern bzw programmabstürzen führen könnte.

mfg, stefan


canada - So 07.03.04 19:19

ertsmal danke, danke, ...

desweiteren ist mein Problem/ Frage geklärt, habs mit der Variante gemacht und es geht:


Delphi-Quelltext
1:
2:
3:
begin 
  Form2.ShowModal; 
end


und ein neus Form und Unit genommen, ...

Moderiert von user profile iconMotzi: Quote- durch Delphi-Tags ersetzt.


Motzi - So 07.03.04 21:26

grayfox hat folgendes geschrieben:
setzt du beim anzeigen von aboutboxen wirklich schutzblöcke? normalerweise sollte ja das programm dort nicht abstürzen, da nur etwas angezeigt und nichts eingegeben oder berechnet wird, das zu fehlern bzw programmabstürzen führen könnte.

Mach ich (soweit möglich) eigentlich immer in allen Fällen in denen ich Objekte erzeuge oder zur Laufzeit Speicher reserviere..! Einfach für den Fall, dass auch alles korrekt wieder freigegeben wird wenn ein Fehler auftritt, und das kann so ziemlich immer passieren (welcher Natur auch immer)...