plz pomozcie z funkcja case of

0

Gdy robie tak
case Socket.ReceiveText of
'R' : MyExitWindows(EWX_REBOOT);
'S' : MyExitWindows(EWX_POWEROFF);
end;
wyswietla mi blad 'Ordinal type requaired'! W czym jest moj blad? :-/

0

Chodzi o to, że przy case musi być typ porządkowy, a string takim typem nie jest. Już łatwiej zrobić to po numerach znaków.

0

Chodzi o to, że przy case musi być typ porządkowy, a string takim typem nie jest. Już łatwiej zrobić to po numerach znaków.

Nie sądzę aby w ten sposób to było możliwe poniewarz case of wymaga albo liczby albo pojedynczego znaku nawet jezeli string zawiera tylko jeden znak nie mozna tego uzyc w takiej formie.

Nie uda się rownież w ten sposób: case MojString[1] of a to dla tego że nadal traktuje to jako string. Prędzej trzeba tą pierwsza (lub N-tą) literę najpierw przypisać zmiennej typu char a potem sprawdzać case'm np:

Znak := Socket.ReceiveText[1]; //w nawiasie wpisz znak ktory chcesz porownac 1 oznacza pierwszy znak a 0 oznacza liczbe (!) znakow w stringu (przynajmniej w tym typu shortstring)
Case Znak of
...
end;

To działa sprawdzałem.

0

Nie sądzę aby w ten sposób to było możliwe poniewarz case of wymaga albo liczby albo pojedynczego znaku

Dowolny typ porządkowy !! Nie koniecznie liczba lub znak.
Jeżeli zadeklaruję sobie jakiś typ wyliczeniowy:

type DniTyg = (pon, wt, sr, cz, pt, so, ni);
var
Dzien: DniTyg;

to mogę zrobić tak:
case Dzien of
pon: ...

Nie uda się rownież w ten sposób: case MojString[1] of a to dla tego że nadal traktuje to jako string.

Oj troszeczkę oszukujesz:

case Socket.ReceiveText[1] of
'R' : MyExitWindows(EWX_REBOOT);
'S' : MyExitWindows(EWX_POWEROFF);
end;

Jezeli odwołujesz się do n-tego elementu tablicy to też to traktuje jak tablicę? Chyba nie :) String nie jest niczym więcej niż:

type string = packed array of Char;

(oczywiście chodzi o AnsiString. ShortString jest trochę inne)

0

Tak... to czemu mi, kiedy spróbowalem z Label1.Caption[1] wywalił błąd niezgodności [???]

A co do własnego typu wyliczniowego to przyznaję rację nie pomyślałem o tym. [glowa]
Chylę czoła [prosze]

[dopisane]
Chylę czoła po raz drugi [prosze]
Znalazłem co nie tak robiłem mianowicie próbowałem porównać do pustego stringa czyli '' (nie mylic z cudzysłowem !!)

1 użytkowników online, w tym zalogowanych: 0, gości: 1