Results 1 to 12 of 12

Thread: TPanel Drag & Drop mogelijkheid

  1. #1
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289

    TPanel Drag & Drop mogelijkheid

    Hoi

    Ik probeer het volgende te realiseren maar weet niet of het mogelijk is.
    IK heb een panel en daarin zitten een aantal andere panels.

    De bedoeling is dat ik deze panels moet kunnen verplaatsen binnen het hoofdpanel (droppanel genoemd) maar ze mogen er niet uit (ook niet floating)

    Click image for larger version. 

Name:	TPanels.png 
Views:	44 
Size:	4.1 KB 
ID:	8327

    Ben er een beetje mee aan het stoeien maar tot op heden lukt het me niet eens ze op te pakken, laat staan ergens neer te zetten.

    Kan dit uberhaupt wat ik wil?

    Alvast bedankt
    Herby
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	TPanels.png 
Views:	39 
Size:	4.5 KB 
ID:	8326  

  2. #2
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    panelmove.zip

    Ik heb ooit iets geprobeerd in die richting (meer dan 10 jaar gelden :-)

    Gr. Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  3. #3
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    Quote Originally Posted by Wok View Post
    panelmove.zip

    Ik heb ooit iets geprobeerd in die richting (meer dan 10 jaar gelden :-)

    Gr. Peter
    Hoi Peter,

    Ik had al een soortgelijk voorbeeld gevonden maar loop tegen de nodige issues aan.
    Grootste probleem waar ik tegenaan loop is dat de panels (ben ook al met frames bezig geweest) een alignment alTop hebben en dan niet meer op te pakken zijn.

  4. #4
    Deze source werkt iets beter en krijg je het alTop idee. Mooiste zou zijn dat realtime visueel de overige panels ook mee schuiven.
    Kijk maar... Had er ook een keer mee gespeeld.
    Form zelf kan je zelf even maken. Lijkt mij niet zo lastig met vier panels.
    Gewoon panel 3 t/m 5 slepen naar andere positie.

    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, StdCtrls, ImgList, ActnList;
    
    type
      TForm1 = class(TForm)
        Panel3: TPanel; // alTop
        Panel4: TPanel; // alTop
        Panel5: TPanel; // alTop
        PanelClient: TPanel; // alClient
        procedure PanelTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
        procedure PanelTopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure PanelTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      StartX: Integer;
      StartY: Integer;
    
    implementation
    
    {$R *.DFM}
    
    procedure TForm1.PanelTopMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      DisableAlign;
      StartX := X;
      StartY := Y;
      (Sender as TPanel).Align := alNone;
      (Sender as TPanel).BringToFront;
    end;
    
    procedure TForm1.PanelTopMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      with Sender as TPanel do
        if ssLeft in Shift then { make sure button is down }
        begin
          left := left - StartX + X;
          top := top - StartY + Y;
        end;
    end;
    
    procedure TForm1.PanelTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      (Sender as TPanel).Align := alTop;
      EnableAlign;
    end;
    
    end.

  5. #5
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    ik heb dat stukje code geprobeerd maar ik kan geen enkel panel verplaatsen, laat staan oppakken

  6. #6
    Je moet even de property's van panel3 t/m 5 goed zetten.
    OnMouseDown, OnMouseMove en OnMouseUp.

  7. #7
    Hier de source in een zipje
    Attached Files Attached Files

  8. #8
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    Quote Originally Posted by DragonFly View Post
    Je moet even de property's van panel3 t/m 5 goed zetten.
    OnMouseDown, OnMouseMove en OnMouseUp.
    oh boy, dat was een stomme actie van me :-(

    Thx

  9. #9
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    Moet zeggen dat dit prima werkt, zelfs met mijn TFrame oplossing werkt het.

    Ben nu aan het stoeien met mijn TFrame. Als ik daar een TPanel op plaatst die dan weer alclient (voor de borders) dan selecteer je dus niet het TFrame maar het TPanel.
    Dan kun je hem dus niet meer oppakken.

  10. #10
    Dan zou je zoiets kunnen doen.
    Bijgeleverd: PanelMove2.zip

    Code:
    procedure TForm1.PanelTopMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      DisableAlign;
      StartX := X;
      StartY := Y;
      //(Sender as TPanel).Align := alNone;
      //(Sender as TPanel).BringToFront;
      (Sender as TPanel).Parent.Align := alNone;
      (Sender as TPanel).Parent.BringToFront;
    end;
    
    procedure TForm1.PanelTopMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      p: TWinControl;
    begin
      with Sender as TPanel do
        if ssLeft in Shift then { make sure button is down }
        begin
          P := (Sender as TPanel).Parent;
          P.left := P.left - StartX + X;
          P.top := P.top - StartY + Y;
        end;
    end;
    
    procedure TForm1.PanelTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      //(Sender as TPanel).Align := alTop;
      (Sender as TPanel).Parent.Align := alTop;
      EnableAlign;
    end;
    Attached Files Attached Files

  11. #11
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    289
    Quote Originally Posted by DragonFly View Post
    Dan zou je zoiets kunnen doen.
    Bijgeleverd: PanelMove2.zip
    Dat werkt prima, maar zodra je iets op het panel plaatst (dat verschilt per frame) dan krijg je op alles dat geen TPanel is een "invalid typecast".
    kleine check ingebouwd en dan gaat het goed.

    Code:
    procedure TForm1.PanelTopMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      DisableAlign;
      StartX := X;
      StartY := Y;
      if Sender is TPanel then
        begin
          (Sender as TPanel).Parent.Align := alNone;
          (Sender as TPanel).Parent.BringToFront;
        end;
    end;
    
    procedure TForm1.PanelTopMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      p: TWinControl;
    begin
      if Sender is TPanel then
        with Sender as TPanel do
          if ssLeft in Shift then { make sure button is down }
          begin
            P := (Sender as TPanel).Parent;
            P.left := P.left - StartX + X;
            P.top := P.top - StartY + Y;
          end;
    end;
    
    procedure TForm1.PanelTopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if Sender is TPanel then
        (Sender as TPanel).Parent.Align := alTop;
      EnableAlign;
    end;
    Uiteindelijk denk ik dat ik hier wel iets mee kan, bedankt.

    Gr
    Herby

  12. #12
    Klopt helemaal wat betreft die check en zo zullen er wel andere kleine dingetjes zijn of komen
    Groetjes.

Thread Information

Users Browsing this Thread

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

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
  •