Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Speicherzugriffsfehler bei Array of TButton (https://www.delphipraxis.net/130646-speicherzugriffsfehler-bei-array-tbutton.html)

Teekeks 11. Mär 2009 18:06


Speicherzugriffsfehler bei Array of TButton
 
Hi!
Ich will mir eine Classe erstellen in der ich u.a. ein Array of TButton habe.
Ich kriege nur einen Speicherzugriffs fehler wenn ich einen Button hinzufügen möchte:
Delphi-Quellcode:
  TButtons= class
  private
    FButtonList:TButtonList;
    FButtonIndex:Integer;
    FOwner:TObject;
  {...}
  public
    procedure AddButton;
    constructor create(Owner:TObject);
  {...}
  end;

implementation



{ TButtons }

procedure TButtons.AddButton;
begin
  inc(FButtonIndex);
  setlength(FButtonList,FButtonIndex);
  FButtonList[FButtonIndex].Button.Create(FOwner); //Hier kriege ich den Fehler
  FButtonList[FButtonIndex].Button.Parent:=FOwner;
end;

constructor TButtons.create(Owner:TObject);
begin
  FOwner:=Owner;
  FButtonIndex:=0;
end;
Weis jemand warum ich diesen Fehler kriege?
Achso: Aufrufen tu ich das so von ner anderen Form:
Delphi-Quellcode:
var Buttons:TButtons
{...}
  Buttons:=TButtons.create(Form1,form1,Form1);
  Buttons.AddButton;
gruß Teekeks

mkinzler 11. Mär 2009 18:09

Re: Speicherzugriffsfehler bei Array of TButton
 
Wie ist die Klasse TButtonList deklariert?

Teekeks 11. Mär 2009 18:10

Re: Speicherzugriffsfehler bei Array of TButton
 
so:
Delphi-Quellcode:
  TButtonlist=array of TButton;

DeddyH 11. Mär 2009 18:11

Re: Speicherzugriffsfehler bei Array of TButton
 
Was passiert, wenn Du das mal so versuchst?
Delphi-Quellcode:
FButtonList[FButtonIndex] := TButton.Create(FOwner);

messie 11. Mär 2009 18:11

Re: Speicherzugriffsfehler bei Array of TButton
 
Auf den ersten Blick fällt mir auf, dass Du Setlength() mit ButtonIndex aufrufst. Setlength ist nicht 0-indiziert.
Probier' mal
Delphi-Quellcode:
setlength(FButtonList,FButtonIndex+1);
Grüße, Messie

DeddyH 11. Mär 2009 18:12

Re: Speicherzugriffsfehler bei Array of TButton
 
Direkt davor steht doch
Zitat:

Delphi-Quellcode:
inc(FButtonIndex);

Also sollte das schon passen.

[edit] Aber stimmt, der Index beim Zugriff stimmt nicht, hier sollte man vielleicht lieber High() verwenden. [/edit]

Björn Ole 11. Mär 2009 18:12

Re: Speicherzugriffsfehler bei Array of TButton
 
Wenn du dein Array auf die Länge n setzt, ist der Index des letzten Elements n-1.

Teekeks 11. Mär 2009 18:19

Re: Speicherzugriffsfehler bei Array of TButton
 
Zitat:

Zitat von DeddyH
Was passiert, wenn Du das mal so versuchst?
Delphi-Quellcode:
FButtonList[FButtonIndex] := TButton.Create(FOwner);

Das:
Zitat:

Zitat von Lazarus
Error: Incompatible type for arg no. 1: Gor"TObject",expected "TComponent"

OK. ich hab eure varianten jetzt schon ausprobiert aber es Funktioniert trotzdem nicht :(

DeddyH 11. Mär 2009 18:21

Re: Speicherzugriffsfehler bei Array of TButton
 
Klar, Du hast FOwner ja auch als TObject und nicht als TComponent deklariert.

Teekeks 11. Mär 2009 18:25

Re: Speicherzugriffsfehler bei Array of TButton
 
Oops: ich hab zuviel weggekürzt: da stand:
Delphi-Quellcode:
    FComponent:TComponent;
    FWincontrol:TWincontrol;
{...}
  FButtonList[High(FButtonList)].Create(FComponent);
  FButtonList[FButtonIndex].Parent:=FWinControl;
{...}


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.
Seite 1 von 2  1 2      

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