Difference between revisions of "Drag and Drop/de"

From Free Pascal wiki
m (Drag and Drop vom Explorer auf das Formular)
m
Line 8: Line 8:
 
=Grundlegendes zu Drag and Drop=
 
=Grundlegendes zu Drag and Drop=
 
Drag and Drop ist eine Methode zur Bedienung grafischer Benutzeroberflächen.<br>
 
Drag and Drop ist eine Methode zur Bedienung grafischer Benutzeroberflächen.<br>
Bei einem Drag and Drop Vorgang sind immer zwei Objekte beteiligt. Das sendende Objekt und das entgegenehmende Objekt.<br>
+
Bei einem Drag and Drop Vorgang sind immer zwei Objekte beteiligt. Das sendende Objekt und das entgegennehmende Objekt.<br>
 
<br>
 
<br>
  
 
=Drag and Drop innerhalb eines Formulars=
 
=Drag and Drop innerhalb eines Formulars=
 
<br>
 
<br>
Damit ein Objekt senden kann benötigt es genau ein Ereignis:<br>
+
Damit ein Objekt senden kann, benötigt es genau ein Ereignis:<br>
 
* OnMouseDown
 
* OnMouseDown
 
<br>
 
<br>
Damit ein Objekt empfangen kann benötigt es zwei Ereignise:<br>
+
Damit ein Objekt empfangen kann, benötigt es zwei Ereignise:<br>
 
* OnDragDrop
 
* OnDragDrop
 
* OnDragOver
 
* OnDragOver
 
<br>
 
<br>
==Das OnMouseDown Ereignis des sendenden Objekts==
+
==Das OnMouseDown-Ereignis des sendenden Objekts==
 
Beispiele wie ein OnMouseDown-Ereignis des sendenden Objektes aussehen kann:<br>
 
Beispiele wie ein OnMouseDown-Ereignis des sendenden Objektes aussehen kann:<br>
 
===Beispiel für ein Edit===
 
===Beispiel für ein Edit===
Line 138: Line 138:
 
=Drag and Drop vom Dateimanager auf das Formular=
 
=Drag and Drop vom Dateimanager auf das Formular=
 
Vorab:<br>
 
Vorab:<br>
Fast jedes Betriebsystem bringt einen oder mehrere Dateimanager mit, das heisst, das das Funktionieren von Drag and Drop nicht mit jedem Dateimanager garantiert werden kann.<br>
+
Fast jedes Betriebsystem bringt einen oder mehrere Dateimanager mit, das heisst, dass das Funktionieren von Drag and Drop nicht mit jedem Dateimanager garantiert werden kann.<br>
 
Dateimanager sind z. B.:<br>
 
Dateimanager sind z. B.:<br>
 
Explorer (Betriebsystem Windows), Nautilus (Betriebssystem Ubuntu), Dolphin, Konqueror, usw.<br>
 
Explorer (Betriebsystem Windows), Nautilus (Betriebssystem Ubuntu), Dolphin, Konqueror, usw.<br>

Revision as of 17:26, 5 September 2013

Deutsch (de)


Dieser Artikel beschäftigt sich mit der Windows- und der Linuxprogrammierung.
Dieser Artikel bezieht sich auf Lazarus Version 1.0.10 und höher.

Grundlegendes zu Drag and Drop

Drag and Drop ist eine Methode zur Bedienung grafischer Benutzeroberflächen.
Bei einem Drag and Drop Vorgang sind immer zwei Objekte beteiligt. Das sendende Objekt und das entgegennehmende Objekt.

Drag and Drop innerhalb eines Formulars


Damit ein Objekt senden kann, benötigt es genau ein Ereignis:

  • OnMouseDown


Damit ein Objekt empfangen kann, benötigt es zwei Ereignise:

  • OnDragDrop
  • OnDragOver


Das OnMouseDown-Ereignis des sendenden Objekts

Beispiele wie ein OnMouseDown-Ereignis des sendenden Objektes aussehen kann:

Beispiel für ein Edit

procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: integer);
begin
  if Button = mbLeft then
    Edit1.BeginDrag(False); // False, damit Drag and Drop erst nach einer Mausbewegung beginnt
end;


Beispiel für ein Memo

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    Memo1.BeginDrag(False);  // False, damit Drag and Drop erst nach einer Mausbewegung beginnt
end;


Die Ereignisse OnDragDrop, OnDragOver und EndDrag des empfangenden Objekts

Beispiel für ein Edit, wenn ein Edit der Sender ist

