webForumDet fria alternativet

Flytta en form utan ram...

Programmering

4 svar · 408 visningar · startad av trasher

Medlem sedan mars 200143 inlägg
Frågan#1

Går det att flytta en form som inte har en ram?

------------------

/Trasher a.k.a Kristian
Söderholm

Medlem sedan juni 2000350 inlägg
#2

type
TForm1 = class(TForm)
private
{ Private declarations }
Procedure WMNCHitTest( Var msg: TWMNCHitTest );
message WM_NCHITTEST;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
if Msg.Result = HTCLIENT then
Msg.Result := HTCAPTION;
end;
end.

Nu ska du kunna flytta formuläret utan att använda ramen.

Medlem sedan mars 200143 inlägg
#3

Det funkar ju men det ända problemet
då är ju att formen's knappar och dylikt
blir oanvändbara...
Du vet inte hur man kan göra samma sak
fast bara med den översta delen av rutan?

------------------

/Trasher a.k.a Kristian
Söderholm

Medlem sedan juni 2000350 inlägg
#4

Använd t.e.x en panel som "översta del" och använd följande i panelens OnMouseDown event.

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button = mbLeft then
begin
ReleaseCapture;
SendMessage(hwnd(self.Handle), WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
end;

Medlem sedan mars 200143 inlägg
#5

Tackar...
Nu fungerar det mkt bra.
Fast jag gjorde det på bilden som
föreställer en mac ram.

------------------

/Trasher a.k.a Kristian
Söderholm

259 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)