Code: Alles auswählen
case edit1.text of
'red' : label1.caption:='rot';
'green' : label1.caption:='grün';
'blue' : label1.caption:='blau';
else label1.caption:=edit1.text;
end;
Edit: Sinnvolle Parameter eingesetzt

Code: Alles auswählen
case edit1.text of
'red' : label1.caption:='rot';
'green' : label1.caption:='grün';
'blue' : label1.caption:='blau';
else label1.caption:=edit1.text;
end;
Das ist echt neu, obwohl man das vielleicht auch mit PtrInt-Typecasts in älteren Versionen basteln können (die Werte sind schließlich Konstanten). In der unit LCLProc habe ich die Funktion StringCase gefunden mit der man so was hätte realisieren können.Scotty hat geschrieben:Kann man sich drauf verlassen? Wegen der Delphi-Kompatibilität wohl dann, wenn es auch dort implementiert ist. Wäre eine nette Sache statt mehrfacher if then else
DAs heisst, es geht nur bei einem neueren FPC/Lazarus ?!Scotty hat geschrieben:Hiermit geht es schon mal nicht: Lazarus 0.9.28 r21921 FPC 2.2.4 i386-win32-win32/win64
Du liegst vollkommen richtig, da Lazarus als RAD/IDE keine Einfluss auf die Sprache hat. für die Übersetzung ist allein der Compiler verantwortlich.Ralph59 hat geschrieben:Jetzt habe ich damit den oben aufgeführten Test durchgeführt
case edit1.text...
hatte jedoch eine (mehrere) Fehlermeldung![]()
Dann bin ich her gegangen und habe ein simples Programm direct über fpc mit einer case of und writeln als Ausgabe laufen lassen.
Mit dem selben Resultat wie unter Lazarus. Welches mir eigendlich die Vermutung eher bestätigt, dass dieses feature eher vom compiler als vom Lazarus abhängig ist.
Liege hier falsch?
PS: Ich würde mir eine kleine udf schreiben, die mir das Problem über array's records oder Datentabellen sicher löst.
Mit freundlichem Gruß
Ralph
ich hatte dabei auch nicht an eine neue Unit gedacht, sondern, ich habe mir gedacht, wofür kann man so etwas gebrauchen. Dabei hatte ich zum Beispiel an ein mehrsprachiges Menue oder etwas in der Art gedacht.... Eine Unit musst du dir nicht extra schreiben, weil es die entsprechenden Funktionen für Strings und Klassen bereits gibt (unit LCLProc; Funktionsname siehe irgendwo oben).
Code: Alles auswählen
...
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
function acase(string1:string):string;
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
// anstelle von case ... of
label1.Caption:=acase(edit1.Text);
end;
function TForm1.acase(string1: string): string;
var
atext1, atext2: array[0..5] of string;
i:integer ;
begin
// Datenfelder könnte auch eine Datenbank mit 3 Feldern id, eglisch, deutsch sein
atext1[0]:='red';
atext2[0]:='rot';
atext1[1]:='blue';
atext2[1]:='blau';
atext1[2]:='green';
atext2[2]:='grün';
atext1[3]:='yellow';
atext2[3]:='gelb';
atext1[4]:='black';
atext2[4]:='schwarz';
atext1[5]:='orange';
atext2[5]:='orange';
Result := '';
for i := 0 to High(atext1) do begin
if atext1[i] = string1 then Result := atext2[i];
end;
if Result = '' then Result:='Hallo Test';
end;
...