AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Variablen in Komponentennamen
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen in Komponentennamen

Ein Thema von kellerassel007 · begonnen am 12. Mai 2009 · letzter Beitrag vom 12. Mai 2009
Antwort Antwort
kellerassel007

Registriert seit: 12. Mai 2009
24 Beiträge
 
#1

Variablen in Komponentennamen

  Alt 12. Mai 2009, 12:41
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 (http://www.delphipraxis.net/internal...t.php?t=135654) .
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:
[...]
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;
[edit=mkinzler]Delphi-Tag gefixt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 12:46
Form.FindComponent() oder besser beim Erzeugen gliech in Array legen
Markus Kinzler
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 12:49
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
kellerassel007

Registriert seit: 12. Mai 2009
24 Beiträge
 
#4

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:01
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) ;
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:07
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
kellerassel007

Registriert seit: 12. Mai 2009
24 Beiträge
 
#6

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:16
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 ;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#7

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:23
Setz mal ein SetLength(Shape, 10); vor die Zuweisungen und verwende als Index für Shape 0..9!
Uwe Raabe
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:23
Hallo,
Du hast die Shape schon zur Designzeit erstellt - oder?

Wenn ja könnte das helfen:
Delphi-Quellcode:
for i:=0 to 9 do
  begin
    shape[i]:=TShape(FindComponent('Shape'+IntToStr(52+i)));
  end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:26
Dynamisch zum Beispiel so erstellen (sieht lsutig aus)
Delphi-Quellcode:
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;
Sind dann von links oben nach rechts unten diagonal angeordnet.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
kellerassel007

Registriert seit: 12. Mai 2009
24 Beiträge
 
#10

Re: Variablen in Komponentennamen

  Alt 12. Mai 2009, 13:29
Super, jetzt klappt es.
Vielen Dank für die wirklich rasche Antwort !
  Mit Zitat antworten Zitat
Antwort Antwort


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 14: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