![]() |
case mit einem in einem String gespeicherten Variablennamen
Hallo =)
Ich habe eine kleine Frage... kann man den Quelltext mit einer Prozedur vereinfachen, damit der case-Teil nicht 27-mal geschrieben werden muss? Habe schon im Forum gesucht, aber nichts gefunden.
Delphi-Quellcode:
Ich dachte an so ein Konstrukt:
with ImCube.Canvas do begin
case FUL of 1: Brush.Color := clWhite; 2: Brush.Color := clYellow; 3: Brush.Color := clGreen; 4: Brush.Color := clBlue; 5: Brush.Color := clRed; 6: Brush.Color := $000080FF; end; Rectangle(10, 64, 60, 114); //[...] und das jetzt bei 27 Variablen case RDR of 1: Brush.Color := clWhite; 2: Brush.Color := clYellow; 3: Brush.Color := clGreen; 4: Brush.Color := clBlue; 5: Brush.Color := clRed; 6: Brush.Color := $000080FF; end; Polygon([Point(196,128),Point(196,178),Point(214,160),Point(214,110)]); end;
Delphi-Quellcode:
procedure TForm1.SetColor(Seite: string);
begin with ImCube.Canvas do begin case Seite of 1: Brush.Color := clWhite; 2: Brush.Color := clYellow; 3: Brush.Color := clGreen; 4: Brush.Color := clBlue; 5: Brush.Color := clRed; 6: Brush.Color := $000080FF; end; end; end;
Delphi-Quellcode:
Aber das funktioniert so nicht, weil ich es nicht hinkriege, dass case die Variable ausliest, deren Name in dem String gespeichert ist und nicht versucht, den String selbst auszulesen. :coder2:
SetColor('FUL');
ImCube.Canvas.Rectangle(10, 64, 60, 114); //[...] SetColor('RDR'); ImCube.Canvas.Polygon([Point(196,128),Point(196,178),Point(214,160),Point(214,110)]); end; Habt ihr irgendwelche Tipps? Danke im Voraus steenvoortl |
Re: case mit einem in einem String gespeicherten Variablenna
warum machst du keine Function draus?
Als eingabewert kannst du ja einen Integer nehmen und als ausgabe TColor :wink: hoffe ich hab dich richtig verstanden ^^ |
Re: case mit einem in einem String gespeicherten Variablenna
Dein Code funktioniert höchstwahrscheinlich nicht, weil deine Case Struktur (wahrscheinlich) einen String als Variable bekommt und dann auf Integers (1,2,3,4, usw) überprüfen soll...wenn du ein bisschen genauer beschreiben könntest, was du machen willst, gibts bestimmt eine bessere Lösung :)
|
Re: case mit einem in einem String gespeicherten Variablenna
Manchmal sieht man den Wald vor lauter Bäumen nicht, oder?
Delphi-Quellcode:
procedure TForm1.SetColor(Seite: Integer);
begin with ImCube.Canvas do begin case Seite of 1: Brush.Color := clWhite; 2: Brush.Color := clYellow; 3: Brush.Color := clGreen; 4: Brush.Color := clBlue; 5: Brush.Color := clRed; 6: Brush.Color := $000080FF; end; end; end;
Delphi-Quellcode:
SetColor(FUL);
ImCube.Canvas.Rectangle(10, 64, 60, 114); //[...] SetColor(RDR); ImCube.Canvas.Polygon([Point(196,128),Point(196,178),Point(214,160),Point(214,110)]); |
Re: case mit einem in einem String gespeicherten Variablenna
Jo so gehts...
DANKE! :thumb: |
Re: case mit einem in einem String gespeicherten Variablenna
Zitat:
Gruß |
Re: case mit einem in einem String gespeicherten Variablenna
aus der D7-Hilfe:
Zitat:
|
Re: case mit einem in einem String gespeicherten Variablenna
Eine andere Möglichkeit wäre es, die Color-Werte als const-array zu hinterlegen und dann per Index darauf zuzugreifen. Beispiel:
Delphi-Quellcode:
Dann kannst du beispielweise so darauf zugreifen:
const FarbenArray : array[1..6] of TColor = (clWhite, clYellow, clGreen, clBlue, clRed, $000080FF);
Delphi-Quellcode:
So kannst du dir die zusätzliche Routine (und damit auch das case) sparen ;-)
ImCube.Canvas.Brush.Color := FarbenArray[FUL];
ImCube.Canvas.Rectangle(10, 64, 60, 114); //[...] ImCube.Canvas.Brush.Color := FarbenArray[RDR]; ImCube.Canvas.Polygon([Point(196,128),Point(196,178),Point(214,160),Point(214,110)]); MFG, Patti |
Re: case mit einem in einem String gespeicherten Variablenna
Zitat:
Wie schon richtig gesagt wurde... da hab ich wohl den Wald vor lauter Bäumen nicht gesehen :-D |
Re: case mit einem in einem String gespeicherten Variablenna
Wenn Du 27 einzelne Variablen hast, die irgendwie das gleiche (oder etwas ähnliches) darstellen, solltest Du über die Verwendung eines Arrays nachdenken.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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