AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX] Ereignis bei Restore?

Ein Thema von Medium · begonnen am 2. Apr 2020 · letzter Beitrag vom 2. Apr 2020
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

[FMX] Ereignis bei Restore?

  Alt 2. Apr 2020, 15:08
Huhu!

Mein Programm ist ein Fenster ohne Rahmen (BorderStyle = None), welches ich bei Programmstart maximiere: WindowState := TWindowState.wsMaximized; . Wenn man nun mittels der Windows-Funktion "Desktop anzeigen" alle Fenster zwangs-versteckt, und mein Programm anschließend wieder sichtbar macht, hat es auf ein Mal wieder die Größe, die es per Default nach dem Start hat, und WindowState ist wsNormal. Da es keine Titelleiste gibt, hat man jetzt keine Chance mehr das Fenster zu maximieren.

(Das Programm soll auf einem 2. Bildschirm hinter Glas, vom PC-Bediener abgewandt ohne Eingaben laufen - reine Anzeige von Messwerten für den Produktionsraum. Daher kann da auch keiner so einfach mal eben ein normales Fenster maximieren.)

Das ist ziemlich doof. Soll das so sein? Kann man das Verhalten irgendwo ändern?

Ich behelfe mir aktuell mit einem Timer, der immer wieder wsMaximized setzt (was lustigerweise das per "Desktop anzeigen" versteckte Fenster NICHT wiederherstellt). Aber wirklich schön finde ich das jetzt nicht. Auch ein Ereignis das da irgendwie passen könnte finde ich nicht. Gab's früher nicht mal ein OnRestore() warum ist das weg?

Viele Grüße und besten Dank schon mal!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: [FMX] Ereignis bei Restore?

  Alt 2. Apr 2020, 15:24
Anstelle eines Timer kannst du doch die Message WM_WINDOWPOSCHANGING auswerten und entsprechend darauf reagieren.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
  end;

implementation

const
  SWP_STATECHANGED = $8000;

procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
  inherited;
  if (Message.WindowPos^.flags and (SWP_STATECHANGED or SWP_FRAMECHANGED)) <> 0 then
  begin
    if (Message.WindowPos^.x < 0) and (Message.WindowPos^.y < 0) then
    // State is Maximized
     ShowMessage('Window state is about to change to MAXIMIZED');
    // or do what your want so is maximized again.
  end;
end;
EDIT:
Du kannst auch mit
if not IsZoomed(MainHandle) then

prüfen ob das Fenster nicht Maximiert ist.

Geändert von venice2 ( 2. Apr 2020 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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