![]() |
[FMX] Screenauflösung und Monitore
Gibt es Möglichkeiten, unter FMX (unter Windows reicht) die Screen- bzw. Monitorauflösungen zu ermitteln?
|
AW: [FMX] Screenauflösung und Monitore
Notfalls direkt über die WinAPI wenn du Forms und Co. nicht einbinden willst:
![]() |
AW: [FMX] Screenauflösung und Monitore
Für die Horizontalen Pixel nutze ich :
Delphi-Quellcode:
Für die Vertikalen Pixel nutze ich :
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;
Delphi-Quellcode:
Oder Du schaust mal, ob dieses
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; ![]() |
AW: [FMX] Screenauflösung und Monitore
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; |
AW: [FMX] Screenauflösung und Monitore
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; |
AW: [FMX] Screenauflösung und Monitore
Ich bin ganz verwirrt und frage dumm dazwischen: Gibt es eigentlich einen Grund, dass es unter der VCL noch
Delphi-Quellcode:
gab, bei FireMonkey allerdings nicht mehr?
Vcl.Forms.TMonitor
|
AW: [FMX] Screenauflösung und Monitore
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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