Einzelnen Beitrag anzeigen

100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#1

VST: Drag/Drop funktioniert nicht ganz

  Alt 14. Jul 2008, 20:46
Hallo,

Ich hab wiedermal ein VST-Problem

Also ich habe 2 VST auf einer Form. In der Rechten VST kann man nichts machen (Drag&Drop), man soll jedoch vom rechten VST markierte Einträge per Drag&Drop in den linken VST kopieren können. Ausserdem will ich im linken VST die Einträge innerhalb der Liste verschieben, also die Reihenfolge verändern können.
Beide Listen haben exakt die selben Eigenschaften, bis auf ein paar Ereignisse die der rechte VST zusätzlich besitzt.

Ich habe bei beiden Listen folgendes eingestellt:
Zitat:
ClipboardFormats: [Virtual Tree Data]
DragMode: dmAutomatic
DragType: dtOLE
Ich habe sehr lange rumprobiert, bis es shcliesslich (scheinbar) funktionierte:
Ach ja, Linke Liste = VST2, rechte Liste = VST1

Delphi-Quellcode:
type
  TArchiv = class(TComponent)
  private
    fFilename: String;
    fTitel: String;
    fInterpret: String;
    fAlbum: String;
    fGenre: String;
    fDauer: TTime;
    fBewertung: Integer;
    fCounter: Integer;
    fDatum: TDate;


    function getPlaylistname: String;
  published
    property Filename: String read fFilename write fFilename;
    property Titel: String read fTitel write fTitel;
    property Interpret: String read fInterpret write fInterpret;
    property Album: String read fAlbum write fAlbum;
    property Genre: String read fGenre write fGenre;
    property Dauer: TTime read fDauer write fDauer;
    property Bewertung: Integer read fBewertung write fBewertung;
    property Counter: Integer read fCounter write fCounter;
    property Datum: TDate read fDatum write fDatum;

    property Playlistname: String read getPlaylistname;

  public

end;
pArchiv = ^TArchiv;

//......

procedure TForm1.VST2DragDrop(Sender: TBaseVirtualTree; Source: TObject;
  DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState;
  Pt: TPoint; var Effect: Integer; Mode: TDropMode);
var
  selnode: PVirtualNode;
  Archiv: TArchiv;
begin
  with Sender as TVirtualStringTree do
  begin
    selnode := VST1.GetFirstSelected;
    while Assigned(selnode) do
    begin
      Archiv := TArchiv(VST1.GetNodeData(selnode)^);
      VST2.AddChild(nil, Archiv); // Kann der Fehler vielleicht an dieser Zeile liegen?!?! Nur so ein Verdacht^^
      selnode := VST1.GetNextSelected(selnode);
    end;
  end;
end;

procedure TForm1.VST2DragOver(Sender: TBaseVirtualTree; Source: TObject;
  Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode;
  var Effect: Integer; var Accept: Boolean);
begin
  if source = VST1 then
    if Assigned(VST1.FocusedNode) then accept := true;
end;
Ich kann vom VST1 Einträge in den VST2 kopieren, so wie es sein soll. Jedoch gibt es beim Beenden des Programms eine Fehlermeldung.
Zitat:
Invalid pointer operation
NodeDataSize habe ich bei beiden VSTs gesetzt.

Was ist an meinem Code falsch, bzw. warum erscheint dieser Fehler?

Ausserdem habe ich keine Ahnung wie ich das rumschieben ermöglichen kann, könnt ihr mir da bisschen auf die Sprünge helfen?
Also eigentlich kann ich schon FAST Einträge rumschieben, es kommt einfach sofort ein "Invalid pointer operation"^^

Wäre echt dankbar für Antworten!

P.S. habe übrigens lange gesucht, das problem ist nur dass viele ein anderes Vorhaben haben oder dass es völlig andere Lösungsansätze gibt, wobei meiner am besten gefällt

MFG
  Mit Zitat antworten Zitat