![]() |
Re: Drag Drop Sender 2x TListview Untescheidung
@marabu
genau --> Aus der Listview2 kommen dann Einträge hinzu. Innerhalb der Listview1 soll nur sortiert werden. @Lannes Zitat:
(hab´s trotzdem versucht...) Das mit Automatic hab ich auch in Zusammenhang damit versucht, bringt leider auch keine Änderung Wahrscheinlich habe ich mal wieder einen ganz anderen Bubu drin. Ich werd das jetzt mal außerhalb des Programms in einen Testprojekt erstmal richtig ausprobieren, um auszuschließen, das ich mir da selbst ein Bein stelle |
Re: Drag Drop Sender 2x TListview Untescheidung
Hallo,
Zitat:
Delphi-Quellcode:
//in DragDrop
if Source = Lavbel1 then begin caption := 'Label1'; //mach was mit Label1 end; //in DragOver if (Source = ListView1) or (Source = ListView2) or (Source = Label1) then |
Re: Drag Drop Sender 2x TListview Untescheidung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo padavan,
schau dir mal mein Demo-Projekt an. Damit wird vielleicht auch dein ListBox-Problem erklärt. Freundliche Grüße vom marabu |
Re: Drag Drop Sender 2x TListview Untescheidung
Ah zu spät, danke marabu.
Edit:(Mensch, du legst dich ja immer ins Zeug...) Jetzt hatte ich meins schon getippt, ich poste mal, evtl. ist´s hinfällig OK, jetzt poste ich doch mal alles. Hab´s am Anfang gelassen, da ich dachte das ich eine Prinzip Frage stelle, da ich aber nun merke, dass es nicht am Prinzip liegt, poste ich mal alles bzgl. des DragDrop Hab´s nämlich jetzt mal getrennt versucht, und da funktionieren Eure Lösungsvorschläge nämlich alle. Es liegt also irgendwo im Detail
Delphi-Quellcode:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if button = mbleft then Listview1.BeginDrag(false); end; procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if source is tfilelistbox then accept := true; if source is tlabel then accept := true; if source is tListview then accept := true; // nur versuch --> if (source = Listview1) and (Listview1.Dragging = true) then accept := true; // nur versuch --> if (source = Form_Listview2.ListView2) and (Form_Listview2.ListView2.Dragging = true) then accept := true; if source is tShellTreeView then accept := true; end; procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer); var i: integer; begin if source is tfilelistbox then titelwahl; if source is tlabel then titelwahl_label; if source is tShellTreeView then begin if Form_listview2.FileListBox2.Count > 0 then Form_Listview2.Titelwahltreeview; end; if source = Listview1 then begin if listview1.DropTarget.Index < Listview1.Items.Count then begin for i := 1 to Listview1.SelCount do begin listview1.items.Insert(Listview1.DropTarget.Index); Listview1.Items[listview1.DropTarget.Index - 1] := listview1.Selected; Listview1.Items[listview1.itemindex].free; end; end end; if source = Form_listview2.ListView2 then Form_Listview2.Titelwahl2; end; //auf einer anderen Form.... procedure TForm_Listview2.ListView2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbleft then Listview2.BeginDrag(false); end; procedure TForm_Listview2.Titelwahl2; var Item: TListItem; begin if Listview2.SelCount = 1 then begin if Form1.Label_Titel_Anzeige.Caption = '' then begin Form1.Label_Titel_Anzeige.Caption := Listview2.Selected.Caption; (* auf dateierweiterung prüfen *) Mediaendstr := extractfileext(Form1.Label_Titel_Anzeige.Caption); if (Mediaendstr = '.mpg') or (Mediaendstr = '.mpeg') or (Mediaendstr = '.avi') or (Mediaendstr = '.mpe') or (Mediaendstr = '.wmf') or (Mediaendstr = '.asf') then Mediaend := true else Mediaend := false; (*******************************) end else begin // Form1.ListBox1.Items.Add(Listview2.Selected.Caption) Form1.Listview1.Items.Add; Form1.Listview1.Items[Form1.Listview1.Items.Count -1 ].Caption := Listview2.Selected.Caption; end; end; if Listview2.Selcount > 1 then begin //Multiselect if Form1.Label_Titel_Anzeige.Caption = '' then begin Form1.Label_Titel_Anzeige.Caption := Listview2.Selected.Caption; (* auf dateierweiterung prüfen *) Mediaendstr := extractfileext(Form1.Label_Titel_Anzeige.Caption); if (Mediaendstr = '.mpg') or (Mediaendstr = '.mpeg') or (Mediaendstr = '.avi') or (Mediaendstr = '.mpe') or (Mediaendstr = '.wmf') or (Mediaendstr = '.asf') then Mediaend := true else Mediaend := false; (*******************************) screen.cursor := crhourglass; Item := ListView2.Selected; while Item <> nil do begin if (getasynckeystate(vk_escape) <> 0) then break; // Form1.ListBox1.Items.Add(Item.Caption); Form1.Listview1.Items.Add; Form1.Listview1.Items[Form1.Listview1.Items.Count -1 ].Caption := Item.Caption; Item := ListView2.GetNextItem(Item, sdAll, [isSelected]); end; // Form1.ListBox1.Items.Delete(0); // da dieser fälschlicherweise mit reingenommen wird Form1.ListView1.Items[0].Free; screen.cursor := crdefault; end else begin screen.cursor := crhourglass; Item := ListView2.Selected; while Item <> nil do begin if (getasynckeystate(vk_escape) <> 0) then break; // Form1.ListBox1.Items.Add(Item.Caption); Form1.Listview1.Items.Add; Form1.Listview1.Items[Form1.Listview1.Items.Count -1 ].Caption := Item.Caption; Item := ListView2.GetNextItem(Item, sdAll, [isSelected]); end; screen.cursor := crdefault; end; end; if (Fileexists(Form1.Label_Titel_Anzeige.Caption)) and (Startflag = false) then begin Form1.Speedbutton_start.Visible := true; Speedbutton_start2.Visible := true; end; Form1.Label_Titelanzahl_Anzeige.Value := Form1.Listview1.Items.Count; if Form1.Listview1.items.Count > 0 then Form1.RadioButton_TAGlist.Enabled := true; if Form_listview <> nil then Form1.RadioButton_TAGlistClick(self); end; Das Problem ergibt sich immer nur an dieser Stelle:
Delphi-Quellcode:
Diese Zeile wird immer ausgeführt, egal von wo ich dragge, Label, Listview, Treeview
if source = Form_listview2.ListView2 then Form_Listview2.Titelwahl2;
Aber warum Hab´s mit einer anderen Testlistview versucht, da funktionierts einwandfrei, nur bei der nicht. Das gibt´s doch nicht. Er führt die Prozedur aus, und dann gibt´s natürlich crash |
Re: Drag Drop Sender 2x TListview Untescheidung
Hallo padavan,
ändere deinen Code mal so ab:
Delphi-Quellcode:
Sollte das seltsame Verhalten durch einen wild pointer verursacht werden, dann könntest du das durch ein Umstellen deines Codes herausfinden:
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i: integer; begin if source is tfilelistbox then titelwahl else if source is tlabel then titelwahl_label else if source is tShellTreeView then begin if Form_listview2.FileListBox2.Count > 0 then Form_Listview2.Titelwahltreeview; end else if source = Listview1 then begin if listview1.DropTarget.Index < Listview1.Items.Count then begin for i := 1 to Listview1.SelCount do begin listview1.items.Insert(Listview1.DropTarget.Index); Listview1.Items[listview1.DropTarget.Index - 1] := listview1.Selected; Listview1.Items[listview1.itemindex].free; end; end; end else if source = Form_listview2.ListView2 then Form_Listview2.Titelwahl2 else end;
Delphi-Quellcode:
marabu
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i: integer; begin if source = Form_listview2.ListView2 then Form_Listview2.Titelwahl2 else if source is tfilelistbox then titelwahl else if source is tlabel then titelwahl_label else if source is tShellTreeView then begin if Form_listview2.FileListBox2.Count > 0 then Form_Listview2.Titelwahltreeview; end else if source = Listview1 then begin if listview1.DropTarget.Index < Listview1.Items.Count then begin for i := 1 to Listview1.SelCount do begin listview1.items.Insert(Listview1.DropTarget.Index); Listview1.Items[listview1.DropTarget.Index - 1] := listview1.Selected; Listview1.Items[listview1.itemindex].free; end; end; end else; end; |
Re: Drag Drop Sender 2x TListview Untescheidung
Marabu, du bist ´ne Wucht.
:firejump: Funktioniert prima, gleich beim ersten Ansatz. (Jetzt kann ich endlich in Ruhe an meiner eigentlichen Arbeit weitermachen. Schaltpläne zeichnen :cry: , -hat mir einfach keine Ruhe gelassen- ) Heute Abend mach ich mich gleich dran und schau mir an wie du das wieder gemacht hast. Viele Dank nochmal an alle :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 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