Ich habe jetzt was gemacht.
Hier die neue Unit1:
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.ExtCtrls;
type
TForm1 =
class(TForm)
Panel1: TPanel;
Panel2: TPanel;
procedure FormCreate(Sender: TObject);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormResize(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
protected
procedure WmNCCalcSize(
var Msg: TWMNCCalcSize);
message WM_NCCALCSIZE;
end;
var
Form1: TForm1;
r : TRect;
rr : integer;
implementation
{$R *.dfm}
procedure TForm1.FormResize(Sender: TObject);
begin
if WindowState = wsMaximized
then
begin
padding.Right := rr;
padding.Bottom := rr;
end else
begin
padding.Right := 0;
padding.Bottom := 0;
end;
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
const
sc_DragMove = $f012;
begin
ReleaseCapture;
Perform(wm_SysCommand, sc_DragMove, 0);
end;
procedure TForm1.WmNCCalcSize(
var Msg: TWMNCCalcSize);
begin
Msg.Result := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(
Handle
,GWL_STYLE
,WS_CLIPCHILDREN
or WS_OVERLAPPEDWINDOW
);
AdjustWindowRectEx(R, GetWindowLong(
Handle, GWL_STYLE), False, GetWindowLong(
Handle, GWL_EXSTYLE));
rr := trunc(r.width/2);
// <- trunc/ceil/Floor/round???
end;
end.
Also in "r.width" habe ich 26. Das sind dann wohl 13 Pixel Breite für den Fensterrahmen? Wenn dieser Wert aus einem Breitenwert (dann x 2) berechnet wird, dann geht die Zahl ja immer auf. Also kann man es gut teilen. Bin mir aber nicht sicher, ob das auch so ist. Nicht das 27 mal als Ergebnis zurück geliefert wird.
Das Ergebnis beim maximieren schaut gut aus (nutze den Wert für's padding). Glaubt ihr damit könnte man arbeiten? Das sind immer so Sachen, die ich aber nicht gerne mache... am Ende gibt's evtl. beim Anwender unterschiede.