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