Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

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

AW: [FMX] Screenauflösung und Monitore

  Alt 25. Okt 2013, 22: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