Avatar billede Slettet bruger
28. december 2002 - 23:58 Der er 9 kommentarer og
1 løsning

Drag og drop panel

Hej

Spørgsmålet består i to dele.

Jeg har et MDIApplikation hvor 'moderformen' har et panel og en knap og et mdichild. Knappen skal kunne create et nyt (mindre, med bestemt størrelse) panel ovenpå panelet på moderformen. Det var altså første spørgsmål: Hvordan kan jeg create et nyt panel ved tryk på en knap og med det samme bestemme størrelsen og positionen for det nye panel?

Andet spørgsmål : Nu skal jeg også indbygge en funktion, så jeg trække det ny-lavede panel over i et helt tredje panel på MDIChild. Altså hvordan kan jeg dragge det nye panel hen over moderformen og ind i MDIChild og droppe det der (hvor det også bagefter skal kunne trækkes rundt) ?

Mine spørgsmål er lidt indviklede, men jeg håber virkelig på et svar, jeg har selv siddet og bikset med det hele dagen, men kan sq ikke finde ud af det :-(

Godt nytår, og tak for hjælpen

/Mikkel
Avatar billede dkn Nybegynder
29. december 2002 - 00:17 #1
Håber du kan bruge dette:

procedure TForm1.Button1Click(Sender: TObject);
var
  Panel: TPanel;
begin
  Panel := TPanel.Create(self);
  Panel.Cursor := crdrag;
  Panel.DragMode := dmAutomatic;
  Panel.DragKind := dkDock;
  Panel.Top := 10;
  Panel.Left := 10;
  Panel.Width := 50;
  Panel.Height := 25;
  Panel.Parent := Panel1;
end;




Du kan også prøve den her jeg lavede:
  .....
    procedure APanelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.APanelMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  (Sender as TControl).Perform(WM_SysCommand, SC_DragMove, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Panel: TPanel;
begin
  Panel := TPanel.Create(self);
  Panel.Cursor := crdrag;
  Panel.OnMouseMove := APanelMouseMove;
  Panel.Top := 10;
  Panel.Left := 10;
  Panel.Width := 50;
  Panel.Height := 25;
  Panel.Parent := Panel1;
end;


Sig til hvis der er noget som giver problemer
Avatar billede Slettet bruger
29. december 2002 - 12:35 #2
Mange tak for hjælpen. Så vil jeg lige spørge dig om en sidste ting så skal du nok få dine point. Hvordan kan jeg finde ud af hvilken MDIChild der er aktiv, altså hvilken af dem der arbejdes på, altså den øverste hvis du forstår?? For så vil jeg nemlig create panelet oven på den MDIChild der er aktiv.
Avatar billede dkn Nybegynder
29. december 2002 - 17:46 #3
MainForm.ActiveMDIChild .....
Avatar billede Slettet bruger
29. december 2002 - 20:41 #4
Jeg fandt selv ud af det med det aktive mdi.. osv. Tak for hjælpen dkn.
Avatar billede Slettet bruger
29. december 2002 - 20:43 #5
Nå jo.. En sidste ting, jeg ved godt at jeg har givet dig pointene, men jeg håber at du alligevel lige gider at sige mig hvordan jeg kan lave koden så man også kan dragge panelet ud af den mdichild hvor det blev dannet og hen i en anden. Hvis det ikke er et for stort problem.

/Mikkel
Avatar billede dkn Nybegynder
29. december 2002 - 20:49 #6
skal jeg nok, vil lige se på det
Avatar billede dkn Nybegynder
29. december 2002 - 21:20 #7
det er ikke særlig svært hvis du bruger delphis dock evner.

Først slår du UseDockManager fra, på alle ring (både den som skal flyttes og skal kunne modtage):
UseDockManager := false;

Panel som skal kunne flyttes:
Dragmode := dmAutomatic;
Dragkind := dkDock;

Modtager panel:
Docksite := True;

så skulle den være der.
Avatar billede dkn Nybegynder
30. december 2002 - 21:58 #8
fik du det til at virke?
Avatar billede Slettet bruger
30. december 2002 - 23:13 #9
Yeshyesh.. Jeg brugte ikke dock.
Avatar billede Slettet bruger
30. december 2002 - 23:15 #10
Eller jeg fik det ikke til at virke, jeg brugte ikke dock, for så bliver den til et vindue for sig, hvis jeg slipper den uden for docksite, og den ændrer størrelse og sådan noget når jeg slipper den inden for docksite, såh.. Men jeg fandt en anden måde at gøre det på.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester