AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag Drop Sender 2x TListview Untescheidung

Ein Thema von padavan · begonnen am 21. Okt 2005 · letzter Beitrag vom 21. Okt 2005
Antwort Antwort
Seite 2 von 2     12   
padavan

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

Re: Drag Drop Sender 2x TListview Untescheidung

  Alt 21. Okt 2005, 09:34
@marabu
genau -->
Aus der Listview2 kommen dann Einträge hinzu.
Innerhalb der Listview1 soll nur sortiert werden.

@Lannes
Zitat:
Delphi-Quellcode:
procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Source = ListView1) or (Source = ListView2) then
   Accept := True
   else
     Accept := False;
end;
das geht nicht, da dann andere DragDrop Operaton ja auch nicht mehr gingen. Kommen noch mehr dazu, aus Label usw.
(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
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#12

Re: Drag Drop Sender 2x TListview Untescheidung

  Alt 21. Okt 2005, 09:44
Hallo,
Zitat von padavan:
...das geht nicht, da dann andere DragDrop Operaton ja auch nicht mehr gingen. Kommen noch mehr dazu, aus Label usw.
das brauchst Du ja nur erweitern:
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
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Drag Drop Sender 2x TListview Untescheidung

  Alt 21. Okt 2005, 10:04
Hallo padavan,

schau dir mal mein Demo-Projekt an. Damit wird vielleicht auch dein ListBox-Problem erklärt.

Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip padavan2_137.zip (2,4 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
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
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Drag Drop Sender 2x TListview Untescheidung

  Alt 21. Okt 2005, 10:31
Hallo padavan,

ändere deinen Code mal so ab:

Delphi-Quellcode:
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;
Sollte das seltsame Verhalten durch einen wild pointer verursacht werden, dann könntest du das durch ein Umstellen deines Codes herausfinden:

Delphi-Quellcode:
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;
marabu
  Mit Zitat antworten Zitat
padavan

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

Re: Drag Drop Sender 2x TListview Untescheidung

  Alt 21. Okt 2005, 11:20
Marabu, du bist ´ne Wucht.

Funktioniert prima, gleich beim ersten Ansatz.

(Jetzt kann ich endlich in Ruhe an meiner eigentlichen Arbeit weitermachen.
Schaltpläne zeichnen , -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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz