![]() |
Fenstergröße im wsNormal-Zustand trotz wsMaximized
Hi!
Ich würde gerne die Fenstergröße auslesen, die das Fenster haben würde, wenn es "wiederhergestellt" wäre, also mit WindowState = wsNormal; allerdings ist das Fenster maximiert (wsMaximized) und wenn ich auf die Eigenschaften TForm.Width bzw. TForm.Height zugreife, dann bekomme ich die Breite bzw. Höhe des maximierten Zustands heraus. Bis jetzt habe ich es so ähnlich gemacht:
Delphi-Quellcode:
Jedoch ist dann das Problem, dass man das Fenster kleiner und wieder größer werden sieht. Ich habe auch schon probiert mit Perform bzw. SendMessage WM_SETREDRAW auf 0 und danach wieder auf 1 zu setzen, aber es bringt nicht wirklich was.
WindowState := wsNormal;
ShowMessage(IntToStr(Width) + ' x ' + IntToStr(Height)); //die Werte irgendwie auslesen - nur als Beispiel ShowMessage WindowState := wsMaximized; Übrigens der Sinn dahinter ist, die Größe des Fensters fürs nächste Mal abzuspeichern; allerdings möchte ich keine fertige Komponente, die das in die Registry oder in eine Ini-Datei speichert, weil ich meine Einstellungen selber in eine eigene Datei speichern möchte. LG, Gerhard |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
Siehe
![]() Also etwa so:
Delphi-Quellcode:
var
wp: TWindowPlacement; begin wp.length := SizeOf(TWindowPlacement); GetWindowPlacement(Form1.Handle, wp); // in wp.rcNormalPosition steht das "normale" Fensterrechteck end; |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
Bitte entschuldige, dass ich erst heute antworte :roll:
Ich habe deine Antwort schon gelesen, nur ist dann folgender Fehler rausgekommen, woran ich mich zuerst selbst versucht habe, aber zu keinem Ergebnis gekommen bin; und dann bin ich nicht zum Weiterprobieren gekommen... Inzwischen habe ich jetzt den Beschluss gefasst, dass ich nicht draufkomme und deshalb frage ich wieder: Also der Fehler Zitat:
Code:
Ich hoffe du (ihr) könnt mir wieder weiterhelfen (*liebschau* :mrgreen: )
GetWindowPlacement(MainForm.Handle, [u]wp[/u]);
|
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
wie hast du den "wp" definiert? GetWindowPlacement erwartet einen Pointer auf TWindowPlacement
Delphi-Quellcode:
steht im msdn und in der Hilfe so, einfal nächstes mal lesen und verstehen.
var wp: TWindowPlacement;
begin [...] GetWindowPlacement(MainForm.Handle, @wp); |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
Ich wusste den Prototypen nicht mehr genau. Einfach wie SirThornberry schon geschrieben hat ein @ vor den 2. Parameter setzen.
Zitat:
|
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
naja, einmal "Strg + Shift + Space" nach dem Klammer auf und man sieht es. Hab da am Anfang auch nicht so hingeschaut und ewig gesucht. Alternativ zu dem "@" kann man natürlich auch gleich ein PWindowPlacement übergeben
Delphi-Quellcode:
var
wp: PWindowPlacement; begin new(wp); wp.length := SizeOf(TWindowPlacement); GetWindowPlacement(Form1.Handle, wp); dispose(wp); |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
Aaaah, der @-Operator, ich erinnere mich, bei den ShellNotifyIcons braucht man den auch. Aber was macht der eigentlich genau, habe mich das schon manchmal gefragt :gruebel:
@SirThornberry: Mit PWindowPlacement habe ich es auch probiert, aber die Zeile "new(wp);" habe ich nicht hineingegeben, weil ich diese Funktion nicht kenne, aus der Hilfe bin ich auch nicht gescheit geworden, meine Frage also, was macht diese Funktion? Übrigens vielen Dank mal euch beiden!!! :thumb: LG |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
das "@" gibt die Speicheradresse von der Variablen zurück. Kurz und knapp: Die funktion erwartet einen Pointer/Zeiger(auf eine Speicheradresse).
PWindowPlacement ist vom Typ Pointer (typisierter Pointer). Allerdings ist dies eben nur ein Pointer und zeigt nur irgendwo hin, Speicher muss man also selbst reservieren und das geht mit "new". Freigegeben wird der Speicher dann mit "dispose" (es gibt noch andere Funktionen für diese Zwecke). bei variante1 (@wp) wird also die Adresse durch das "@" geholt und bei variante2 (wp(PWindowplacement)) ist wp bereits die Adresse/Pointer und diesen muss man noch auf speicher zeigen lassen. Bezüglich des @ operators etc. empfehle ich die Grundlagen von ![]() falls du englisch kannst hier ein Beitrag mit Link zu einem tollen Lehrvideo zu Pointern (sollte man gesehen haben (selbst ohne Englischkenntnisse verständlich)) ![]() |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
Super danke!!! :thumb: Jetzt wird mir einiges klarer!
Bezüglich des Videos: Am Englischen happerts nicht (meines Erachtens ist Englisch sogar eine ziemlich "schöne" Sprache), momentan nur an der Zeit. Aber ich denke, ich werde noch darauf zurück kommen und mir es dann anschauen! Also vielen Dank nochmal!!! |
Re: Fenstergröße im wsNormal-Zustand trotz wsMaximized
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz