Verweis: | DragMode DragCursor |
Uses: | StdCtrls |
Eingabe: | dkDrag oder dkDock |
Ausgabe: | Bei dkDrag wird die Komponente im Fenster behalten bei Dock nicht. |
Funktion: | Bestimmt, ob die neue Komponente in ein Fenster verschoben wird. |
Beispiel 1
Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie ein TLabel und ein TPanel auf die Form. Erstellen Sie zusätzlich ein OnActivate-Ereignis.
procedure TForm1.FormActivate(Sender: TObject);
begin
Panel1.Align := alTop;
Panel1.DockSite := True;
Label1.Color := clYellow;
Label1.DragKind := dkDock;
Label1.DragMode := dmAutomatic;
Label1.AutoSize := False;
end;
Die DragKind Eigenschaft beschreibt, ob die Komponente verschoben werden soll oder nur eine Eigenschaft. Hier sollten zunächst einmal die Begriffe in Bezug aus das Dragging geklärt werden.
Drag und Drop
Man bezeichnet eine Verschiebe-Operation als Drag und Drop, wenn man nicht eine Komponente verschiebt, sondern nur einen Teil Ihrer Eigenschaft. Die Komponente selbst bleibt dabei an ihrem Platz. In diesem Fall benötigt man die Eigenschaft DragKind:=dkDrag. Diese Eigenschaft ist immer voreingestellt. Für diese Operation können Sie alle sichtbaren Komponenten benutzen.Sie können programmtechnisch nach dem Verschieben einen anderen Vorgang auslösen. Dies ist Jedoch unüblich.
Drag und Dock
Man bezeichnet eine Verschiebe-Operation als Drag und Dock, wenn man eine Komponente verschiebt. Hierbei geht es nicht um eine Änderung der Funktion der Komponente, sondern der Platzierung. Das Verschieben der Komponente ermöglicht es dem Benutzer die Anwendung individuell zu gestalten. Dies ist ein zweischneidiges Schwert.
Vorteile
Zum einen kann er festlegen wie seine Anwendung auszusehen hat. Im Fall einer Toolbar kann er sich eine Toolbar nach seinen Wünschen zusammenstellen und hat so die Befehle die er häufig benötigt.
Nachteile
Sollte jedoch der Wunsch nach einer anderen Funktion vorhanden sein, so könnte dieser beim Lesen der Anleitung ein wenig durcheinander geraten. Den hier geht die Anleitung von der Grundeinstellung des Programms aus. Mit der Grundeinstellung ist hier die Einstellung direkt nach der Installation gemeint. Wenn der Benutzer das Programm sehr häufig mit seinen Funktionen verwendet, dann wäre es sowieso besser im Hotkey-Tasten für die Verwendung der Befehle zur Verfügung zu stellen. Durch die Benutzung dieser Tasten ist der User ohne hin schneller, als durch das Benutzen mit der Maus.
Ein weiteres Problem ist ein Up-Date Ihres Programms. Soll die neue Funktion nun angezeigt werden oder nicht? Wenn ja, dann wohin? Ärgerlich ist es für den Benutzer wenn er nach dem Update wieder alles neu einstellen muss. Dies sind Dinge die Sie beim Verwenden der Drag und Dock-Operation berücksichtigen sollten.
Beschreibung des Beispiel
Beispiel 1
Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie drei TLabel und eine TListBox auf die Form. Wenn sie nicht wissen wie man mehrere Komponenten des gleichen Typs auf die Form bringt, dann schauen sie bitte hier. Erstellen Sie zusätzlich ein OnActivate-Ereignis für die Form. Erstellen Sie zusätzlich ein DragDrop und ein DragOver Ereignis für die ListBox1.
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: integer;
State: TDragState; var Accept: boolean);
begin
//Alle Label erlauben
Accept := Source is Tlabel;
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: integer);
begin
//Alle Label-Farben übernehmen
if Source is TLabel then
ListBox1.Color := (TLabel(Source).Color);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
//Alle Beteiligten Komponenten auf Automatik
Label1.DragMode := dmAutomatic;
Label2.DragMode := dmAutomatic;
Label3.DragMode := dmAutomatic;
Listbox1.DragMode := dmAutomatic;
//Das Label2 bekommt ein eigenes Fenster
Label1.DragKind := dkDrag;
Label2.DragKind := dkDock;
Label3.DragKind := dkDrag;
//Farbänderung
Label1.Color := clYellow;
Label2.Color := clAqua;
Label3.Color := clWhite;
end;
Dieses Programm hat eine starke Ähnlichkeit mit dem Programmen von DragCursor und DragMode. Weil dieses Wissen darauf aufbaut wäre es nicht schlecht, wenn Sie sich diese für Ihr Verständnis ansehen.