Autor Beitrag
Blackout
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 64



BeitragVerfasst: Mo 10.03.03 23:29 
hi leute,
ich habe gerade mal eine Frage zur Case Anweisung.

Unszwar wollte ich folgendes mal probieren:

ausblenden Quelltext
1:
2:
3:
4:
Case edit1.text Of
  'test': ShowMessage('Test');
  'exit': Application.Terminate;
End;


Das will irgendwie nicht funktionieren :cry:
Wie geht das genau mit Strings?

Mit Integern gehts:

ausblenden 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?

ausblenden 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mo 10.03.03 23:34 
Es geht nicht mit Strings. Es geht aber mit Integer's und Char's, also:

ausblenden Quelltext
1:
2:
3:
4:
5:
case Integer of
1: ...
2: ...
3, 4: ...
usw.


oder

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 64



BeitragVerfasst: 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 :wink:

@popov
Mit Char's bekomme ich immer nur einen Buchstaben eines Textes heraus :cry:

Wie soll das denn mit CompareText oder CompareStr gehen?

_________________
MfG Blackout
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114



BeitragVerfasst: Di 11.03.03 08:37 
Hi ,

könnte so funktionieren:
ausblenden 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 user profile iconTino: Code-Tags hinzugefügt.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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



BeitragVerfasst: Di 11.03.03 08:59 
@Ice: als Vorschlag
ausblenden 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 64



BeitragVerfasst: Di 11.03.03 19:52 
Danke für die Hilfe :!:

Werds gleich mal ausprobieren

_________________
MfG Blackout