AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fensterrand erkennen bei Windows 10

Ein Thema von samso · begonnen am 8. Okt 2014 · letzter Beitrag vom 18. Sep 2015
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Fensterrand erkennen bei Windows 10

  Alt 10. Okt 2014, 00:35
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...
Miniaturansicht angehängter Grafiken
wwf.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#12

AW: Fensterrand erkennen bei Windows 10

  Alt 14. Sep 2015, 11:54
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.
  Mit Zitat antworten Zitat
bernd2015
(Gast)

n/a Beiträge
 
#13

AW: Fensterrand erkennen bei Windows 10

  Alt 18. Sep 2015, 12:18
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;
Stets aktuell
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:46 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