Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Drag'n'Drop (https://www.delphipraxis.net/79240-dragndrop.html)

mikegu 18. Okt 2006 19:42


Drag'n'Drop
 
Hallöle,

Ich bin ganz neu in die Delphi- Programmierung eingestiegen, und habe da so einige Probleme.
Ich muß für meine Technikerschule ein kleine Programm entwerfen und brauche dazu das "Drag and Drop" verfahren.
Ich habe es schon geschafft einen TButton zu verschieben :-D aber sobald ich es mit einem zweite versuche, springt immer derjenige, der an seinem Ort sitzen bleiben soll, zu dem Anderen :wall: . Kann mir da vieleicht jemand helfen?

Ich wäre Euch sehr Dankbar!!

semo 18. Okt 2006 19:47

Re: Drag'n'Drop
 
du musst schon genau sagen wann was wohin per drag&drop verschoben oder kopiert werden soll.....
und ein bissl quellcode wäre auch nicht schlecht

mikegu 18. Okt 2006 20:12

Re: Drag'n'Drop
 
Meine Panels Sollen auf meinem Formular an eine X-Beliebige Stelle Verschoben werden
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     If Button=mbleft Then
     Panel1.BeginDrag(false) ;
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
accept := (Source is TPanel);

end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Panel1.Left := x;
Panel1.Top := y;
Panel1.Parent := TWinControl(Sender);

end;

procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If Button=mbleft then
Panel2.BeginDrag(false);
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If button=mbleft then
Label1.BeginDrag(True)
end;
Hier ist jetzt nur einer drinnen. Aber sobald ein zweiter kommt, Setzt er sich auf den gleichen wie der erste

[edit=Phoenix]Nal die Code-Tags eingefügt. Mfg, Phoenix[/edit]

jfheins 18. Okt 2006 20:40

Re: Drag'n'Drop
 
Falls du die Jedis hast, kannst du TJvDesignSurface und TJvDesignPanel/Scollbox benutzen, die findest du unter RuntimeDesign ;)

semo 18. Okt 2006 21:56

Re: Drag'n'Drop
 
@jfheins: warum immer gleich Fremdkomponenten verwenden?

@mikegu: als erstes kann man den Quellcode, den man hier postet per "Delphi-Code"-Button formatieren, so das dieser dann für die Leser schön lesbar ist.

Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  If Button=mbleft Then
    Panel1.BeginDrag(false) ;
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  If Button=mbleft Then
    Button1.BeginDrag(false) ;
end;

procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  If Button=mbleft then
    Panel2.BeginDrag(false);
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  If button=mbleft then
    Label1.BeginDrag(True)
end;


procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  // beim Droppen müssen wir wie beim Ziehen der Komponenten
  // den Typ der Komponente beachten
  // (Typ TPanel, TButton und TLabel)
  if Source is TPanel then
  begin
    TPanel(Source).Left := x;
    TPanel(Source).Top := y;
    TPanel(Source).Parent := TWinControl(Sender);
  end else if Source is TButton then
  begin
    TButton(Source).Left := x;
    TButton(Source).Top := y;
    TButton(Source).Parent := TWinControl(Sender);
  end else if Source is TLabel then
  begin
    TLabel(Source).Left := x;
    TLabel(Source).Top := y;
    TLabel(Source).Parent := TWinControl(Sender);
  end;
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
  // wir erlauben das Ziehen von Komponenten
  // vom Typ TPanel, TButton und TLabel
  accept := (Source is TPanel) or
            (Source is TLabel) or
            (Source is TButton);
end;
So sollte das ganze funktionieren,
die wesentlichen Änderungen kannst du den Kommentaren im Quellcode entnehmen

mikegu 19. Okt 2006 18:30

Re: Drag'n'Drop
 
@ computer-glssar.de

Vielen herzlichen Dank :-D

Ich hoffe, ich komme jetzt weiter. Das mit dem "Delphi-Code"-Button habe ich nicht gewusst, aber ich werde es mir merken.

@jfheins

Auch bei dir vielen Dank. Auch wenn ich nicht weis was "TJvDesignSurface" ist. Aber es hört sich so an, als ob ich mich mal damit befassen sollte.

Wie gesagt, ich habe erst mit der Delphi- Programmierung angefangen und bin für jede Hilfe froh die ich bekomme!

Danke!! :lol:

semo 19. Okt 2006 18:36

Re: Drag'n'Drop
 
das isn Units/Komponenten die dir Hilfe abnehmen sollen.

Es ist aber besser dies mal alles zu Fuß zu erledigen, denn du willst ja lernen.

mikegu 19. Okt 2006 18:53

Re: Drag'n'Drop
 
Danke für diesen Tipp!!!

das Drag`n`Drop funktioniert sogar.
Jetzt muß ich erst einmel gucken was ich da für einen Mist gebaut habe :zwinker:

mikegu 19. Okt 2006 19:58

Re: Drag'n'Drop
 
@ computer-glossar.de
Kannst du mir vieleicht noch erklären warum mein Drag'n'Drop mit diesem Quellcode funktioniert,
Delphi-Quellcode:
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin

TPanel(Source).left := x;
TPanel(Source).top := y;
TPanel(source).parent := TWinControl(Sender);

end;
aber nicht mit dem aus meinen Büchern?

Bsp.:
Delphi-Quellcode:
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin

Panel1.left := x;
Panel1.top := y;
Panel1.parent := TWinControl(Sender);

end;
Würde mich echt mal interessieren was das "source" hier zu bedeuten hat.

Im übrigen, danke nochmal für die Hilfe. Ich bin echt begeistert :-D

semo 19. Okt 2006 21:11

Re: Drag'n'Drop
 
erst einmal: schön dass du das nun auch mit dem quellcode formatieren hier im forum gefunden hast :-)

Delphi-Quellcode:
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  TPanel(Source).left := x;
  TPanel(Source).top := y;
  TPanel(source).parent := TWinControl(Sender);
end;
bedeutet dass alle Nachfahren von TPanel auf deinem Formular gedroppt werden dürfen.
Wenn du jedoch
Delphi-Quellcode:
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  Panel1.left := x;
  Panel1.top := y;
  Panel1.parent := TWinControl(Sender);
end;
verwendest, erlaubst du nur dem Panel1 auf dem Form gedroppt zu werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz