![]() |
Wie wird aus einem String eine Anweisung?
Hallo liebe Spezialisten,
ich möchte mit FireMonkeyMobile eine variable Anzahl von Kreisen darstellen. Natürlich kann ich für jede Situation mit ButtonXClick jeden gewünschten Kreis einzeln mit visible ansprechen (Siehe script 1).
Delphi-Quellcode:
Eleganter und flexibler müsste das aber wie folgt gehen:
procedure TForm4.Button1Click(Sender: TObject);
begin circle2a.visible:=false; circle3a.visible:=false; circle4a.visible:=false; circle5a.visible:=false; circle6a.visible:=false; circle7a.visible:=false; circle8a.visible:=false; circle9a.visible:=false; circle10a.visible:=false; circle1a.visible:=true; end; procedure TForm4.Button2Click(Sender: TObject); begin circle3a.visible:=false; circle4a.visible:=false; circle5a.visible:=false; circle6a.visible:=false; circle7a.visible:=false; circle8a.visible:=false; circle9a.visible:=false; circle10a.visible:=false; circle1a.visible:=true; circle2a.visible:=true; end;
Delphi-Quellcode:
Im Label werden die Befehlszeilen aus dem vorherigen Code alle 1:1 abgebildet. Die Strings sehen optisch genauso aus wie
procedure TForm4.Button11Click(Sender: TObject);
var i,erg:integer; kurz:array[1..10] of string; begin i:=1; erg:=9; repeat kurz[i]:= ('circle'+inttostr(i)+'a.visible:=true;'); Application.ProcessMessages; sleep(1000); //zum Verfolgen der "automatisierten" Befehlszeilen label4.Text:= kurz[i]; inc(i); until i=erg+1; {circle10a.visible:=false; circle1a.visible:=true; circle2a.visible:=true; circle3a.visible:=true; circle4a.visible:=true; circle5a.visible:=true; circle6a.visible:=true; circle7a.visible:=true; circle8a.visible:=true; circle9a.visible:=true; } end; die Befehlszeilen (von Hand geschrieben). Wie mache ich nun aus den Strings Anweisungszeilen? 'kurz[i];' funktioniert jedenfalls nicht. |
AW: Wie wird aus einem String eine Anweisung?
Hallo,
FindComponent benutzen? Heiko |
AW: Wie wird aus einem String eine Anweisung?
Entweder die Circles in einem Array verwalten oder sich zur Laufzeit Referenzen auf die Objekte holen, in der VCL würde man das mit FindComponent bzw. FindControl machen.
|
AW: Wie wird aus einem String eine Anweisung?
Wenn ich zur Laufzeit Controls erzeuge, werde ich sie mit Sicherheit nicht hinterher mühselig mit 'FindComponent' suchen, sondern mir eher merken.
Und wenn ich sonst Controls bzw. Komponenten verwalten will, dann habe ich ihren Bezeichnernamen und kann den direkt ansprechen. Und wenn ich eine Gruppe von Controls erreichen will, dann kopiere ich mir die Referenzen in ein Array. FindComponent ist genauso überflüssig wie 'with'. Und eigentlich genauso 'böse' (*). Also lasst doch endlich mal den Tipp mit diesem FindComponent. (*) Wenn ich den Namen der Komponente ändere, funktioniert mein Programm nicht mehr. |
AW: Wie wird aus einem String eine Anweisung?
Erstellt man die Komponenten zur Laufzeit selbst, ist ein Array sicher die beste Lösung.
Andernfalls bietet sich auch diese Alternative an:
Delphi-Quellcode:
function TForm4.GetCircle(AIndex: Integer): TShape;
begin case AIndex of 1: Result := circle1a; 2: Result := circle2a; 3: Result := circle3a; 4: Result := circle4a; 5: Result := circle5a; 6: Result := circle6a; 7: Result := circle7a; 8: Result := circle8a; 9: Result := circle9a; 10: Result := circle10a; else Result := nil; // oder Exception auslösen end; end; procedure TForm4.SetCircleVisible(ACount: Integer); var i: Integer; begin for i := 1 to 10 do begin GetCircle(i).Visible := (i <= ACount); end; end; |
AW: Wie wird aus einem String eine Anweisung?
Zitat:
|
AW: Wie wird aus einem String eine Anweisung?
Zitat:
String bleibt und keine Anweisung wird. Als optische Darstellung, z.B. im Label, etc. ist das kein Problem. Aber ich benötige ja eine Anweisung. |
AW: Wie wird aus einem String eine Anweisung?
Nur Interpreter können zur Laufzeit erzeugte Kommandozeilen verarbeiten. Du arbeitest mit einem Compiler, deswegen musst du hier einen anderen Weg gehen.
EDIT: Blup hat in seinem Beispiel keine Strings, deswegen müsste das so schon funktionieren. |
AW: Wie wird aus einem String eine Anweisung?
Abgesehen vom "<=" Fehler
Zitat:
|
AW: Wie wird aus einem String eine Anweisung?
Zitat:
sString:='circle4a.visible:=true'; FühreBefehlAus(sString); Nur das das nicht funktionieren wird. Deswegen nochmal Blups-Variante anschauen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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