![]() |
AW: Fensterrand erkennen bei Windows 10
Liste der Anhänge anzeigen (Anzahl: 1)
Der abgedockte eMail-Editor unter Win8.1 bietet übrigens schon mal einen Vorgeschmack auf den neuen Fenster-Stil.
Ich bin mir nicht sicher, wie störend ich die Änderung an der Stelle finde... |
AW: Fensterrand erkennen bei Windows 10
Da der Fensterrand ja nun auch in der finalen Version nicht sichtbar ist, habe ich mich erneut mit dem Thema beschäftigt. Ob ein "Design mit hohem Kontrast" oder ein "Standard Design" eingestellt wurde, kann mit der Funktion UxTheme.IsCompositionActive (True = "Standard Design") ermittelt werden.
Da der Benutzer nach meinem Wissen bei Windows 10 die Fensterränder nicht mehr einstellen kann, sehe ich die Fenstermetrik als fest durch das Betriebssystem vorgegeben an. Bei einem "Design mit hohem Kontrast" sind die optischen Abmessungen mit dem Fensterrechteck (BoundsRect) identisch. Hier brauchen also keine besonderen Vorkehrungen getroffen werden, um Fenster-Snap-Funktionalitäten (ScreenSnap, magnetische Fenster) umzusetzen. Bei einem "Standard Design" hängen die optischen Abmessungen eher von dem ClientRect des Fensters ab. Der obere optische Rand ist noch identisch mit dem Fensterrechteck. Der linke/rechte/untere optische Rand kann durch aufschlagen einer 1-Pixel-breiten Linie um das Clientrechteck berechnet werden. Der so berechnete optische Rand hat dann je nach Borderstyle unterschiedliche Abstände zu dem BoundsRect. Dieser Abstand ist der gesuchte unsichtbare Rand der bei der Positionierung des Fensters berücksichtigt werden muss, wenn man eine Fenster-Snap-Funktionalität umzusetzen möchte. Ich habe leider keine Funktion gefunden, mit der ich den Aufschlag (den Rand um den ClientRect) abfragen könnte. Falls Microsoft also bei irgendeiner zukünftigen Version den Rand z.B. 2 Pixel breit machen würde statt nur einen Pixel, dann läuft der ganze Algorithmus gegen die Wand.:cry: |
AW: Fensterrand erkennen bei Windows 10
Da ich einige meiner Programme per Mausklick auf "optimale" ;-) Fensterbreiten bringen möchte, habe ich mir was zusammengebastelt, was mit Win8.1 und 10 tadellos klappt.
Delphi-Quellcode:
function GetWinVersionAsInteger: Integer;
var Version: TOSVersionInfo; begin Version.dwOSVersionInfoSize := SizeOf(OSVersionInfo); GetVersionEx(Version); Result := Version.dwMajorVersion * 10 + Version.dwMinorVersion; end; function GetXBorderWidth: Integer; begin Result := 0; if GetWinVersionAsInteger >= 100 then Result := -GetSystemMetrics(SM_CXSIZEFRAME); end; procedure TForm1.FormCreate(Sender: TObject); begin LabelWinVer.Caption := IntToStr(GetWinVersionAsInteger); //zur Kontrolle ob Manifest eingebunden wurde end; procedure TForm1.ButtonToLeftEdgeClick(Sender: TObject); begin Left := 0 + GetXBorderWidth; // Fenster an den linken "Aktivisten"-Rand end; procedure TForm1.ButtonToRiteEdgeClick(Sender: TObject); begin Left := GetSystemMetrics(SM_CXSCREEN) - Width - GetXBorderWidth; // Fenster an den rechten "bürgerlich besorgten" Rand end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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