Thema: Delphi Drag and drop

Einzelnen Beitrag anzeigen

Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#13

Re: Drag and drop

  Alt 14. Feb 2004, 10:45
Hallo Hansa

da ist ein Fehler drin (for i := 0 to lbSender.count-1 do begin - muß lbsource sein! ) und der schleifenaufbau mit einer for-schleife vorwärts führt dich eh in eine exception, rest sthet im Quelltext

Delphi-Quellcode:
procedure TForm1.ListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
//Procedure einmal in einer Listbox erstellt und umbenannt (1 entfernt)
var i,i2 : integer;
    lbSource,lbSender : TListBox;
begin
  lbSource := Source as TListBox;
  lbSender := Sender as TListbox;
  //Drag and drop der gleichen LB verhindern
  if lbSource <> lbSender then
    begin
      //items kopieren
      //du löschst items, deswegen müßte die for Schleife rückwärts zählen, dann würden die itmes aber spiegelverkehrt hinzugefügt
      //ich nehm da lieber eine while schleife, eine for-schleife macht dir das leben schwerer (finde ich)
      i:=0;
      while i<=lbSource.count-1 do //hier muß Source stehen, du willst von source nach Sender!
        begin
          if lbSource.Selected [i] then
            begin
              //Variante 1 = hinzufügen
              //lbSender.Items.Add(lbSource.Items[i]);

              //Variante 2 = Einfügen
              i2:=lbSender.ItemAtPos(point(x,y),false);
              lbSender.Items.insert(i2,lbSource.Items[i]);

              //Einträge in sourceListbox löschen
              lbSource.Items.Delete (i);
              continue; //inc(i) "überspringen" und mit gleichem item (wegen Löschung) weiterarbeiten
            end;
          inc(i);
        end;
    end;
end;
Zitat:
Und noch eine Kleinigkeit: markieren kann ich nur mit SHIFT+Pfeil. Mit der Maus geht das nicht.
bekommt man evtl auch hin, wenn du bei dragover Sender und source vergleichst, wenn gleich, dann ist es die gleiche listbox und kannst dann wieder mit itematpos arbeiten und die items markieren (nicht probiert, könnt mir aber vorstellen, das es so (oder so ähnlich )gehen könnte)

Zitat:
Allerdings wird er nicht compiliert. Wie oben zu sehen ist kommt "Fehler bei Typumwandlung"
probier das mal so:
Delphi-Quellcode:
procedure TForm1.StringGridDragDrop(Sender, Source: TObject; X,
  Y: Integer);
Var StSource,StSender:TStringGrid;

begin
  StSource := Source as TStringGrid;
  StSender := Sender as TStringGrid;

  //Zeile einfügen
  TStringGridExt(StSender).InsertRow (StSender.Row);
  //datenkopieren
  StSender.Rows[StSender.Row].Assign(StSource.Rows[StSource.Row]);
  //zeile löschen
  TStringGridExt(StSource).DeleteRow (StSource.Row);
end;
auch hier würdest du nurt eine Zeile hinzufügen, willst du mit alle markierten arbeiten willst, kannst du mit stringgrid-selection arbeiten um rauszufinden, welche Zellen markiert sind.

Beim stringrid ist bei mir das Problem, das wenn dmautomatic gesetzt ist, ich keine selektierungen mehr machen kann. sämtliche Klicks läßt es kalt und es will sofort draggen. da hab ich moment aber auch keine richtige Idee.

ansonsten hab ich mein Probeprojekt mal hinzu gefügt

Mfg Frank
Angehängte Dateien
Dateityp: zip hansa_668.zip (3,3 KB, 31x aufgerufen)

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat