Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei Zugriff auf Objektliste (https://www.delphipraxis.net/89067-fehler-bei-zugriff-auf-objektliste.html)

Coolspot 25. Mär 2007 16:06


Fehler bei Zugriff auf Objektliste
 
Also,

Ich habe eine Objektliste die sieht so aus:

var
Objects : Array [0..999] of TComponent;

In der Liste werden Alle zur Laufzeit erstellten Objekte gespeichert.
Das setzen der Eigenschaften funtioniert auch sehr gut, aber wenn ich probiere die Eigenschaften wieder zu lesen, bekomme ich immer einen Schönen Fehler:
"Access Violation at BLABLA read Adress 00000000" oder so

ich probiere es so:
showmessage(TWinControl(Objects[0]).Name);

ich habs auch schon über TypInfo probiert:
showmessage(GetPropValue(TWinControl(Objects[0]),'Name'));
das hat aber auch nicht funktioniert!

Ich wäre dankbar für eure Hilfe ;)

Christian Seehase 25. Mär 2007 16:16

Re: Fehler bei Zugriff auf Objektliste
 
Moin Coolspot,

wenn Du eine Array of TComponent hast, ist die Chance gross, dass

Delphi-Quellcode:
TWinControl(Objects[0]).Name
fehlschlägt, da TComponent nicht von TWinControl abgeleitet ist.

Hättest Du den Typecast nicht erzwungen, sondern dem Compiler die Chance gegeben den Typ zu prüfen:

Delphi-Quellcode:
(Objects[0] as TWinControl).Name
hätte der Compiler wohl auch, zu Recht, gemeckert.

Warum nimmst Du eigentlich nicht gleiche ein TObjectList?

cruiser 25. Mär 2007 16:24

Re: Fehler bei Zugriff auf Objektliste
 
Ich denk mal es geht um deine Python-IDE

Nimm eine TObjectList und speicher darin Klassen nach etwa dem Schema:

Delphi-Quellcode:
TPythonControl = class
private
  fComponentType : TCompoType; // TCompoType = (ctButton, ctEdit, ...);
  fComponentName : string;
  fIrgendeinAttribut : string;
  procedure SetIrgAttribut(Value: Integer);
  function GetIrgAttribut: Integer;
public
  property ComponentType: TCompoType read fComponentType write fComponentType;
  property ComponentName: string read fComponentName write fComponentName;
  property IrgendeinAttribut: Integer read GetIrgAttribut write SetIrgAttribut;
end;
In die Getter und setter baust du die Konvertierungen:
Delphi-Quellcode:
  procedure TPythonControl.SetIrgAttribut(Value: Integer);
  begin
    fIrgendeinAttribut := IntToStr(Value);
  end;

  function TPythonControl.GetIrgAttribut: Integer;
  begin
    Result := StrToInt(fIrgendeinAttribut);
  end;
Dazu speicherst du den Zeiger auf das VCL-Control in der Klasse und addest das ganze in die Liste, die Optimalerweise in einer Klasse eingebettet ist, welche das Formular der Python-Anwendung darstellt

Coolspot 25. Mär 2007 16:26

Re: Fehler bei Zugriff auf Objektliste
 
nee nee, jetzt funktionierts, ich weiß jetzt wo der Fehler lag :

ich Hatte es so ungefähr :
Delphi-Quellcode:
with PyCode.Lines do begin
  GetPropValue(TWinControl(Objects[Form3.LBobjects.ItemIndex]),'Name')
end;
und da kam der Fehler, weil "PyCode.Lines" hat kein "GetPropValue", deshalb der Fehler ;)

Aber trotzdem danke für eure Hilfe!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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