Page 1 of 2 1 2 LastLast
Results 1 to 15 of 24

Thread: gemakkelijk componenten slepen

  1. #1

    gemakkelijk componenten slepen

    Declareer onder de 'OnMouseDown'-event van een component de volgende constante:

    Code:
    const lDragMove = $F012;

    en voer hierna de volgende code in onder de event:


    Code:
    begin
      ReleaseCapture();
      Button1.Perform(WM_SYSCOMMAND, lDragMove, 0); 
    end;
    voila,
    een bewegend component....
    Last edited by walterheck; 17-May-04 at 22:21.

  2. #2
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Heb geprobeerd de waarde te achterhalen, is niet helemaal gelukt, maar wel een alternatieve oplossing gevonden zonder 'magische getallen', vind het meestal wel leuk als ik ook daadwerkelijk weet wat ik perform



    Code:
    procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture();
      Button1.Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
    end;
    
    Qui custodiet ipsos custodes

  3. #3
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    whoah!


    Vul eens ipv HTCAPTION in 'HTBOTTOMRIGHT'



    [edit]

    Nog even een laatste opmerking: dit werkt alleen voor controls met een handle. Dat is dus excl. bv de TLabel. Jammer, anders had ik het antwoord op m'n vorige thread

    [/edit]
    Qui custodiet ipsos custodes

  4. #4
    Originally posted by PsychoMark


    Nog even een laatste opmerking: dit werkt alleen voor controls met een handle. Dat is dus excl. bv de TLabel. Jammer, anders had ik het antwoord op m'n vorige thread

    [/edit]
    Als ipv een label een statictext gebruikt (die volgens mij hetzelfde is als een label) dat heb je wel een handle....

  5. #5
    Het is ook wel makkelijk als je een andere 'caption'-balk wilt hebben.....

  6. #6
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Tja, maar mijn probleem was dat ik een TLabel wou omdat die transparant is
    Qui custodiet ipsos custodes

  7. #7
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    als je dat nog steeds wilt? ik heb code om een component (inclusief TLabel en TImage) te verplaatsen, resizen (met bijbehorende cursors) en zelfs een Rectangle er omheen te tekenen. Alleen een beetje tricky nog met comboboxen enzo, omdat die nog uitklappen
    war doesnt determine who's right.... just who's left.

  8. #8
    TNldPuinhoop pelleke's Avatar
    Join Date
    Apr 2002
    Location
    Den Haag! ! ! ! ! ! IDE: BDS 2007
    Posts
    409

    Moeilijk doen als 't ook makkelijk kan?

    Hoi mensen,

    Kan dit niet gewoon?

    Code:
    procedure TForm1.JvSizeablePanel1MouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      if ssleft in Shift then
      begin
        if OX=0 then OX:=X;
        if OY=0 then OY:=Y;
        JvSizeablePanel1.Left:=JvSizeablePanel1.Left+(X-OX);
        OX:=X-(X-OX);
        JvSizeablePanel1.Top:=JvSizeablePanel1.Top+(Y-OY);
        OY:=Y-(Y-OY);
      end;
    end;

    Pelle.
    Aut viam inveniam aut faciam!

    Google might answer your questions faster than me...

  9. #9
    Registered User
    Join Date
    Jun 2003
    Location
    Zuid-Holland
    Posts
    6
    Nog veel gemakkelijker:

    Code:
    procedure DragWindow( Handle : HWND );
    begin
     ReleaseCapture;
     SendMessage( Handle, WM_SYSCOMMAND, $F012, 0 );
    end;

    Super handig!
    Last edited by walterheck; 17-May-04 at 22:22.
    Erwin Haantjes

  10. #10
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    OkkieBokkie: voor componenten met een handle hadden we al code, het ging juist om componenten zonder handle
    Qui custodiet ipsos custodes

  11. #11
    Registered User
    Join Date
    Jun 2003
    Location
    Zuid-Holland
    Posts
    6
    Misschien kun je de DragMode van de TLabel op dmAutomatic zetten en dan op de DragOver event reageren. In de DragOver event zet je dan de positie van de label.
    Probeer het eens.
    Erwin Haantjes

  12. #12
    Om een popup venster totaal naar smaak aan te passen heb ik het volgende gebruikt om een image of label te verplaatsen. Had er toen nog niet zoveel verstand van en heb dus de code kant en klaar over genomen. Nadeel van deze procedure:
    De label is niet transparant tijdens verslepen. Maar alla, 't werkt toch he?

    Code:
    procedure TPopupSettingsForm.LbColorMouseDown(Sender: TObject;
       Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
       Dummy: TPanel;
       SavedCursor: TCursor;
    begin
       SavedCursor := Screen.Cursor;
       Screen.Cursor := crDrag;
       with TLabel(Sender) do
          begin
             Dummy := TPanel.Create(Owner);
             Dummy.Parent := Parent;
             Dummy.BevelOuter := bvNone;
             Dummy.Alignment := Alignment;
             Dummy.Caption := Caption;
             Dummy.SetBounds(Left, Top, Width, Height);
             Parent.Update;
          end;
       ReleaseCapture;
       Dummy.Perform(WM_SysCommand, $F012, 0);
       with Dummy do
          LbColor.SetBounds(Left, Top, Width, Height);
       Dummy.Free;
       Screen.Cursor := SavedCursor;
    
    end;
    edit: er hoeven geen property's worden aangepast.

  13. #13

    Componenten slepen

    pderuiter schreef:

    als je dat nog steeds wilt? ik heb code om een component (inclusief TLabel en TImage) te verplaatsen,....[/I]

    Beste pderuiter,

    Zou je deze code willen plaatsen?

    Ik heb me wezenloos gezocht om met de muis een TImage over het scherm te slepen. Ik werk nog met Delphi 3, dus DoubleBuffering() kan ik niet gebruiken.

    Groeten, HenkD.

  14. #14
    @HenkD: En die code die ik hier gepost heb?

  15. #15

    Component slepen

    Marcel0000,

    Jouw code werkt prima, maar tijdens het slepen zie je alleen het (grijze) panel, terwijl het plaatje zichtbaar moet blijven.
    Het plaatsen van een TImage op een bestaand TPanel heb ik ook geprobeerd, maar dan flikkert het plaatje als je het panel sleept.

    De opzet is onderdeel van een rekenprogramma voor kinderen waar zij zelf de som moeten invullen door de plaatjes naar de stippen te slepen:

    Je ziet vier getallen, b.v. 0 4 2 5

    en sleept die in de som: . x . = . . (opl.: 4 x 5 of 5 x 4 = 20)

    De andere voorbeelden voor componenten met een handle werken prima, dus een alternatief is het gebruik van een TMemo (er komen grote getallen in te staan, fontsize > 60). Met de anti-aliased routines van Psychomark en een kleurtje ziet het er dan gelikt uit, maar bij een TMemo kun je de tekst weer alleen horizontaal centreren en niet verticaal.

    Dus als iemand kan helpen?


    HenkD.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. RaveReport Runtime, componenten doorlopen.
    By Dees in forum Algemeen
    Replies: 6
    Last Post: 20-Jul-04, 19:32
  2. Replies: 7
    Last Post: 04-May-04, 15:44
  3. Turbopower componenten gratis
    By GolezTrol in forum Tools
    Replies: 0
    Last Post: 27-Mar-04, 19:24
  4. IBO Componenten installeren (en andere)
    By Dees in forum Algemeen
    Replies: 6
    Last Post: 18-May-03, 18:50

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
  •