Fenster Test

Für Fragen von Einsteigern und Programmieranfängern...
Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Fenster Test

Beitrag von Andy Nightingale »

Hallo Leute,
ich bin am "Rotz Jodeln".-echt. Komme einfach nicht voran. Die Fenster Geschichte treibt mich noch in den Wahnsinn. :mrgreen:
Folgendes mal anders. Ich möchte das Form2 Fenster als erstes starten. Soweit so gut. Macht es. Bleibt 5 Sekunden da, schließt sich.-super nun soll sich Form 1 laden und in Front bringen. Macht es für eine Millisekunde. Ich weiß nicht warum das Fenster nicht bleibt. Im Anhang das Testprogramm.
meinTest.zip
(96.29 KiB) 31-mal heruntergeladen

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

Re: Fenster Test

Beitrag von theo »

Du schliesst das Hauptformular, dann ist die Anwendung beendet.
Ich weiss nicht genau was du erreichen willst, aber mit "hide" geht es sicher besser:

Code: Alles auswählen

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False; // Timer deaktivieren, damit es nicht mehrfach passiert
  Self.Hide; // Form2 verstecken
end;

procedure TForm2.FormHide(Sender: TObject);
begin
  if not Assigned(Form1) then
    Application.CreateForm(TForm1, Form1);
  Form1.Show;
  Form1.BringToFront;
end;  
Ausserdem ist es verwirrend, Form2 zum Hauptformular zu machen etc, aber gut...

Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Re: Fenster Test

Beitrag von Andy Nightingale »

Hi Theo,
hhmmm. Es funktioniert nun.- aber ich verstehe das nicht ganz. Ich starte doch Form2 das später Infofenster heißt und 30 Sekunden bleiben soll mit ein paar wichtigen Tagesinformationen. Dann öffne ich doch Form1 das Hauptfenster. Wie würdest du das denn machen? Danke dir. :roll:

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

Re: Fenster Test

Beitrag von theo »

Andy Nightingale hat geschrieben: Di 5. Aug 2025, 16:58 Wie würdest du das denn machen? Danke dir.
Wie gesagt, mit Hide / Show.
Lass alles im lpr so, wie es Lazarus erstelllt.

Dann mach in Unit1 (Timer auf Form1, OnActivate und OnTimer natürlich im Obj. Insp. einhängen):

Code: Alles auswählen

....
uses Unit2;

  {$R *.lfm}

  { TForm1 }

procedure TForm1.FormActivate(Sender: TObject);
begin
  if Timer1.Enabled then
  begin
    Form2.Show;
    Hide;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  Form2.Hide;
  Show;
end;  
...

Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Re: Fenster Test

Beitrag von Andy Nightingale »

Hallo Theo,

kann das stimmen?.- Unit2 und dann { TForm1 }

procedure TForm1.FormActivate.-oder ist das extra so gemacht? Sorry das ich so nachfrage.

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

Re: Fenster Test

Beitrag von theo »

Andy Nightingale hat geschrieben: Di 5. Aug 2025, 18:37 kann das stimmen?.- Unit2 und dann { TForm1 }
uses Unit2, damit auf Form2 zugegriffen werden kann.
Andy Nightingale hat geschrieben: Di 5. Aug 2025, 18:37 procedure TForm1.FormActivate.-oder ist das extra so gemacht? Sorry das ich so nachfrage.
Das ist das OnActivate Event von Form1.

Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Re: Fenster Test

Beitrag von Andy Nightingale »

Ja klar verstehe. Danke dir.
Es scheint mir das du alles immer auf das wesentliche herunterbrichst und es im Grunde vereinfachst. Das finde ich super. Ich denke dann immer zu kompliziert.
Dabei liegt es oft am einfachen aber direkten Code.
Ehrlich gesagt als Anfänger sieht man oft den Wald vor Bäumen nicht mehr. Was bei mir auch ist.- wenn ich z.B. etwas verstehe und es aber eine Weile nicht mehr benötige, dann steh ich oft davor und denke:...hä das hast du doch schon einmal gemacht.-aber habs dann zum Teil vergessen. Man muß echt dran bleiben.
Viele Grüße :D

Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Re: Fenster Test

