AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable in Shapenamen!

Ein Thema von daNiii · begonnen am 26. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#1

Variable in Shapenamen!

  Alt 26. Okt 2009, 08:40
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?
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 08:57
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.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 09:02
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 09:10
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!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 09:27
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 09:35
danke
aber leider hatt der code trotzdem nicht funktioniert..
  Mit Zitat antworten Zitat
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 09:36
Entschuldigung
funktioniert doch...
hatte einen blöden Fehler
  Mit Zitat antworten Zitat
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 18:21
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 18:23
Beim Löschen, die Schleife immer von hinten/oben nach vorne/unten laufen lassen!
Markus Kinzler
  Mit Zitat antworten Zitat
daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Variable in Shapenamen!

  Alt 26. Okt 2009, 20:31
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:59 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