![]() |
Variablen in Komponentennamen
Hi,
ich beschäftige mich erst seit kurzem mit Delphi und bringe mir das meiste selbst bei. Euer Forum ist wirklich nützlich und es hat mir schon einige Male geholfen. Jedoch habe ich für mein aktuelles Problem nur einen Beitrag gefunden ( ![]() Mein Problem ist, dass ich die Namen von Komponenten, in meinem Fall Shapes, am liebsten variabel halten würde. Ich habe zum Beispiel 30 verschiedene Shapes und möchte für jedes dieser Shapes die gleichen Anweisungen geben, z.B. dass jedes Shape bei einer Berührung mit einem andren die Richtung ändert(s. unten) . Ich habe als Beispiel für die 30 Shapes erstmal nur Shape2 genommen. In dem Quelltext unten wird geprüft ob das Shape2 die anderen an der rechten oder an der linken Seite berührt. Die Anzahl der anderen wird durch die Variable Anzahl gezählt. Es können bis zu 30 andere Shapes sichtbar sein, bei denen die Berührung überprüft werden muss. Diese Shapes sind Shape52-Shape81 . Das Programm zu starten klappt ohne Syntax, aber wenn ich den Button1 betätige, kommt jedes Mal die Meldung Zugriffsverletzung beim Schreiben und dann stehen da noch einige Adressen. Könnt ihr mir helfen, wie genau ich es schreiben muss mit Shape[i] ? Das wär super.
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag gefixt Mfg, mkinzler[/edit]
[...]
private Shape : Array of TShape ; end; VAR Anzahl : Integer ; [...] procedure TForm1.Button1Click(Sender: TObject); VAR i : Integer ; begin FOR i := 52 TO Anzahl + 51 DO begin IF Shape2.Left = Shape[i].Left + Shape[i].Width THEN dx := 1 ; //Richtungsänderung des Shape2 IF Shape2.Left + Shape2.Width = Shape[i].Left THEN dx := -1 ; //Richtungsänderung des Shape2 end; |
Re: Variablen in Komponentennamen
Form.FindComponent() oder besser beim Erzeugen gliech in Array legen
|
Re: Variablen in Komponentennamen
Deine Shapes heißen zwar Shape52 bis Shape81 jedoch wirst du sie in deinem Array bei 0 beginnend abgelegt haben. Deswegen musst du deine Schleife auch bei 0 beginnend bis Anzahl laufen lassen.
Edit: den höchsten Index eines dynamischen Arrays kannst du mit High(Array) herausbekommen. |
Re: Variablen in Komponentennamen
Wie legt man denn die Shapes als Array ab?
Ich kenne mich da noch nicht so aus ... so? :
Delphi-Quellcode:
FOR i :=1 TO 10 DO
begin Shape[i] := TShape.Create(self) ; |
Re: Variablen in Komponentennamen
Ja, dann hast du die Referenzen zu den einzelnen Shapeobjekten in dem Array gespeichert. Ich ging davon aus, weil du in einem obigen Quellcode ein Array of TShape stehen hast.
|
Re: Variablen in Komponentennamen
Ich versuche es schon die ganze Zeit hinzubekommen die einzelnen Shapes dem Array zuzuordnen, aber es klappt nicht:
Delphi-Quellcode:
Shape[1] := Shape52 ;
Shape[2] := Shape53 ; Shape[3] := Shape54 ; Shape[4] := Shape55 ; Shape[5] := Shape56 ; Shape[6] := Shape57 ; Shape[7] := Shape58 ; Shape[8] := Shape59 ; Shape[9] := Shape60 ; Shape[10] := Shape61 ; |
Re: Variablen in Komponentennamen
Setz mal ein
Delphi-Quellcode:
vor die Zuweisungen und verwende als Index für Shape 0..9!
SetLength(Shape, 10);
|
Re: Variablen in Komponentennamen
Hallo,
Du hast die Shape schon zur Designzeit erstellt - oder? Wenn ja könnte das helfen:
Delphi-Quellcode:
Grüße
for i:=0 to 9 do
begin shape[i]:=TShape(FindComponent('Shape'+IntToStr(52+i))); end; Klaus |
Re: Variablen in Komponentennamen
Dynamisch zum Beispiel so erstellen (sieht lsutig aus)
Delphi-Quellcode:
Sind dann von links oben nach rechts unten diagonal angeordnet.
var
i: Integer; begin SetLength(ShapeArray, 10); for i := 0 to High(ShapeArray) do begin ShapeArray[i] := TShape.Create(Self); TShape(ShapeArray[i]).Name := 'Shape' + IntToStr(i); TShape(ShapeArray[i]).Visible := TRUE; TShape(ShapeArray[i]).Height := 10; TShape(ShapeArray[i]).Width := 10; TShape(ShapeArray[i]).Left := 10 * i; TShape(ShapeArray[i]).Top := 10 * i; TShape(ShapeArray[i]).Shape := stRectangle; TShape(ShapeArray[i]).Brush.Color := clBlue; TShape(ShapeArray[i]).Parent := Self; TShape(ShapeArray[i]).Show; end; end; |
Re: Variablen in Komponentennamen
Super, jetzt klappt es.
Vielen Dank für die wirklich rasche Antwort ! :bounce2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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