Einzelnen Beitrag anzeigen

padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Drag Drop Sender 2x TListview Untescheidung

  Alt 21. Okt 2005, 10:17
Ah zu spät, danke marabu.
EditMensch, 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
  Mit Zitat antworten Zitat