Komorkowy_dzony napisał(a)
function stringtocardinal(s : string) : cardinal;
begin
s := lowercase(s);
result := UNKNOWN;
if pos('gl_2_bytes',s) > 0 then result := GL_2_BYTES;
if pos('gl_2d',s) > 0 then result := GL_2D;
if pos('gl_3_bytes',s) > 0 then result := GL_3_BYTES;
if pos('gl_3d',s) > 0 then result := GL_3D;
if pos('gl_3d_color',s) > 0 then result := GL_3D_COLOR;
if pos('gl_3d_color_texture',s) > 0 then result := GL_3D_COLOR_TEXTURE;
if pos('gl_4_bytes',s) > 0 then result := GL_4_BYTES;
if pos('gl_4d_color_texture',s) > 0 then result := GL_4D_COLOR_TEXTURE;
if pos('gl_accum',s) > 0 then result := GL_ACCUM;
kazdej funkcji nadajesz jakies tam wartosci
Ja mam już parser który wyciąga wszystko z wpisanego tekstu, ta procedura tutaj robi praktycznie to co moja, bo mam taką samą konstrukcje, czyli np.:
if parser.strings[0] = 'close' then Application.Terminate;
i w taki sposób dodaje komendy, oczywiście w tym przykładzie jest mało kodu ale dajmy na to taki przykład:
if parser.strings[0] = 'dodaj' then
begin
if parser.count<2then begin AddText('/n Nie wpisałeś opcji.',Text,true); Exit; end else
if parser.count<3 then begin AddText('/n Nie podałeś wszystkich argumentów.',Text,true); Exit; end;
if is_IntInStr(parser.strings[1]) and is_IntInStr(parser.strings[2]) then
begin
a:=StrToInt(parser.strings[1]);
b:=StrToInt(parser.strings[2]);
EmptyLine;
AddText('^7Wynik:',Text,false);
EmptyLine;
AddText('^3'+parser.strings[1]+' + ^3'+parser.strings[2]+' = ^6'+IntToStr(a+b),Text,true);
end else raise ENotInteger.Create(CNotInteger);
end;
to tylko dodaje dwie liczby, przy okazji sprawdza czy podane argumenty są typu Integer i drukuje za pomocą procedury AddText stosowny napis (te "ptaszki" z liczbami służą do kolorowania tekstu), albo wyświetla błąd. taka prosta a taka długa (pomijając to, że można to w inny sposób napisać, bo to jest na razie nie ważne chciałem pokazać jak wygląda dodawanie długich procedur).
Chciałbym ten proces zautomatyzować, tzn wszelki tekst na jaki ma program zaskoczyć najlepiej jakby był w jednym miejscu, a nie rozsiany po if'ach bo nie które funkcje bedą się składały z kilku stringów, i trzeba dodawać kolejne if'y, case'y w jednej procedurze. najlepiej byłoby wykorzystać tablice, i uruchamiać oddzielne funkcje w osobnym unicie, tylko jak zrobic to sprawnie, żeby potem sie nie pogubić.
A i jeszcze jedno, to wszystko jest używane do gry typu SUD (Single-User Dungeon) i opcji bedzie masa, poza tym parser który mam ma własność OnCommand, która jest po prostu Eventem gdy przkeazywane są do niego informacje, i wszystko musiałoby być w tej procedurze.
Pozdrawiam i czekam na odpowiedź.
(Pewnie jest prostsza niż mi sie wydaje)</delphi>