Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   WindowState ruft OnShow Ereignis auf? (https://www.delphipraxis.net/185233-windowstate-ruft-onshow-ereignis-auf.html)

AlexII 23. Mai 2015 20:49

WindowState ruft OnShow Ereignis auf?
 
Hallo,

ich habe folgenden Code, und dieser ruft automatisch das OnShow Ereignis des Forms auf. Ist das normal so? Für mich ist das aber voll ungünstig, kann ich das irgendwie umgehen, oder ist das eine schlechte Idee? Lässt sich vielleicht das Form anders kleiner machen, nicht so wie bei mir?

Delphi-Quellcode:
procedure TMainForm.MinimizeMIClick(Sender: TObject);
begin
  // MainForm minimieren
  if MainForm.WindowState = wsMaximized then
  begin
    MainForm.BorderStyle := bsSizeable;
    MainForm.WindowState := wsNormal;
    MainForm.Width := 800;
    MainForm.Height := 600;
  end else
  begin
    MainForm.BorderStyle := bsNone;
    MainForm.WindowState := wsMaximized;
  end;
end;
Danke!

Luckie 23. Mai 2015 21:00

AW: WindowState ruft OnShow Ereignis auf?
 
Muss es wohl zwangsweise, damit die neuen Eigenschaften wirksam werden. Warum ist es ungünstig für dich?

AlexII 23. Mai 2015 21:07

AW: WindowState ruft OnShow Ereignis auf?
 
Zitat:

Zitat von Luckie (Beitrag 1302835)
Muss es wohl zwangsweise, damit die neuen Eigenschaften wirksam werden. Warum ist es ungünstig für dich?

Weil ich da Dinge mache, die beim erneutem Laden meine Anwendung durcheinander bringen. Da muss ich wohl diese mit ner if-Abfrage schützen. Wie kann man prüfen, ob der Sender die procedure TMainForm.MinimizeMIClick(Sender: TObject); ist? :gruebel:

Popov 23. Mai 2015 21:15

AW: WindowState ruft OnShow Ereignis auf?
 
Es gibt noch andere Möglichkeiten die Titelleiste zu entfernen als bsNone.

AlexII 23. Mai 2015 21:17

AW: WindowState ruft OnShow Ereignis auf?
 
Zitat:

Zitat von Popov (Beitrag 1302841)
Es gibt noch andere Möglichkeiten die Titelleiste zu entfernen als bsNone.

Wie?

Luckie 23. Mai 2015 21:19

AW: WindowState ruft OnShow Ereignis auf?
 
Dann mach sie doch erst, wenn du sie neu lädst. Was meinst du eigentlich genau mit "neu laden"?

AlexII 23. Mai 2015 21:22

AW: WindowState ruft OnShow Ereignis auf?
 
Zitat:

Zitat von Luckie (Beitrag 1302843)
Dann mach sie doch erst, wenn du sie neu lädst. Was meinst du eigentlich genau mit "neu laden"?

Bei erneutem Anzeigen (Show) meinte ich. ))

Perlsau 23. Mai 2015 21:22

AW: WindowState ruft OnShow Ereignis auf?
 
Zitat:

Zitat von AlexII (Beitrag 1302837)
Weil ich da Dinge mache, die beim erneutem Laden meine Anwendung durcheinander bringen. Da muss ich wohl diese mit ner if-Abfrage schützen. Wie kann man prüfen, ob der Sender die procedure TMainForm.MinimizeMIClick(Sender: TObject); ist? :gruebel:

Ähnliche Probleme hatte ich früher auch schonmal. Inzwischen mach ich das so:

Im Oncreate werden alle benötigten Objekte erzeugt. Ebenfalls wird dort ein privater Boolean StartModus (Private-Abschnitt) auf True gesetzt.
In OnShow und in OnActivate frage ich diesen Boolean ab:
Delphi-Quellcode:
procedure TFormMain.Show(Sender: TObject);
begin
  if not StartModus then exit;

  MachSonstWas;
  DiesUndDas;
  ...
end;
Dasselbe in OnActivate. Dort wird dann, nachdem dort alles erledigt wurde, was zu erledigen ist, z.B. Verbindung mit der Datenbank herstellen usw., StartModus auf False gesetzt:
Delphi-Quellcode:
procedure TFormMain.Activate(Sender: TObject);
begin
  if not StartModus then exit;

  if not DatMod.VerbindenDatenbank Then
  begin
    ShowMessage('Verbindung mit der Datenbank fehlgeschlagen. Programm wird beendet.');
    Close;
  end;

  if not DatMod.VerbindenQueries Then
  begin
    ShowMessage('Verbindung mit der Queries fehlgeschlagen. Programm wird beendet.');
    Close;
  end;

  BenutzerLogin;

  EinstellungenLaden; // dort wird u.a. auch WindowState gesetzt, die Werte für die Einstellungen kommen aus der DB
  ...
  StartModus := False;
end;
Somit mußt du nichts prüfen außer dem Boolean StartModus, der sonst nirgendwo verwendet wird.

AlexII 23. Mai 2015 21:32

AW: WindowState ruft OnShow Ereignis auf?
 
Wow... super Lösung, danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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