Results 1 to 3 of 3

Thread: WM_NCLBUTTONUP vuurt niet

  1. #1
    Senior Member DaSteelMan's Avatar
    Join Date
    Apr 2004
    Location
    Eys (LimboLand)
    Posts
    101

    Unhappy WM_NCLBUTTONUP vuurt niet

    Hallo,

    Ik wil een actie uitvoeren zodra de gebruiker na het verplaatsen van het hoofdscherm de muisknop loslaat.
    Hiervoor gebruik ik WM_NCLBUTTONUP.

    Code:
    procedure WMNCLButtonDown(var Msg: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
    procedure WMNCLButtonUp(var Msg: TWMNCLButtonUp); message WM_NCLBUTTONUP;
    
    …
    
    procedure TF_Main.WMNCLButtonDown(var Msg: TWMNCLButtonDown);
    begin
      // inherited;
    end;
    
    procedure TF_Main.WMNCLButtonUp(var Msg: TWMNCLButtonUp);
    begin
      if Msg.HitTest = HTCAPTION then Actie;
      inherited;
    end;
    Nu het vreemde.
    1- Zonder NCLBUTTONDOWN vuurt NCLBUTTONUP niet.
    2- Zonder inherited in NCLBUTTONDOWN kan ik het scherm niet meer verplaatsen.
    3- Met inherited vuurt NCLBUTTONUP niet.

    Heeft iemand hier een oplossing of andere methode voor?
    Achtbanen!
    Soms ben je er helemaal van ondersteboven...

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,372
    Quote Originally Posted by DaSteelMan View Post
    Nu het vreemde.
    2- Zonder inherited in NCLBUTTONDOWN kan ik het scherm niet meer verplaatsen.
    Dat is niet zo vreemd: Windows gebruikt WM_NCLBUTTONDOWN om te bepalen of de linker muisknop wordt ingedrukt
    terwijl de muis zich op de titelbalk (de "Non-client area") bevindt.
    Als dit zo is, dan moet (in potentie) het scherm van positie veranderen.

    Die message wordt afgevangen voordat Windows ermee aan de slag gaat: jij kunt dus nog gauw even wat dingen doen
    (binnen grenzen, je kunt niet zomaar van allerlei formgerelateerde dingen doen).
    Wanneer je klaar bent roep je inherited aan om Windows eindelijk zijn gang te laten gaan (het scherm verschuiven).

    Wat betreft bemerkingen 1 en 3:
    Ik denk dat je ergens in je WM_NCLBUTTONDOWN-event dingen doet die de rest van het Window-management in de war
    schopt, maar dat kunnen we op dit moment niet zien met dat kleine stukje code.
    TMemoryLeak.Create(Nil);

  3. #3
    Senior Member DaSteelMan's Avatar
    Join Date
    Apr 2004
    Location
    Eys (LimboLand)
    Posts
    101
    Hallo VideoRipper,

    Bedankt voor je reactie.
    Wat betreft 1 en 3, hier doe ik in de test niets meer of minder dan een showmessage().

    Terug naar mijn oorspronkelijke uitdaging: tijdens het verplaatsen van F_Main wil ik AutoCad maximaliseren, zonder de focus op F_Main te verliezen.
    Het lukte me wel om AutoCad op schermgrootte weer te geven, maar bij het maximaliseren van AutoCad (met SetWindowPlacement of ShowWindow) verloor F_Main focus en stopte het slepen. Daarom zocht ik ook naar een oplossing om code uit te voeren NA het loslaten van de muisknop.

    Met wat experimenteren heb ik gevonden dat ShowWindowAsync(AcadHwnd,SW_MAXIMIZE) wel het beoogde effect geeft. De focus blijft zo op F_Main...
    De muisplaatsing op de F_Main is na ShowWindowAsync(AcadHwnd,SW_MAXIMIZE) nog wel onvoorspelbaar maar ik heb in ieder geval een werkbare oplossing.
    Achtbanen!
    Soms ben je er helemaal van ondersteboven...

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •