| Autor |
Beitrag |
Blackout
      
Beiträge: 64
|
Verfasst: Mo 10.03.03 23:29
hi leute,
ich habe gerade mal eine Frage zur Case Anweisung.
Unszwar wollte ich folgendes mal probieren:
Quelltext 1: 2: 3: 4:
| Case edit1.text Of 'test': ShowMessage('Test'); 'exit': Application.Terminate; End; |
Das will irgendwie nicht funktionieren
Wie geht das genau mit Strings?
Mit Integern gehts:
Quelltext 1: 2: 3: 4:
| Case I Of 1: ShowMessage('Eins'); 2: ShowMessage('Zwei'); End; |
Und noch ne Frage:
Kann man zum Beispiel folgendes machen?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Case I Of 1: Begin // Code End; 2: Begin // Code End; End; |
Danke schonmal im Vorraus
_________________ MfG Blackout
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mo 10.03.03 23:34
Es geht nicht mit Strings. Es geht aber mit Integer's und Char's, also:
Quelltext 1: 2: 3: 4: 5:
| case Integer of 1: ... 2: ... 3, 4: ... usw. |
oder
Quelltext 1: 2: 3: 4: 5:
| case Char of 'a': ... 'b': ... 'c', 'd': ... usw. |
Für Strings mußt du schom if-Abfragen oder CompareText oder CompareStr nehmen.
_________________ Popov
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mo 10.03.03 23:40
hallo blackout!
nachdem popov schneller als ich geantwortet hatte, beschränke ich mich auf deine 2. frage:
ja, es funktioniert so:
Quelltext 1: 2: 3: 4: 5:
| case x of 1: begin... irgendwas... end; end; |
darf ich mal was fragen?
warum probierst denn solche sache nicht aus, bevor du im forum nachfragst? meistens kommt man doch durch try und error viel schneller zum ziel, oder ?
mfg, stefan
|
|
Blackout 
      
Beiträge: 64
|
Verfasst: Mo 10.03.03 23:49
@grayfox
ja du hast recht ich habs auch erst selbst probiert aber mit nem String hab ich es einfach nicht zum laufen gebracht ich dachte das geht.
Und das mit Begin und End das is mir beim Schreiben des Beitrags eingefallen
@popov
Mit Char's bekomme ich immer nur einen Buchstaben eines Textes heraus
Wie soll das denn mit CompareText oder CompareStr gehen?
_________________ MfG Blackout
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 11.03.03 08:35
Ist deine F1-Taste auch kaputt?
| die Delphi-Hilfe hat folgendes geschrieben: | Beschreibung
CompareText vergleicht S1 mit S2 und gibt 0 zurück, wenn beide identisch sind. Ist S1 größer als S2, wird ein Integer-Wert größer als 0 zurückgegeben. Ist S1 kleiner als S2, ist der Rückgabewert kleiner als 0. |
usw.
Kurz gesagt: mit der Funktion bekommst du maximal nur 3 Zustände geliefert - der String #1 ist kleiner, gleich, oder größer als String #2. Ich glaube nicht, dass das für eine "case"-ähnliche Abfrage reicht. Daher würde ich, wohl oder übel, "if" vorschlagen.
|
|
Ice
      
Beiträge: 114
|
Verfasst: Di 11.03.03 08:37
Hi ,
könnte so funktionieren:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| function Vergleich(Text):integer; var HandleI : integer; begin if Comparestr('test',Text)=0 then HandleI := 1 else if Comparestr('exit',Text)=0 then HandleI := 2; else HandleI := 0; result := HandleI; end;
procedure Hauptfunction; var I : integer; begin I := vergleich(Edit1.text); case I of 0:showmessage('Nicht unterstützter Text'); 1:showmessage('Test'); 2:Application.terminate; end; end; |
sollte eigentlich funktionieren ist aber noch nicht getestet...
mfg
Ice
Moderiert von Tino: Code-Tags hinzugefügt.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 11.03.03 08:43
Schön, dass du deinen Code noch mal geändert hast.  Nun mach doch bitte noch das [code]-Tag drum herum.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 11.03.03 08:59
@Ice: als Vorschlag
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function Vergleich(Text: string): integer; const ValidThings : array[1..2]of string = ('test','exit'); var i : integer; begin Result := 0; // Standardergebnis
for i := 1 to length(ValidThings) do if(CompareText(Text,ValidThings[i]) = 0) then begin Result := i; // Rückgabewert entspricht dem // Schleifenwert
break; // und abbrechen end; end; |
Das macht Erweiterungen, IMHO, einfacher als endlose if-Abfragen.
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Di 11.03.03 10:04
Natürlich bleibt IF immer einfacher. Allerdings hat CompareText den Vorteil, daß es Groß- und Kleinschreibung ignoriert. Man spart sich also zwei mal AnsiUpperCase.
_________________ Popov
|
|
Blackout 
      
Beiträge: 64
|
Verfasst: Di 11.03.03 19:52
Danke für die Hilfe
Werds gleich mal ausprobieren
_________________ MfG Blackout
|
|