AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Was stimmt hier nicht ? Probleme mit Pointer und dyn. Arrays
Thema durchsuchen
Ansicht
Themen-Optionen

Was stimmt hier nicht ? Probleme mit Pointer und dyn. Arrays

Ein Thema von TeTSuO · begonnen am 6. Mär 2005 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TeTSuO
TeTSuO

Registriert seit: 26. Feb 2005
Ort: Ludwigshafen am Rhein
60 Beiträge
 
Delphi 7 Enterprise
 
#1

Was stimmt hier nicht ? Probleme mit Pointer und dyn. Arrays

  Alt 6. Mär 2005, 12:33
Hallo Leute ich hab ein Problem!
Ich habe eine Treeview in der mehrere Elemente sind und ein dyn. Array welches für jeden Eintrag die daten enthalt diese werden mittels

TreeNode.Data := @Array[Index] and das TreeNode gehängt
Wenn ich nun ein Element auswähle und dieses mit

Delphi-Quellcode:
DeletePicture(TreeView.Selected.Data);
TreeView.Selected.Delete;
löschen will verschwindet es zwar in dem TreeView
wenn ich aber nun das letzte Element im TreeView auswähle
kommt ne Fehlermeldung

Meine Löschprozedur hab ich so programmiert

Delphi-Quellcode:
Function DeletePicture(PicInfo:Pointer): Boolean;
Var I,Index: Integer;
    ptr2: ^TPictureInfo;
Begin
 Result:=False;Index:=-1;
 For I:=0 to Count-1 do Begin
   ptr2:=@Picture[I];
   if PicInfo = ptr2 Then Index:=I;
 End;ptr2:=nil;
 if Index <> -1 Then Begin
   For I:=Index to high(Picture)-1 do
     Picture[I]:=Picture[I+1];
   SetLength(Picture,Count-1);
   Result:=True;
 End;
End;
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 13:04
Dein Codestil ist schrecklich unübersichtlich .
Ich weiß zwar nicht, was für ein Array Picture ist, aber könnte es sein, dass hier nur die Pointer zugewiesen werden?
Picture[I]:=Picture[I+1];
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von TeTSuO
TeTSuO

Registriert seit: 26. Feb 2005
Ort: Ludwigshafen am Rhein
60 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 13:18
Wieso schrecklich was gefällt dir an dem Code nicht?
Oder wie würdest du sowas schreiben ?

Delphi-Quellcode:
Function DeletePicture(PicInfo:Pointer): Boolean;
Var I,Index: Integer;
    ptr2: ^TPictureInfo; // Addresse auf Eintrag im Dyn. Array Picture
Begin
  Result:=False;Index:=-1;
  For I:=0 to Count-1 do Begin // Array durchlaufen
     ptr2:=@Picture[I]; // Addresse des Eintrags holen
     // wenn übergebende Addresse = Addresse des Eintrags speichere Index
     if PicInfo = ptr2 Then Index:=I;
  End;ptr2:=nil; //Pointer nicht mehr benötigt
  if Index <> -1 Then Begin
     //"Lücke" im Array mit nachfolgenden Füllen
     For I:=Index to high(Picture)-1 do
     Picture[I]:=Picture[I+1];
     SetLength(Picture,Count-1); //Array um eins kürzen
     Result:=True;
  End;
End;
Vielleicht jetzt verständlicher !
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 13:25
Ja, schon besser, aber in einer Zeile sollte eigentlich nur eine Anweisung stehen.
Delphi-Quellcode:
function DeletePicture(PicInfo:Pointer): Boolean;
var I,Index: Integer;
    ptr2: ^TPictureInfo; // Addresse auf Eintrag im Dyn. Array Picture
