Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Per String Objekt ansprechen


yss - Do 26.05.11 13:30
Titel: Per String Objekt ansprechen
Hey Leute
Ich hab da mal ne Frage:
Ich habe 49 Bilder, die durchnummeriert sind: blatt1,blatt2,blatt3...blatt49.
Nun möchte ich über eine Randomfunktion diese zufällig ansprechen, aber wie mach ich aus einem String ein Objekt oder besser gesagt wie kann ich das Bild über meinen erstellten String ansprechen?
Hier der wichtige Code:

Delphi-Quelltext
1:
2:
blattN:=random(49)+1;
blatt:='blatt'+IntToStr(BlattN); //Hier wird der Name erstellt


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 26.05.2011 um 13:31


Narses - Do 26.05.11 13:32

Moin und :welcome: im Forum!

Du suchst Suche in: Delphi-Forum, Delphi-Library FINDCOMPONENT, damit kommst du weiter. :idea: :les: ;)

cu
Narses


HenryHux - Do 26.05.11 13:33

Meinst du TImages oder TBitmaps?
Bei beiden gibts Lösungen, die TBitmaps funktionieren auch super als Blatt : Array [1..49of TBitmap.
Verschiedene Komponenten kannst du mit FindComponent ansprechen.

lg


thepaine91 - Do 26.05.11 13:44

Die 1. Lösung wird schwierig da er die Bilder über den String ansprechen muss und das ist bei einem Array[0..48] schwierig.
Auser er steigt auf PHP um. :P
Also ich würde auch FindComponent vorschlagen ist zumindest am einfachsten.


yss - Do 26.05.11 13:55

Hey, also erstmal danke für die schnelle antwort.
Nun hab ich leider noch nen Problem. Habe mich leider vertan, sind keine Bilder sondern Shapes. Und leider ändert die procedure die Hintergrundfarbe vom Formfeld und nicht von dem Shape.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.waterliliesController(Sender: TObject);
var blattN:integer;
begin
  Randomize;
  blattN:=random(49)+1;
  if(blattN=43)or(blattN=7)then exit;
  with TShape(FindComponent('blatt'+IntToStr(blattN))) do
    begin
      color:=clGreen;
    end;

end;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


jaenicke - Do 26.05.11 13:58

Lass das dämliche with weg, dann merkst du auch warum das nicht geht... :roll:

TShape hat keine Eigenschaft Color...


HenryHux - Do 26.05.11 14:03

Genau, wenn du es mit Farbe füllen willst, dann kannst du das zum Beispiel mit dem Canvas machen.
Gibt es viele Dokumentationen zu.

lg


jaenicke - Do 26.05.11 14:24

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Genau, wenn du es mit Farbe füllen willst, dann kannst du das zum Beispiel mit dem Canvas machen.
:roll:
Wie wäre es ganz einfach mit Brush.Color...


thepaine91 - Do 26.05.11 14:36

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Lass das dämliche with weg, dann merkst du auch warum das nicht geht... :roll:


Schlecht gelaunt? ^^


jaenicke - Do 26.05.11 14:42

Nee, aber das with verursacht ständig bei irgendwem wieder mal Fehler, führt dazu, dass man nicht mehr ordentlich debuggen kann, ... und trotzdem wird es immer wieder benutzt und gezeigt, so dass es viele gleich sich angewöhnen, wenn sie Delphi lernen...
Und hinterher kommen dann wieder hunderte Fragen warum dies oder jenes nicht funktioniert. Deshalb reagiere ich auf with ein wenig allergisch. ;-)


thepaine91 - Do 26.05.11 14:58

Stimmt with kann wirklich einige Fehler hervorrufen. In dem Fall war es auch noch unsinnig wenn man sowieso nur eine Zeile Code hat. Somit kann ich das verstehen. ^^

Hat es jetzt eig. funktioniert? @Author