![]() |
Steuerelementearray
Hallo!
Ich beginne gerade mit Delphi-Programmierung in Borland Delphi 7. Also bitte alles Schritt für Schritt erklären! Ich will das Spiel TicTacToe mit Steuerelementen-Arrays programmieren. Wie erstelle ich ein Steuerelementearray? :wall: Vielen Dank im Voraus! :duck: |
Re: Steuerelementearray
Kommt drauf an was du vor hast...
.. zB. array of TObject oder array of TComponent oder .... |
Re: Steuerelementearray
Hai mirko2000,
ersteinmal "Herzlich Willkommen in der Delphi-PRAXIS". Was genau verstehst Du denn unter einem "Steuerelementearray"? |
Re: Steuerelementearray
Zitat:
Mit meinem Kenntnisstand von Delphi müsste ich diese 9 mal selber schreiben. |
Re: Steuerelementearray
Zitat:
Tcomponent :gruebel: |
Re: Steuerelementearray
Zitat:
TObject = Basisklasse für alle Objekte TComponent = Basisklasse für Komponenten hier mal die Hierarchie der Klassen TObject -> TPersistent -> TComponent ..... es kommt drauf an welche Steuerelemente du nutzen möchtest |
Re: Steuerelementearray
Zitat:
|
Re: Steuerelementearray
Dann nimm array of TButton
|
Re: Steuerelementearray
Mir fällt da ein,
... du kannst ruhig array of TObject nutzen, weil in ein array von Objekten wird eh immer nur 4Byte pro Feld gespeichert, in jedem Feld steht dann die Adresse des Objektes du kannst deshalb auch array of pointer nutzen z.B.: Array delarieren:
Delphi-Quellcode:
einArray:array of pointer
Delphi-Quellcode:
mach es ruhig mit array of pointer.var meinObjekt:TMeineKlasse; begin .... for i := 0 to max do begin meinObjekt := TMeineKlasse.Create; einArray[i] := meinObjekt; end; .... end; da ist es egal welches steuerelment du in das array schreibst, da eh nur ein pointer drin steht gruß |
Re: Steuerelementearray
Zitat:
das Thema Casting und die Gefahren wurden in ![]() |
Re: Steuerelementearray
naja muss jeder selbst wissen wie er das machen möchte,
ich mach das mit dem Typcast und gebe auch den Speicher selbst wieder frei mann muß halt wissen was man da macht gruß tyrael |
Re: Steuerelementearray
wegn der übersichtlichkeit empfehle ich dir aber
in diesem Fall doch array of TButton zu nutzen |
Re: Steuerelementearray
Ich hab bis jetzt mal den Quellcode zusammengestellt:
Delphi-Quellcode:
*= in dieser Zeile fehlt wohl ein Paramteter: "AOwner: TComponent"
procedure TForm1.FormCreate(Sender: TObject);
var meinObjekt:TButton; var i : integer; const max : integer = 5; begin for i := 0 to max do begin meinObjekt := TButton.Create; // * einArray[i] := meinObjekt; end; end; Wenn ich aber das Programm laufen lassen will kommt die Meldung:
Code:
Was mach ich denn falsch?
[Fehler] Unit1.pas(41): Nicht genügend wirkliche Parameter
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Re: Steuerelementearray
so ist es richtig:
Delphi-Quellcode:
meinObjekt := TButton.Create(nil);
ist das array überhaupt deklariert? |
Re: Steuerelementearray
Hai mirko2000,
setze als Owner z.B. self.
Delphi-Quellcode:
meinObjekt := TButton.Create(self); // *
|
Re: Steuerelementearray
Zitat:
var einArray : array of TButton; Ist es das was du meinst? Wenn ich als Parameter 'self' oder 'nil' übergebe kommt diese Meldung:
Code:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0044D9F3 in Modul 'Project1.exe'. Schreiben von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fotsetzen.
|
Re: Steuerelementearray
1.
Zitat:
Zitat:
beide Versionen sind richtig. Unterschied: bei 1. die übergeordnete Komponente ist der parent wenn der parent gefreet wird ist auch dein Objekt frei bei 2. du musst das objekt selber befreien (Objekt.free), da es keinen parent hat |
Re: Steuerelementearray
Hai mirko2000,
Zitat:
|
Re: Steuerelementearray
jop :)
zb.
Delphi-Quellcode:
setlength(einArray, max);
|
Re: Steuerelementearray
Yuhuu! Es kommen jetzt zumindest keine Fehlermeldungen mehr!
Delphi-Quellcode:
Jetzt hab ich da noch eine (blöde) Frage: Ich hab ja jetzt in meinem Fall 9 TButtons mit den Namen einArray[0 bis 8] erstellt. Wie kann ich die denn jetzt auf meinem Formular anzeigen lassen?
var
Form1: TForm1; einArray : array of TButton; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var meinObjekt:TButton; var i : integer; begin SetLength(einArray,9); for i := 0 to 8 do begin meinObjekt := TButton.Create(self); einArray[i] := meinObjekt; end; end; end. |
Re: Steuerelementearray
einArray[HierNeZahl] ist jetzt gleichbedeutung mit ButtonX
also z.B.:
Delphi-Quellcode:
du kannst jetzt auf alle eigenschaften und methoden eines TButton zugreifen
einArray[0].show;
z.B. ebend auch auf show |
Re: Steuerelementearray
äh sry, TButton hat kein show
der parent muss noch gesetzt werden
Code:
procedure TForm1.FormCreate(Sender: TObject);
var meinObjekt:TButton; var i : integer; begin SetLength(einArray,9); for i := 0 to 8 do begin meinObjekt := TButton.Create(self); einArray[i] := meinObjekt; einArray[i].Parent := self; end; end; |
Re: Steuerelementearray
Verstehe ich das jetzt richtig, dass z. B. einArray[0] jetzt die gleich Eigenschaften und Methoden hat wie wenn ich ein Button auf mein Formular ziehe.
|
Re: Steuerelementearray
Hai mirko2000,
guckst Du:
Delphi-Quellcode:
[EDIT]Ich habe den Code eben noch erweitert. Jetzt hat jeder Button die selbe OnCLICK Funktion.[/EDIT]
var
Form1 : TForm1; einArray : array of TButton; implementation {$R *.dfm} procedure TForm1.MyButtonClick(Sender: TObject); begin ShowMessage ('Button ' + (Sender AS TButton).Caption); end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin SetLength(einArray, 9); for i := 0 to 8 do begin einArray[i] := TButton.Create(self); with einArray[i] do begin caption := IntToStr (i); left := (i * 55) + 80; top := 10; height := 30; width := 50; parent := self; visible := True; OnClick := myButtonClick; end; end; end; |
Re: Steuerelementearray
ja,
einArray[0] = Adresse zu einem TButton z.B.: Button1 = Adresse zu diesem Button wenn du jetzt die adresse von Button1 in einaray[0] schreiben würdest, dann ist Button1 = einArray[0] |
Re: Steuerelementearray
Es funktioniert jetzt einwandfrei und so wie ich es mir vorgestellt habe!
Danke an alle die mir geholfen haben! :party: |
Re: Steuerelementearray
Immer gerne :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz