AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi case mit einem in einem String gespeicherten Variablennamen
Thema durchsuchen
Ansicht
Themen-Optionen

case mit einem in einem String gespeicherten Variablennamen

Ein Thema von steenvoortl · begonnen am 13. Nov 2009 · letzter Beitrag vom 13. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
steenvoortl

Registriert seit: 13. Nov 2009
Ort: Duisburg
4 Beiträge
 
Lazarus
 
#1

case mit einem in einem String gespeicherten Variablennamen

  Alt 13. Nov 2009, 13:19
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:
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;
Ich dachte an so ein Konstrukt:

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

Habt ihr irgendwelche Tipps?

Danke im Voraus
steenvoortl
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#2

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 13:21
warum machst du keine Function draus?
Als eingabewert kannst du ja einen Integer nehmen und als ausgabe TColor hoffe ich hab dich richtig verstanden ^^
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 13:23
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#4

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 13:23
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)]);
Uwe Raabe
  Mit Zitat antworten Zitat
steenvoortl

Registriert seit: 13. Nov 2009
Ort: Duisburg
4 Beiträge
 
Lazarus
 
#5

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 13:34
Jo so gehts...

DANKE!
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#6

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 13:43
Zitat von steenvoortl:
Jo so gehts...

DANKE!
Hast du auch verstanden warum es so geht? 1,2,3,4.. sind Zahlen, keine Zeichenketten... Und mit Strings + case funktioniert generell so nicht.. Da musst du schonmal einen Blick in die Codelibrary werfen, wenn das so gehen soll.

Gruß
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 16:59
aus der D7-Hilfe:
Zitat:
case SelektorAusdruck of
caseList1: Anweisung1;
...
caseListn: Anweisungn;
end

... CaseListe muss von einem ordinalen Typ sein, der zum Typ von Selektor kompatibel ist......
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 17:04
Eine andere Möglichkeit wäre es, die Color-Werte als const-array zu hinterlegen und dann per Index darauf zuzugreifen. Beispiel:

const FarbenArray : array[1..6] of TColor = (clWhite, clYellow, clGreen, clBlue, clRed, $000080FF); Dann kannst du beispielweise so darauf zugreifen:

Delphi-Quellcode:
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)]);
So kannst du dir die zusätzliche Routine (und damit auch das case) sparen

MFG,
Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
steenvoortl

Registriert seit: 13. Nov 2009
Ort: Duisburg
4 Beiträge
 
Lazarus
 
#9

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 17:51
Zitat von Forlan:
Hast du auch verstanden warum es so geht? 1,2,3,4.. sind Zahlen, keine Zeichenketten... Und mit Strings + case funktioniert generell so nicht.. Da musst du schonmal einen Blick in die Codelibrary werfen, wenn das so gehen soll.

Gruß
Jo hab ich... nur bin ich irgendwie nicht auf die Idee gekommen, direkt den Wert der Variable an den Parameter der Prozedur zu geben, sondern hab irgendwie versucht, den Variablennamen an die Prozedur zu geben und da dann den Wert auszulesen xD

Wie schon richtig gesagt wurde... da hab ich wohl den Wald vor lauter Bäumen nicht gesehen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: case mit einem in einem String gespeicherten Variablenna

  Alt 13. Nov 2009, 18:00
Wenn Du 27 einzelne Variablen hast, die irgendwie das gleiche (oder etwas ähnliches) darstellen, solltest Du über die Verwendung eines Arrays nachdenken.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 11:50 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