Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variable in Shapenamen! (https://www.delphipraxis.net/142317-variable-shapenamen.html)

daNiii 26. Okt 2009 08:40


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?

wicht 26. Okt 2009 08:57

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:
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;
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.

Medium 26. Okt 2009 09:02

Re: Variable in Shapenamen!
 
Ansonsten ist Delphi-Referenz durchsuchenFindComponent hier auch immer gern empfohlen, allerdings lässt das dann relativ oft auf eine ungünstige Implementierung schließen. Wie erwähnt wäre hier möglicherweise dynamisches Erzeugen in ein Array of TShape der deutlich bessere Weg, und sehr oft (nicht immer) weist das Benutzen so vieler Shapes drauf hin, dass es letztlich besser wäre statt derer eine PictureBox zu nehmen, und selbst zu zeichnen.

daNiii 26. Okt 2009 09:10

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!

Medium 26. Okt 2009 09:27

Re: Variable in Shapenamen!
 
Zitat:

Zitat von daNiii
aber was bedeutet eigentlich [...]

Wann immer du dich das fragst, schreib es in ein Programm und Eff-Fucking-Eins! So schwer isset doch nicht. Wenn dann Detailfragen sind, ist die Forumstür weit geöffnet.

daNiii 26. Okt 2009 09:35

Re: Variable in Shapenamen!
 
danke
aber leider hatt der code trotzdem nicht funktioniert..

daNiii 26. Okt 2009 09:36

Re: Variable in Shapenamen!
 
Entschuldigung
funktioniert doch...
hatte einen blöden Fehler

daNiii 26. Okt 2009 18:21

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:
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;
weis jemand woran das liegen könnte?

mkinzler 26. Okt 2009 18:23

Re: Variable in Shapenamen!
 
Beim Löschen, die Schleife immer von hinten/oben nach vorne/unten laufen lassen!

daNiii 26. Okt 2009 20:31

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