Difference between revisions of "Drag and Drop/de"
From Free Pascal wiki
Jump to navigationJump to searchm |
m |
||
Line 21: | Line 21: | ||
==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=== |
<syntaxhighlight> | <syntaxhighlight> | ||
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; | procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; | ||
Line 31: | Line 31: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
− | Beispiel für ein Memo | + | ===Beispiel für ein Memo=== |
<syntaxhighlight> | <syntaxhighlight> | ||
procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton; | procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton; | ||
Line 42: | Line 42: | ||
<br> | <br> | ||
==Die Ereignisse OnDragDrop, OnDragOver und EndDrag des empfangenden Objekts== | ==Die Ereignisse OnDragDrop, OnDragOver und EndDrag des empfangenden Objekts== | ||
− | Beispiel für ein Edit, wenn ein Edit der Sender ist | + | ===Beispiel für ein Edit, wenn ein Edit der Sender ist=== |
<syntaxhighlight> | <syntaxhighlight> | ||
// Auswerten, ob es sich um den richtigen Sendertyp handelt | // Auswerten, ob es sich um den richtigen Sendertyp handelt | ||
Line 69: | Line 69: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
− | Beispiel für eine Listbox, wenn ein Edit der Sender ist | + | ===Beispiel für eine Listbox, wenn ein Edit der Sender ist=== |
<syntaxhighlight> | <syntaxhighlight> | ||
// Auswerten, ob es sich um den richtigen Sendertyp handelt | // Auswerten, ob es sich um den richtigen Sendertyp handelt | ||
Line 89: | Line 89: | ||
// Fehlerauswertung | // Fehlerauswertung | ||
procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: integer); | 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; | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | <br> | ||
+ | ===Beispiel für ein Treeview, wenn ein Edit der Sender ist=== | ||
+ | <syntaxhighlight> | ||
+ | // 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 | begin | ||
if (Target = nil) then // Wenn beim Drag and Drop ein Fehlerauftritt | if (Target = nil) then // Wenn beim Drag and Drop ein Fehlerauftritt |
Revision as of 06:48, 11 July 2013
│
Deutsch (de) │
Dieser Artikel beschäftigt sich mit der Windowsprogrammierung.
Dieser Artikel bezieht sich auf Lazarus Version 1.0.8 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 entgegenehmende Objekt.
Damit ein Objekt senden kann benötigt es genau ein Ereignis:
- OnMouseDown
Damit ein Objekt empfangen kann benötigt es zwei Ereignise:
- OnDragDrop
- OnDragOver
Drag and Drop innerhalb eines Formulars
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;
--Olaf 05:41, 10 July 2013 (UTC)