Witam
Jak zrobić, żeby można było poruszać formą nie tylko za pasek, ale również łapiąć za samą forme.
znalazlem taki kod
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
I zbytnio nie wiem gdzie go wstawić
Witam
Jak zrobić, żeby można było poruszać formą nie tylko za pasek, ale również łapiąć za samą forme.
znalazlem taki kod
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
I zbytnio nie wiem gdzie go wstawić
Hmmm... Czegoś takiego nie znam, ale jest bardzo prosta metoda na to - szczegóły - źródło PilotMP3 (link w stopce), moduł Cocpit.pas, okolice "onMouseMove".
sesef napisał(a)
Witam
Jak zrobić, żeby można było poruszać formą nie tylko za pasek, ale również łapiąć za samą forme.
znalazlem taki kod
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
I zbytnio nie wiem gdzie go wstawić
To sie nie tak robi.
Umieść w w sekcji protected klasy formularza deklarację procedury:
protected
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
No i zaimplementuj procedurę:
procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
var
p:TPoint;
r: TRect;
begin
p.X:= Msg.XPos;
p.Y:= Msg.YPos;
p:= ScreenToClient(p);
r:= ClientRect;
if PtInRect(r, p) = True then
Msg.Result:= HTCAPTION
else
inherited
end;
W tym przykładzie, będzie można przesuwać za formularz chwytajac go za pasek lub, w dowolnym miejscu jego obszaru. Oczywiście można to zmienić, ale to już pozostawiam tobie. Chyba. że będziesz miał z tym problem to pisz.
I juz myślałem że bedzie dobrze:), ale po wrzuceniu tego kodu przestało działać mi PopUpMenu:(
ten kod ktory sam podales zastosuj w onMouseDown formy :)
W zdarzeniu OnMouseDown formy umieść:
if Button = mbLeft then
begin
releasecapture;
Perform (WM_SYSCOMMAND, $F012, 0);
end;
Od tej chwili możesz przesuwać formę po kliknięciu gdziekolwiek prawym klawiszem myszki. Możesz ten kod umieścić nie w zdarzeniu OnMouseDown formy, ale np. w zdarzeniu OnMouseDown panela - wtedy będziesz mógł przesuwać formę po "chwyceniu" za panel...