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;