Сообщение от DJ PhoeniX
Собственно, делаю расписание электричек
Проблему увидите сами из исходника.
Как я понял, после прохода, он просто автоматом нажимает первый пункт меню.
Как выловить и исправить?
|
Вот так будет правильнее и без глюков:
Program Elektrichka2009;
Uses typStringList;
var
vects, list, line, stat: typStringList.TStringList;
id, nowdo: integer;
cmd, cmdOK, cmdExit: command;
exit: boolean;
procedure Load;
var
res:resource;
b:integer;
s:string;
time:integer;
begin
ShowCanvas;
DrawImage(LoadImage('/logo.png'),0,0);
SetColor(0,128,0);
DrawText('Загрузка...', (GetWidth - GetStringWidth('Загрузка...'))/2, GetHeight - 20);
repaint; Delay(5000);
{
// Это я закомментировал пока, нет файлов, не откуда считывать
res:=OpenResource('/vects.lst');
repeat
b:=ReadByte(res); // Не проще ли сразу строками считывать? Побайтно это жутко долго.
s:=s+chr(b);
until b=eof;
vects:=SetStringList(s,chr(13));
res:=OpenResource('/trains.lst');
repeat
b:=ReadByte(res); // то же
s:=s+chr(b);
until b=eof;
list:=SetStringList(s,chr(13));
}
end;
begin
Load; ShowForm;
repeat
ClearForm;
ShowMenu('Главное меню',CH_IMPLICIT);
id:=MenuAppendString('Показать расписание');
id:=MenuAppendString('Ближайший поезд');
id:=MenuAppendString('Найти поезд');
id:=MenuAppendString('Выход');
cmdOK:=CreateCommand('ОК', CM_OK, 1);
cmdExit:=CreateCommand('Выход', CM_EXIT, 2);
AddCommand(cmdOK); // Тут немного непонятно. Клавиша выбора там уже и так есть, но ладно.
AddCommand(cmdExit);
Repaint;
cmd := EMPTYCOMMAND;
repeat
cmd:=GetClickedCommand;
if cmd=cmdExit then Halt;
Delay(50); // Вставь тут небольшую паузу. Система же должна считывать клавиатуру.
until cmd=cmdOk;
ShowForm;
if MenuGetSelectedIndex=0 then nowdo:=2 else
if MenuGetSelectedIndex=1 then nowdo:=3 else
if MenuGetSelectedIndex=2 then nowdo:=4 else
if MenuGetSelectedIndex=3 then Halt; // или break
ShowAlert('NowDo', ''+nowdo, LoadImage('/icon.png'), ALERT_INFO);
Repaint; Delay(3000);
until false;
end.