// Auswerten, ob es sich um den richtigen Sendertyp handelt
// und nicht, ob es sich um den richtigen Sender handelt
procedure TForm1.Edit2DragOver(Sender, Source: TObject; X, Y: integer;
  State: TDragState; var Accept: boolean);
begin
  if (Source is TEdit) then // Fragt den Objekttyp ab
    Accept := True; // Wenn der Objekttyp stimmt ist der Datensatz zu akzeptieren
end;

// Datenübernahme
procedure TForm1.Edit2DragDrop(Sender, Source: TObject; X, Y: integer);
begin
  if (Source is TEdit) then // Wenn der Objekttyp stimmt werden die Daten übernommen
    Edit2.Text := TEdit(Source).Text;
end;

// Fehlerauswertung
procedure TForm1.Edit2EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  if (Target = nil) then // Wenn beim Drag and Drop ein Fehlerauftritt
    Showmessage('Bei Drag and Drop ist ein Fehler aufgetreten.');
end;


Beispiel für eine Listbox, wenn ein Edit der Sender ist

// Auswerten, ob es sich um den richtigen Sendertyp handelt
// und nicht, ob es sich um den richtigen Sender handelt
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: integer;
  State: TDragState; var Accept: boolean);
begin
  if (Source is TEdit) then // Fragt den Objekttyp ab
    Accept := True; // Wenn der Objekttyp stimmt ist der Datensatz zu akzeptieren
end; 

// Datenübernahme
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: integer);
begin
  if (Source is TEdit) then // Wenn der Objekttyp stimmt werden die Daten übernommen
    Listbox1.Items.Add(TEdit(Source).Text); // Fügt den Text aus dem Edit hinzu
end;

// Fehlerauswertung
procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: integer);
begin
  if (Target = nil) then // Wenn beim Drag and Drop ein Fehlerauftritt
    ShowMessage('Bei Drag and Drop ist ein Fehler aufgetreten.');
end;


Beispiel für ein Treeview, wenn ein Edit der Sender ist

// Auswerten, ob es sich um den richtigen Sendertyp handelt
// und nicht, ob es sich um den richtigen Sender handelt
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: integer;
  State: TDragState; var Accept: boolean);
begin
  if (Source is TEdit) then // Fragt den Objekttyp ab
    Accept := True; // Wenn der Objekttyp stimmt ist der Datensatz zu akzeptieren
end;

// Datenübernahme
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: integer);
var
  tv: TTreeView;
  Knoten: TTreeNode;

begin

  tv := TTreeView(Sender);      // Sender is TreeView where the data is being dropped
  Knoten := tv.GetNodeAt(x, y);   // x,y sind die Drop Koordinaten im Baum des Treeview

  // Wenn der Objekttyp stimmt werden die Daten übernommen
  if Source is TEdit then
    // nun werden die Daten dem Knoten hizugefügt
    tv.Items.AddChild(Knoten, TEdit(Source).Text);

end;

// Fehlerauswertung
procedure TForm1.TreeView1EndDrag(Sender, Target: TObject; X, Y: integer);
begin
  if (Target = nil) then // Wenn beim Drag and Drop ein Fehlerauftritt
    ShowMessage('Bei Drag and Drop ist ein Fehler aufgetreten.');
end;


Drag and Drop vom Dateimanager auf das Formular

Vorab:
Fast jedes Betriebsystem bringt einen oder mehrere Dateimanager mit, das heisst, dass das Funktionieren von Drag and Drop nicht mit jedem Dateimanager garantiert werden kann.
Dateimanager sind z. B.:
Explorer (Betriebsystem Windows), Nautilus (Betriebssystem Ubuntu), Dolphin, Konqueror, usw.

Vorgehensweise:
Zu erst muss im Objektinspektor des Formulars im Register Eigenschaft die Eigenschaft AllowDropFiles auf True gesetzt werden.

DragDropEigenschaften.jpg

Dann wird im Objektinspektor des Formulars im Register Ereignisse das Ereignis OnDropFiles ausgewählt.

DragDropEreignisse.jpg

Um zum Beispiel die Dateien in einer ListBox an zuzeigen, wird für das Ereignis OnDropFiles folgender Code benötigt:

procedure TForm1.FormDropFiles(Sender: TObject; const FileNames: array of string);
var
  intI: integer = 0;
begin

  for intI := 0 to high(filenames) do
    listbox1.Items.Add(filenames[intI]);

end;



--Olaf 05:41, 10 July 2013 (UTC)