![]() |
Strings aus TListBox in Edit...
Wie erreiche ich es das der Benutzer meines Programmes die Strings aus einer TListBox mit Hilfe der Maus per Drag in ein Edit Feld seiner Wahl ziehen kann?
|
Re: Strings aus TListBox in Edit...
Hi,
einfach bei der Listbox die Eigenschaft DragMode auf dmAutomatic stellen, damit kannst du dann die Elemente per Drag&Drop bewegen. Wenn du nun ein Element per Drag über ein Controll ziehst, wird bei diesem Cotroll (z.B. einem TEdit) das OnDragOver-Ereignis ausgelöst. Hier musst du nur prüfen, wo das Objekt her kommt, dass dieses Ereignis ausgelöst hat. Wenn es die ListBox ist, setzt du accept auf True (du würdest ein Drag&Drop annehmen) und beim loslassen wird dann wiederum das OnDragDrop-Ereignis ausgelöst. Hier musst du nur noch den ausgewählten Text ins Edit eintragen. Also 3 Schritte, 1) Bei der Listbox DragMode auf dmAutomatic setzen 2) Beim Edit das Ereignis OnDragOver erstellen 3) Beim Edit das Ereignis OnDragDrop erstellen Dann sollte dein Code ungefähr so aussehen
Delphi-Quellcode:
Das war's schon. Achtung, hab im DragDrop jetzt nicht überprüft ob der Sender überhaupt eine Listbox ist und ob die Referenz darauf gültig ist, sollte man natürlich immer machen.
procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin if Source = ListBox1 then begin Accept := true; end; end; procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer); begin (Sender as TEdit).Text := ListBox1.Items[ListBox1.ItemIndex]; end; Gruß Der Unwissende |
Re: Strings aus TListBox in Edit...
Noch eine Ergänzung: wenn DragMode = dmAutomatic, dann muss man überlegen, was passieren soll, wenn der Benutzer aus dem leeren Teil der ListBox zieht. Und wie geht man um mit der Tatsache, dass kein oder mehrere Items selektiert wurden? DragItemIndex ist als private form variable zu deklarieren:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TDemoForm.EditDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin Accept := (Source is TListBox) // accept item from listbox only and (TListBox(Source).SelCount = 1) // drag one only and (DragItemIndex <> -1); // selection by mouse is mandatory end; procedure TDemoForm.EditDragDrop(Sender, Source: TObject; X, Y: Integer); begin with Source as TListBox do TEdit(Sender).Text := Items[DragItemIndex]; end; procedure TDemoForm.ListBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin DragItemIndex := ListBox.ItemAtPos(Point(X, Y), true); end; |
Re: Strings aus TListBox in Edit...
Kann ich das mit
Delphi-Quellcode:
usw... bei den Edits für alle Machen ich habe 24 Stück das ist ein wenig viel...
procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin if Source = ListBox1 then begin Accept := true; end; end; procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer); begin (Sender as TEdit).Text := ListBox1.Items[ListBox1.ItemIndex]; end; Und dann noch ich habe 2 mal Listboxen... Ich bin shcon am probieren mit der 1 Listbox geht es mit der 2 aber nett... :dp: |
Re: Strings aus TListBox in Edit...
Hi.
Zitat:
marabu |
Re: Strings aus TListBox in Edit...
Meine heisten ListBox1 und ListBox2 mit der 1 Listbox geht es nur wenn ich im Code die 1 durch 2 ersetzte geht es dann nicht...
|
Re: Strings aus TListBox in Edit...
Ich hab es jetzt so...
Delphi-Quellcode:
Meine Listboxen heisen Memo1 und Memo2.... Und jetzt bekomme ich die Meldung Listenindes übersteigt das Maximum (-1)...
procedure TForm2.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin (Sender as TEdit).Text := Memo1.Items[Memo1.ItemIndex]; (Sender as TEdit).Text := Memo2.Items[Memo2.ItemIndex]; end; procedure TForm2.Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if Source = Memo1 then begin Accept := true; end else if Source = Memo2 then begin Accept := true; end; end; |
Re: Strings aus TListBox in Edit...
Das Rätsel ist gelöst....
Delphi-Quellcode:
procedure TForm2.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin if Source = Memo1 then begin (Sender as TEdit).Text := Memo1.Items[Memo1.ItemIndex]; end; if Source = Memo2 then begin (Sender as TEdit).Text := Memo2.Items[Memo2.ItemIndex]; end; end; Jetzt muss ich das ganze nur noch auf 24 EditBoxen anwenden und volá ... :wall: :wall: :wall: :wall: :wall: |
Re: Strings aus TListBox in Edit...
Hai Knotti2005,
warum castest Du nicht auch Source auf ein TMemo (war da nicht vorher von einer ListBox die rede)?
Delphi-Quellcode:
procedure TForm2.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin (Sender as TEdit).Text := (Source As TMemo).Items[(Source As TMemo).ItemIndex]; end; Zitat:
|
Re: Strings aus TListBox in Edit...
Es sind doch ListBoxen als Komponenten nur sie heißen Memo* Weil an ihrer Stelle vor ich mit Memos experimentiert habe...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz