AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [VST] Bei SaveNode mit TBitmap eine AV
Thema durchsuchen
Ansicht
Themen-Optionen

[VST] Bei SaveNode mit TBitmap eine AV

Ein Thema von Mikescher · begonnen am 29. Jul 2010 · letzter Beitrag vom 29. Jul 2010
Antwort Antwort
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#1

[VST] Bei SaveNode mit TBitmap eine AV

  Alt 29. Jul 2010, 11:44
Hallo,

bei der VST-Komponente (jetzt Version 4.8.5) ist es ja möglich über das Event OnSaveNode / OnLoadNode die einem Node mitgegebenen Daten mitzuspeichern wenn man den VST speichert.

für einen Integer in meinem Datenrecord schreibe ich dann so etwas:

Delphi-Quellcode:
procedure TForm1.VSTLoadNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
begin
  Data := VST.GetNodeData(Node);

  Stream.read(Data.Parts, SizeOf(Data.Parts));
end;

procedure TForm1.VSTSaveNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
begin
  Data := VST.GetNodeData(Node);

  Stream.write(Data.Parts, SizeOf(Data.Parts));
end;
Das funktioniert auch.

jetzt habe ich das Problem das in meinem Datenrecord sich auch ein TBitmap befindet, dieses speichere/lade ich jetzt so:
Delphi-Quellcode:
procedure TForm1.VSTSaveNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
  Len: integer;
begin
  Data := VST.GetNodeData(Node);

  Len := SizeOf(Data.Image);
  Stream.write(Len, Sizeof(Len));
  Stream.write(Data.Cover, SizeOf(Data.Image));
end;

procedure TForm1.VSTLoadNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
  Len: integer;
begin
  Data := VST_Movies.GetNodeData(Node);

  Data.Cover := TBitmap.Create;
  Len := Stream.Read(Len, SizeOf(Len));
  Stream.read(Data.Image, Len);
end;
Jedoch sobald ich dann auf das Bitmap zugreifen wie ( wie hier: ) gibt es eine AV
Delphi-Quellcode:
procedure TForm1.VSTClick(Sender: TObject);
var
  Node: PVirtualNode;
  Data: PTreeData;
begin
  Node:=VST.FocusedNode;
  if not Assigned(Node) then
    Exit;
  Data := vst.GetNodeData(Node);
  Image1.Picture.Bitmap := Data^.Image;
end;
Schonmnal im vorraus Danke für jede Hilfe
... Mike
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#2

AW: [VST] Bei SaveNode mit TBitmap eine AV

  Alt 29. Jul 2010, 20:12
Was ich jetzt gerade noch herausgefunden habe ist der seltsame Effekt, dass ich auch bei Data.Cover.free eine AV bekomme. obwohl ich das Bitmap ja eigentlich korrekt erzeuge.
Ich bin mit meinem Latein gerade ziemlich am Ende
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

AW: [VST] Bei SaveNode mit TBitmap eine AV

  Alt 29. Jul 2010, 20:42
Ein TBitmap hat doch ein SaveToStream? Nehm das doch anstelle dir den Krams da selber reinzuschreiben. Denn Length(TBitmap) bringt dir hier gar nichts. Du kannst keine Klassen in einen Memorystream schreiben. Daher mein rat nutzte Bitmap.SaveToStream
Lars
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: [VST] Bei SaveNode mit TBitmap eine AV

  Alt 29. Jul 2010, 20:49
Was mir auffällt, ist, dass du Data^.Cover zwar erzeugst, aber danach nichts mehr damit machst. Stattdessen lädst du die Bilddaten in Data^.Image. Ich weiß aber im Moment weder, was TTreeData.Cover ist, noch was TTreeData.Image ist, weil du leider die Definition nicht verraten hast. Es wäre hilfreich, wenn du die noch nachliefern würdest. Mir scheint aber, als würdest du die beiden Felder an einigen Stellen vermischen, was vermutlich zu dem Fehler führt.

Erwarten würde ich sowas:
Delphi-Quellcode:
procedure TForm1.VSTSaveNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
begin
  Data := VST.GetNodeData(Node);
  Data^.Cover.SaveToStream(Stream);
end;

procedure TForm1.VSTLoadNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Stream: TStream);
var
  Data: PTreeData;
  Len: integer;
begin
  Data := VST_Movies.GetNodeData(Node);
  Data^.Cover := TBitmap.Create;
  Data^.Cover.LoadFromStream(Stream);
end;
[edit]
Da kam kein roter Kasten
[/edit]
[edit2]
Wieso nutzt du eigentlich nicht die objektorientierte Variante? Mach es dir doch leichter und kapsel solche Angelegenheiten wie Erzeugen, Speichern und Laden.
[/edit2]

Geändert von Namenloser (29. Jul 2010 um 20:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#5

AW: [VST] Bei SaveNode mit TBitmap eine AV

  Alt 29. Jul 2010, 20:52
Danke daywalker9,

es funktioniert , wirklich vielen, vielen Dank .
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:42 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