AGB  ·  Datenschutz  ·  Impressum  







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

[FMX] Screenauflösung und Monitore

Ein Thema von stahli · begonnen am 25. Okt 2013 · letzter Beitrag vom 28. Okt 2013
Antwort Antwort
Benutzerbild von stahli
stahli

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

[FMX] Screenauflösung und Monitore

  Alt 25. Okt 2013, 16:49
Gibt es Möglichkeiten, unter FMX (unter Windows reicht) die Screen- bzw. Monitorauflösungen zu ermitteln?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: [FMX] Screenauflösung und Monitore

  Alt 25. Okt 2013, 16:53
Notfalls direkt über die WinAPI wenn du Forms und Co. nicht einbinden willst:

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: [FMX] Screenauflösung und Monitore

  Alt 25. Okt 2013, 17:37
Für die Horizontalen Pixel nutze ich :
Delphi-Quellcode:
function TDisplayInfo.GetHorzPixel: integer;
var
  DevMode: TDeviceMode;
begin
  result := 0;
  DevMode.dmSize := SizeOf(DevMode);
  if EnumDisplaySettings(PChar('\\.\Display' + IntToStr(FIndexDisplay + 1)), ENUM_CURRENT_SETTINGS, DevMode) then
    result := DevMode.dmPelsWidth;
end;
Für die Vertikalen Pixel nutze ich :
Delphi-Quellcode:
function TDisplayInfo.GetVerPixel: integer;
var
  DevMode: TDeviceMode;
begin
  result := 0;
  DevMode.dmSize := SizeOf(DevMode);
  if EnumDisplaySettings(PChar('\\.\Display' + IntToStr(FIndexDisplay + 1)), ENUM_CURRENT_SETTINGS, DevMode) then
    result := DevMode.dmPelsHeight;
end;
Oder Du schaust mal, ob dieses Beispiel funktioniert.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (25. Okt 2013 um 18:30 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: [FMX] Screenauflösung und Monitore

  Alt 25. Okt 2013, 20:35
Delphi-Quellcode:
uses
  FMX.Forms, FMX.Platform;

type
  TScreenHelper = class helper for TScreen
  private
    function GetHeight: Single;
    function GetSize: TSizeF;
    function GetWidth: Single;
  public
    property Height: Single read GetHeight;
    property Size: TSizeF read GetSize;
    property Width: Single read GetWidth;
  end;

function TScreenHelper.GetHeight: Single;
begin
  Result:=Size.cy;
end;

function TScreenHelper.GetSize: TSizeF;
var
  ScreenService: IFMXScreenService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService,IInterface(ScreenService))
    then Result:=ScreenService.GetScreenSize
    else Result:=TPointF.Create(0,0);
end;

function TScreenHelper.GetWidth: Single;
begin
  Result:=Size.cx;
end;
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (25. Okt 2013 um 20:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: [FMX] Screenauflösung und Monitore

  Alt 25. Okt 2013, 21:41
Danke Euch!

Ich habe mir mal aus Rolfs Beispiel ein paar Funktionen abgeleitet.
Damit kann ich beim Projektstart zwei Formulare ganz gut am Monitor ausrichten.
Ist so schon recht komfortabel.

Gut wäre noch, die Höhe der Taskbar zu erkennen (ist aber nicht unheimlich wichtig).

Delphi-Quellcode:
procedure TFormLayoutTest.FormCreate(Sender: TObject);
var
  Mon: Integer;

  function GetMonLeft(Mon: Integer): Integer;
  var
    DevMode: TDeviceMode;
    I: Integer;
  begin
    Result := 0;
    DevMode.dmSize := SizeOf(DevMode);
    I := 1;
    while EnumDisplaySettings(PChar('\\.\Display' + IntToStr(I)), $FFFFFFFF,
      DevMode) do
    begin
      if I = Mon then
        Exit
      else
      begin
        Result := Result + Integer(DevMode.dmPelsWidth);
        Inc(I);
      end;
    end;
  end;

  function GetMonWidth(Mon: Integer): Integer;
  var
    DevMode: TDeviceMode;
    I: Integer;
  begin
    Result := 0;
    DevMode.dmSize := SizeOf(DevMode);
    I := 1;
    while EnumDisplaySettings(PChar('\\.\Display' + IntToStr(I)), $FFFFFFFF,
      DevMode) do
    begin
      if I = Mon then
        Exit(Integer(DevMode.dmPelsWidth))
      else
        Inc(I);
    end;
  end;

  function GetMonTop(Mon: Integer): Integer;
  var
    DevMode: TDeviceMode;
    I: Integer;
  begin
    Result := 0;
    DevMode.dmSize := SizeOf(DevMode);
    I := 1;
    while EnumDisplaySettings(PChar('\\.\Display' + IntToStr(I)), $FFFFFFFF,
      DevMode) do
    begin
      if I = Mon then
        Exit
      else
      begin
        Result := Result + Integer(DevMode.dmPelsHeight);
        Inc(I);
      end;
    end;
  end;

  function GetMonHeight(Mon: Integer): Integer;
  var
    DevMode: TDeviceMode;
    I: Integer;
  begin
    Result := 0;
    DevMode.dmSize := SizeOf(DevMode);
    I := 1;
    while EnumDisplaySettings(PChar('\\.\Display' + IntToStr(I)), $FFFFFFFF,
      DevMode) do
    begin
      if I = Mon then
        Exit(Integer(DevMode.dmPelsHeight))
      else
        Inc(I);
    end;
  end;

begin
{$WARN SYMBOL_PLATFORM OFF}
  if DebugHook <> 0 then
    Mon := 3
  else
    Mon := 1;
{$WARN SYMBOL_PLATFORM ON}
  Left := GetMonLeft(Mon);
  Top := 0;

  // Exit;
  // ShowMessage(IntToStr(GetHorzPixel) + '*' + IntToStr(GetVertPixel));

  FormLayoutTestEdit := TFormLayoutTestEdit.Create(Self);
  FormLayoutTestEdit.Top := 0;
  FormLayoutTestEdit.Width := GetMonWidth(Mon) div 2;
  FormLayoutTestEdit.Height := GetMonHeight(3);
  FormLayoutTestEdit.Left := GetMonLeft(Mon) + GetMonWidth(Mon) -
    FormLayoutTestEdit.Width;
  FormLayoutTestEdit.Show;
  PaintLayout := ssLayout1;
end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: [FMX] Screenauflösung und Monitore

  Alt 28. Okt 2013, 09:02
Ich bin ganz verwirrt und frage dumm dazwischen: Gibt es eigentlich einen Grund, dass es unter der VCL noch Vcl.Forms.TMonitor gab, bei FireMonkey allerdings nicht mehr?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: [FMX] Screenauflösung und Monitore

  Alt 28. Okt 2013, 09:07
Ich bin ganz verwirrt und frage dumm dazwischen: Gibt es eigentlich einen Grund, dass es unter der VCL noch Vcl.Forms.TMonitor gab, bei FireMonkey allerdings nicht mehr?
Ja. FMX.Platform.TPlatformServices.SupportsPlatformSer vice übernimmt jetzt die Aufgabe TMonitor-Klasse.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 21:14 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