begin
  Result:=False;
  Index:=-1;
  for I:=0 to Count-1 do // Array durchlaufen
  begin
     ptr2:=@Picture[I]; // Addresse des Eintrags holen
     // wenn übergebende Addresse = Addresse des Eintrags speichere Index
     if PicInfo = ptr2 then
       Index:=I;
  end;
  ptr2:=nil; //Pointer nicht mehr benötigt
  if Index <> -1 then
  begin
     //"Lücke" im Array mit nachfolgenden Füllen
     for I:=Index to high(Picture)-1 do
       Picture[I]:=Picture[I+1];
     SetLength(Picture,Count-1); //Array um eins kürzen
     Result:=True;
  end;
end;
(Wie man die reservierten Wörter schreibt, ist mir eigentlich egal)

Mich würde aber eher interessieren, ob meine Vermutung stimmt .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von TeTSuO
TeTSuO

Registriert seit: 26. Feb 2005
Ort: Ludwigshafen am Rhein
60 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 13:58
Wenn ich im debugger schaue

Picture[I] := Picture[I+1]; ist picture[I] gefüllt mit den werten von Picture[I+1].
kann es sein das das Treeview beim löschen eines Nodes irgendwas mit der
Data-Eigenschaft macht
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 16:11
Moin!

Der TTreeNode macht garantiert nix mit der Data Eigenschaft. Dein Problem ist, das du in der Data Eigenschaft einen Zeiger auf einen Zeiger hinterlegst und das dynamische Array die Zeiger automatisch verschiebt/verkürzt und damit dein Zeiger auf ein anderes Element zeigt.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von TeTSuO
TeTSuO

Registriert seit: 26. Feb 2005
Ort: Ludwigshafen am Rhein
60 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 16:26
Ich habe das Problem jetzt anders gelöst
Ich benutze die Index Eigenschaft der TreeNodes für mein Array
Dieses muss ich halt genau so ändern wie sich die TreeView-Nodes ändern
Heist beim verschieben, kopieren und löschen Array anpassen
Ist zwar blöd aber es Funzt
Wenn einer ne andere Lösung hat kann er sie ja Posten
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 20:51
Moin!

Klar, leg kein extra Array an sondern pack die TPictureInfo direkt in die Data Eigenschaft...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von TeTSuO
TeTSuO

Registriert seit: 26. Feb 2005
Ort: Ludwigshafen am Rhein
60 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 21:52
Zitat von Muetze1:
Moin!

Klar, leg kein extra Array an sondern pack die TPictureInfo direkt in die Data Eigenschaft...

MfG
Muetze1
Wie soll das gehen? Data kann nur Pointer enthalten also müssen doch die Daten auch irgendwo gespeichert sein. Aber wo
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Was stimmt hier nicht ? Probleme mit Pointer und dyn. Ar

  Alt 6. Mär 2005, 22:45
Moin!

Na im Speicher...

Der Pointer kann doch auf einen Speicherbereich mit den Daten zeigen - was ist das Problem?

Zum Beispiel wenn dein TPictureInfo ein Record wäre:

Delphi-Quellcode:
Type
  PPictureInfo = ^TPictureInfo;
  TPictureInfo = Record
    FileName : String;
    WasAuchImmer: Integer;
  End;

....

Procedure TForm1.AddKnoten(Const AFileName, ACaption : String);
Var
  lInfo : PPictureInfo;
  lNode : TTreeNode;
Begin
  New(lInfo);
  lInfo.FileName := AFileName;
  
  lNode := Treeview1.Items.Add;
  lNode.Data := lInfo;
  lNode.Caption := ACaption;
End;

...

Procedure TForm1.FormDestroy;
Var
  lInfo : PPictureInfo;
Begin
  While ( TreeView1.Items.Count > 0 ) Do
  Begin
    lInfo := TreeView1.Items[0].Data;
    TreeView1.Items.[0].Delete;
    Dispose(lInfo);
  End;
End;
Der Code ist so mal schnell hingeklatscht, aber sollte das wichtige und wesentliche darlegen...

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:24 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