Hallo,
vielleicht helfen dir der folgende Link weiter:
Position der Taskbar rausfinden
Laut meines Wissens gibt "Screen.WorkAreaWidth" bzw. "Screen.WorkAreaHeight" immer nur die mögliche Breite und Höhe des Desktop an (Taskbar ist schon abgezogen).
du müsstest halt rausfinden, wo sich die Taskbar befindet (siehe link) und dann halt dann deine Form, je nach Position der TaskBar, an die dementsprechende (von dir gewollte) Stelle positionieren.
so in etwa:
Delphi-Quellcode:
with Form1 do
begin
case TaskbarPosition of
unten: begin
Left := Screen.WorkAreaWidth - Width;
Top := Screen.WorkAreaHeight - Height;
end;
oben: begin
Left := 0;
Top := 0;
end;
links: begin
//Variante 1 (Form links oben)
Left := 0;
Top := 0;
//Variante 2 (Form links unten)
Left := 0;
Top := Screen.WorkAreaHeight - Height;
end;
rechts: begin
//Variante 1 (Form links oben)
Left := Screen.WorkAreaWidth - Width;
Top := 0;
//Variante 2 (Form rechts unten)
Left := Screen.WorkAreaWidth - Width;
Top := Screen.WorkAreaHeight - Height;
end;
end;
[edit]
Da ich heute meinen guten Tag habe, hab ich mal etwas weiter gearbeitet. Vielleicht hilft dir ja folgender Code. Du brauchst dafür nen Timer, im
OI Enabled = false und dann der Code:
Delphi-Quellcode:
type
TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT, _NONE);
function GetTaskBarPos: TTaskBarPos;
var
hTaskbar: HWND;
T: TRect;
scrW, scrH: Integer;
begin
hTaskBar := FindWindow('Shell_TrayWnd', nil);
If hTaskbar <> 0 then
begin
GetWindowRect(hTaskBar, T);
ScrW := Screen.Width;
ScrH := Screen.Height;
If (T.Top > scrH div 2) and (T.Right >= scrW) then
Result := _BOTTOM
else
If (T.Top < scrH div 2) and (T.Bottom <= scrW div 2) then
Result := _TOP
else
If (T.Left < scrW div 2) and (T.Top <= 0) then
Result := _LEFT
else // the last "if" is not really needed
If T.Left >= ScrW div 2 then
Result := _RIGHT;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
TaskBarPos: TTaskBarPos;
Form_Left, Form_Top: Integer;
begin
TaskBarPos := GetTaskBarPos;
case TaskBarPos of
_LEFT : begin
//Variante 1 (Form links oben)
Form_Left := 0;
Form_Top := 0;
//Variante 2 (Form links unten)
//Form_Left := 0;
//Form_Top := Screen.WorkAreaHeight - Height;
//Form bewegen
{*** HIER FEHLT CODE ***}
//Position überprüfen
If (Form1.Top <= Form_Top) and (Form1.Left <= Form_Left) then
Timer1.Enabled := false;
end;
_TOP : begin
Form_Left := 0;
Form_Top := 0;
//Form bewegen
{*** HIER FEHLT CODE ***}
//Position überprüfen
If (Form1.Top <= Form_Top) and (Form1.Left <= Form_Left) then
Timer1.Enabled := false;
end;
_RIGHT : begin
//Variante 1 (Form links oben)
Form_Left := Screen.WorkAreaWidth - Width;
Form_Top := 0;
//Variante 2 (Form rechts unten)
//Form_Left := Screen.WorkAreaWidth - Width;
//Form_Top := Screen.WorkAreaHeight - Height;
//Form bewegen
{*** HIER FEHLT CODE ***}
//Position überprüfen
If (Form1.Top <= Form_Top) and (Form1.Left >= Form_Left) then
Timer1.Enabled := false;
end;
_BOTTOM : begin
Form_Left := Screen.WorkAreaWidth - Form1.Width;
Form_Top := Screen.WorkAreaHeight - Form1.Height;
//Form bewegen
{*** HIER FEHLT CODE ***}
//Position überprüfen
If (Form1.Top >= Form_Top) and (Form1.Left >= Form_Left) then
Timer1.Enabled := false;
end;
end;
end;
Der Code zum bewegen musst selber einfügen.