![]() |
Variable in Shapenamen!
Hallo!
ich habe ein Programm mit 100 shapes. Die Shapes tragen den namen: Feld1, Feld2, Feld3 usw. jetzt möchte bei allen shapes die Farbe ändern. dazu habe ich folgenden Denkansatz: procedure form1.Farbe(); var I: integer begin for I := 1 to 100 do begin Feld+inttostr(I).brush.color:= clblack; end; end; Weis jemand warum das nicht geht? Und noch besser: weis wer wie man dieses Problem umgehen kann? |
Re: Variable in Shapenamen!
Morgen!
Erstmal, vielleicht solltest du dir mal anschauen, wie man Komponenten dynamisch erzeugt. Das hört sich nach einem ganz schönen Gewurschtel bei dir an. Nicht böse gemeint :) .. Zu deinem Problem: "Feld1" ist der Variablenname. Da kann man so nicht drauf zugreifen. Du könntest es so versuchen (ungetestet):
Delphi-Quellcode:
Ansonsten könntest du in der Schleife auch bei jedem Control die Eigenschaft "Name" überprüfen, ob der mit "Feld" beginnt. Aber das ist nicht so schön finde ich.
var
i: Integer; begin for i := 0 to Controls.Count - 1 do if Controls[i] is TShape then begin TShape(Controls[i]).Brush.Color := clBlack; end; end; |
Re: Variable in Shapenamen!
Ansonsten ist
![]() |
Re: Variable in Shapenamen!
hi!
danke! aber was bedeutet eigentlich "Controls.Count"? könntest du mir bitte noch die andere version aufschreiben? ich weis nicht genau was du damit meinst! danke! |
Re: Variable in Shapenamen!
Zitat:
|
Re: Variable in Shapenamen!
danke
aber leider hatt der code trotzdem nicht funktioniert.. |
Re: Variable in Shapenamen!
Entschuldigung
funktioniert doch... hatte einen blöden Fehler |
Re: Variable in Shapenamen!
hi!
dieser Programmiercode mit Controls[i] ist echt super! ich habe in heute schon des öffteren verwendet! leider funktioniert er aber nicht wenn ich die shapes löschen möchte!
Delphi-Quellcode:
weis jemand woran das liegen könnte?
procedure TForm1.Button4Click(Sender: TObject);
var i, Schleifenlaufzeit: integer; ini: TIniFile; begin ini:=TIniFile.Create(extractfilepath(application.exename) + 'schifferlversenken.ini'); Schleifenlaufzeit:= ini.ReadInteger('Einstellungen','Feldanzahl',0); i:= 0; while i < Schleifenlaufzeit+1 do begin if Controls[i] is TShape then begin tshape(Controls[i]).Destroy; inc(i); end; end; ini.free; end; |
Re: Variable in Shapenamen!
Beim Löschen, die Schleife immer von hinten/oben nach vorne/unten laufen lassen!
|
Re: Variable in Shapenamen!
hey danke!
wieder mal sehr hilfreich und aufleuchtend! aber habe wieder eine weitere Frage! ich habe die erfolgreich gelöscht und stelle sie wieder her! blöderweise aber nicht an der gleichen Stelle, obwohl ich zum Erstellen dieser Shapes die gleiche procedure verwende, siehe hier:
Delphi-Quellcode:
procedure TForm1.Spielbrettaufbauen();
var horizontal,vertikal: integer; //Feld: array of array of tshape; Feld: tshape; Feldnummer: integer; begin Feldnummer:= 0; for horizontal := 1 to Spalten do begin Feldnummer:= Feldnummer +1; Abstand_hor:= Abstand_hor + Breite; Abstand_ver:= Basis; for vertikal := 1 to Zeilen do begin Feldnummer:= Feldnummer +1; Abstand_ver:= Abstand_ver + Hoehe; //das Shape wird formatiert Feld := Tshape.create(self); Feld.Name:= 'Teil'+inttostr(Feldnummer); Feld.Parent:= form1; Feld.height:= Hoehe; Feld.width:= Breite; Feld.top:= Position_top + Abstand_ver; Feld.left:= Position_left + Abstand_hor; Feld.OnMouseUp:= Fillshape; end; end; end; Beim zweiten mal Erstellen, befinden sich meine shapes rechts genau neben den gelöschen shapes, welche man natürlich nicht mehr sieht. kann mir hier jemand helfen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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