Hallo zusammen,
Ich habe eine Form mit borderstyle = bsnone. Nun habe ich ein TPanel mit Align=Client auf der Form. (Im Original Projekt ist es ein TRbPanel, mit Border). Das Vergrössern und Verschieben funktioniert eigentlich, doch wenn ich die form an dem ecken rechts oben oder unten "fasse", und mit der maus ein bisschen "herumfuchtele", und danach wieder loslasse bleibt die breite des fensters wie sie grad ist, aber die höhe verändert sich immernoch wenn ich die maus bewege, aber keine taste gedrückt halte.
Ist bisschen kompliziert zu erklären, darum habe ich ein testprojekt angehängt.
Also es funktioniert meistens, aber nicht ganz immer. woran kann das liegen?
hier der code den ich verwende: (wäre nett wenn jemand sagan kann ob/wie ich den code vereinfachen kann)
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (x<4) and (y<4) then //links oben
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F004, 0);
end;
if (x<4) and (y>3) and (y<form1.height-3) then //links
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F001, 0);
end;
if (x<4) and (y>form1.height-4) then //links unten
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F007, 0);
end;
if (x>3) and (x<form1.Width-3) and (y>form1.Height-4) then //unten
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F006, 0);
end;
if (x>form1.Width-4) and (y>form1.Height-4) then //rechts unten
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F008, 0);
end;
if (x>form1.Width-4) and (y>3) and (y<form1.Height-3) then //rechts
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F002, 0);
end;
if (x>form1.Width-4) and (y<4) then //rechts oben
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F005, 0);
end;
if (x>3) and (x<form1.Width-3) and (y<4) then //oben
begin
ReleaseCapture;
form1.Perform(WM_SYSCOMMAND, $F003, 0);
end
else
begin
//Fängt alle Mausereignisse ab
ReleaseCapture;
// mit TWinCotrol verschieben, $F012 verschiebt die Form
form1.Perform(WM_SYSCOMMAND, $F012, 0);
end;
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((x<4) and (y<4)) or ((x>form1.clientWidth-4) and (y>form1.clientHeight-4)) then // links oben, rechts unten
panel1.Cursor := crSizeNWSE
else
if ((x<4) and (y>3) and (y<form1.clientheight-3)) or ((x>form1.clientWidth-4) and (y>3) and (y<form1.clientHeight-3)) then // rechts, links
panel1.Cursor := crSizeWE
else
if ((x<4) and (y>form1.clientheight-4)) or ((x>form1.clientWidth-4) and (y<4)) then // links unten, rechts oben
panel1.Cursor := crSizeNESW
else
if ((x>3) and (x<form1.clientWidth-3) and (y>form1.clientHeight-4)) or ((x>3) and (x<form1.clientWidth-3) and (y<4)) then // unten, oben
panel1.Cursor := crSizeNS
else
panel1.Cursor := crDefault;
end;
Gruss
urbanbruhin