Poruszanie fomą nietylko za pasek

0

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ć

0

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".

0
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.

0

I juz myślałem że bedzie dobrze:), ale po wrzuceniu tego kodu przestało działać mi PopUpMenu:(

0

ten kod ktory sam podales zastosuj w onMouseDown formy :)

0

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...

1 użytkowników online, w tym zalogowanych: 0, gości: 1