AGB  ·  Datenschutz  ·  Impressum  







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

Fensterrand erkennen bei Windows 10

Ein Thema von samso · begonnen am 8. Okt 2014 · letzter Beitrag vom 18. Sep 2015
Antwort Antwort
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#1

AW: Fensterrand erkennen bei Windows 10

  Alt 9. Okt 2014, 09:53
Danke für die Rückmeldungen, auch wenn es meine Frage jetzt nicht wirklich beantwortet hat. Ich befürchte, dass es Microsoft mit dem unsichtbaren Rand ernst meint, sonst würde das Verhalten beim Maximieren usw. ja anders sein. Ich folge dem Rat und warte erst mal ab.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.555 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fensterrand erkennen bei Windows 10

  Alt 9. Okt 2014, 10:04
Ich befürchte, dass es Microsoft mit dem unsichtbaren Rand ernst meint,
Mit etwas Glück hören sie mal auf die Tester.

Ansonsten wäre Testen ja sinnlos.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

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...
Angehängte Grafiken
Dateityp: jpg wwf.jpg (55,6 KB, 93x aufgerufen)
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
440 Beiträge
 
#4

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
 
#5

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
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 15:21 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-2025 by Thomas Breitkreuz