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:
if source = Form_listview2.ListView2 then Form_Listview2.Titelwahl2;
Diese Zeile wird immer ausgeführt, egal von wo ich dragge, Label, Listview, Treeview
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