Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Data (Pointer) (https://www.delphipraxis.net/69915-probleme-mit-data-pointer.html)

ranftl 22. Mai 2006 12:15


Probleme mit Data (Pointer)
 
Hallo zusammen!

Ich habe folgendes Problem ich habe ein ListItem, jetzte würde ich gerne in
Data was ja einen Pointer erwartet einen String abspeichern.

Also einfach in OnShow oder so abspeichern und irgendwann im Programm in einer
anderen Funktion wieder rausholen.

Leider jedoch klappt das gar nicht.
Kleiner Code Ausschnitt:

Delphi-Quellcode:
tmp := FieldByName('Test1').AsString + FieldByName('Test2').AsString;
ListItem.Data := Pointer(tmp);
wieder abrufen versuche ich folgendermaßen
Delphi-Quellcode:
tmp := String(ListItem.data);
Wobei tmp in beiden Fällen eine String-Variable ist.
Ich habe auch schon verschiedene Kombination mit den ^ und dem @ operatoren versucht.
Leider bis jetzt ohne Erfolg

Vielleicht könnte mir kurz mal jemand helfen
Danke

lg
ranftl

chaosben 22. Mai 2006 12:22

Re: Probleme mit Data (Pointer)
 
Hi ranftl!

Bei deinem Code existiert der String deiner Wünsche nur so lange, wie du in der Prozedur bleibst, in der dieser Code ausgeführt wird. Probier es lieber mal so (aus dem Kopf):
Delphi-Quellcode:
procedure TuWas;
var
  LText : PString;
begin
  New(LText);
  LText^:=FieldByName('Test1').AsString + FieldByName('Test2').AsString;
  ListItem.Data := Pointer(tmp);
end;

procedure HolDenText;
var
  LText : PString;
begin
  Ltext:=ListItem.Data;
  Self.Caption:=LText^;
end;

//und irgendwann noch den Text freigeben
// Dispose(PString(ListItem.Data));
Und wenn du mal Zeit hast, lies mal 1-2 Tutorials über Pointer. ;)

ranftl 22. Mai 2006 12:31

Re: Probleme mit Data (Pointer)
 
Hallo chaosben!

Danke für deine schnelle Antwort!
Klappt super!

Schönen Tag noch!
ranftl

Chatfix 23. Feb 2007 11:36

Re: Probleme mit Data (Pointer)
 
Muss ich Dispose auch machen wenn ich das ListItem lösche oder ListView.Clear mache oder ist es dann unnötig?
Un sollte nicht auch LText freigegeben werden?

chaosben 23. Feb 2007 16:59

Re: Probleme mit Data (Pointer)
 
Bevor du eine ListView.Clear machst (oder ein Item löschst), musst du natürlich alle Strings freigeben ... und das eben mit dem von dir angeführten Dispose.

Delphi-Quellcode:
Dispose(PString(ListItem.Data));

Chatfix 23. Feb 2007 18:28

Re: Probleme mit Data (Pointer)
 
Also muss ich vor dem Clear sämtliche ListItems durchlaufen?

Was passirt wenn ich das Programm ohne Dispose beende? Wird der Speicher dann freigegeben oder muss ich mich da auch drum kümmern?

Sorry hab noch nich so viel mit Pointern gemacht.

chaosben 24. Feb 2007 11:18

Re: Probleme mit Data (Pointer)
 
Ja, vor dem Clear müsstest du alle Items durchlaufen ... es sei denn, es gibt ein Ereigniss beim Freigeben eines Items (á la VirtualTree).

Und wenn du es nicht tust, sollte eigentlich Memoryleaks übrigbleiben. Am besten kann man das ab BDS4 mit dem Befehl
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown:=true;
testen.

Chatfix 24. Feb 2007 18:07

Re: Probleme mit Data (Pointer)
 
Woher weis ich ob dem Itemw as ich löschen will ein Pointer hinterlegt ist?
Wenns keinen gibt kommt nämlich eine Zugriffsverletzung.

Oder einfach zwischen try except schreiben?

Christian Seehase 24. Feb 2007 18:54

Re: Probleme mit Data (Pointer)
 
Moin Marcel,

bevor Du etwas freigibst, musst Du nur prüfen, ob etwas enthalten ist:

Delphi-Quellcode:
if Assigned(ListItem.Data) then

DGL-luke 24. Feb 2007 18:59

Re: Probleme mit Data (Pointer)
 
... was vorraussetzt, dass der pointer vor allocation / nach disposal ordentlcih genillt wird. Merke: Wilder Pointer gefährlicher als nil-Pointer! ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:06 Uhr.
Seite 1 von 4  1 23     Letzte »    

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