Beitrag von Andy Nightingale »

Hallo Theo,

eine Frage was ich nicht verstehe:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Form2.Hide;

Show;
end;

Warum das "Show". bzw. von wo weiß das Programm das damit Form1 gemeint ist? Verstehe ich das richtig? Timer ist aus. Wird Hide versteckt. Dann SHOW.-was Show. Ich meine es funktioniert,-aber ich möchte es auch verstehen. Danke.

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

Re: Fenster Test

Beitrag von theo »

Andy Nightingale hat geschrieben: Di 5. Aug 2025, 20:43 Warum das "Show". bzw. von wo weiß das Programm das damit Form1 gemeint ist?
Das "Show" befindet sich in einer Methode von TForm1, daher bezieht es sich darauf, wenn keine Instanz einer andern Klasse angegeben ist, wie z.B. bei Form2.Hide;

Code: Alles auswählen

procedure TForm1.Timer1Timer(Sender: TObject);
Man könnte auch Self.Show schreiben, ist aber überflüssig.

https://www.delphi-treff.de/tutorials/o ... ashkurs/8/

Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Re: Fenster Test

Beitrag von Andy Nightingale »

Hallo Theo,

das war der Punkt. Also Verständnispunkt.-da ich tatsächlich irgendetwas mit self erwartete. Es hat klick gemacht. Danke. :D

charlytango
Beiträge: 1140
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Fenster Test

Beitrag von charlytango »

ich hab den thread verfolgt, aber ganz verstehe ich nicht warum man das Design so wählt.
Du sagst dass Form2 mit aktuellen Tagesinformationen 30sek offen bleiben soll um dann wieder zu verschwinden.

Ich frage mich warum so etwas sinn machen kann. Jetzt lese ich als User gerade die Tagesinformation und das Programm schließt mir das Fenster bevor ich fertig bin oder ich muss umgekehrt die 30 sekunden abwarten obwohl ich mit dem Lesen schon fertig bin.

Also mich würde das doch ziemlich nerven. Nicht falsch verstehen, kann jeder machen wie er denkt, sind nur meine 2 cents.

Mein Ansatz in so einer Situation wäre der, einen recht prominenten CLOSE Button aufs Formular zu packen und den auf default stellen, dann kann ein Tastendruck ihn auslösen und niemand muss eine Maus positionieren. Mit Pfeiltasten kann man zb dann auch noch durch die Infos scrollen.
Kommt immer darauf an was mit so einem Infofenster beabsichtigt wird.

Andy Nightingale
Beiträge: 272
Registriert: Mo 13. Jan 2025, 12:11

Re: Fenster Test

Beitrag von Andy Nightingale »

Hallo Charly,
natürlich ist das mit dem Close Button mit drauf. Ich mache eigentlich nur das was der Kunde möchte. Ich würde dies auch nicht so haben wollen.
Der Kunde ist eben König.-sein Geld.
Grüße

charlytango
Beiträge: 1140
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Fenster Test

Beitrag von charlytango »

Ist klarerweise ein Killerargument ;-)
Wollte dir nicht zu nahe treten, aber aus der Rubrik Kundenwunsch kann ich dir nach 30 Jahren auch den einen oder anderen Schwank erzählen ggg

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6918
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Fenster Test

Beitrag von af0815 »

Das Thema klingt nach Splash Screen. Dazu gibt es schon Beispiele.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Soner
Beiträge: 753
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Fenster Test

Beitrag von Soner »

Wenn du mit vielen Formularen arbeitest, die nacheinander angezeigt werden, dann nehme ein leeres Hauptform und binde diese im Hauptform ein, also du gibst als subform.Parent:=Hauptform, das ist viel einfacher als diese ganzen Hide/Show Geschichten, weil meistens haben die Formulare andere Größe oder Position und das geht den Benutzer auf den S.ck. Ich deinstalliere solche Programme sofort, falls ich die Möglichkeit dazu habe.

Antworten