PDA

Просмотр полной версии : Синтаксис ругается)))


dyh9l
05.10.2010, 17:12
const
name = 'tester1oo5oo' ;
var
Timer01:TTimer;
TimerCyrcle01:Integer;

procedure Init;
begin
Timer01 := TTimer.Create(nil) ;
Timer01.Interval := 500;
Timer01.Enabled := False ;
Timer01.Ontimer := @OnTimer01 ;
end;

procedure Free;
begin
Timer01.Free ;
end;

Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
end;
2: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
end;
3: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
end;
end;
begin
if FromClient and((pck=HStr('38 41 04 42 04 30 04 40 04 42 04 00 00 00 00 00 00'))) then begin
Timer01.enabled:=true;
end.
На последнем энде ругается, где ошибка?

J-Fobos
05.10.2010, 17:27
Еще одного end; не хватает. После включения таймера.
Ну или убрать лишний begin, после then.

dyh9l
05.10.2010, 18:16
Еще одного end; не хватает. После включения таймера.
Ну или убрать лишний begin, после then.
const
name = 'tester1oo5oo' ;
var
Timer01:TTimer;
TimerCyrcle01:Integer;

procedure Init;
begin
Timer01 := TTimer.Create(nil) ;
Timer01.Interval := 500;
Timer01.Enabled := False ;
Timer01.Ontimer := @OnTimer01 ;
end;

procedure Free;
begin
Timer01.Free ;
end;

Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
end;
2: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
end;
3: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
end;
end;
begin
if FromClient and((pck=HStr('38 41 04 42 04 30 04 40 04 42 04 00 00 00 00 00 00'))) then begin
Timer01.enabled:=true; end;
end.
все ровно не хочет, пробывал добавлять еще эндов, получилось что на
end;end;end; оно еще кричало на последний энд с точкой, а если ставить уже 4 энд то кричало на 4-ый и забывало на то что с точкой

guplen
05.10.2010, 18:47
Case Должен заканчиваться end'ом.


Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin
buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
end;
2: begin
buf := hstr('21 6D ... 00') ;
SendToServerEx(name) ;
end;
3: begin
buf := hstr('21 6D ... 00') ;
SendToServerEx(name) ;
end;
end;
end;

dyh9l
05.10.2010, 20:38
спасибо буду знать :)

Добавлено через 8 минут
А теперь помогите пож разобратся с самим скриптом.
const
name = 'tester1oo5oo' ;
var
Timer01:TTimer;
TimerCyrcle01:Integer;

procedure Init;
begin
Timer01 := TTimer.Create(nil) ;
Timer01.Interval := 1500;
Timer01.Enabled := False ;
Timer01.Ontimer := @OnTimer01 ;
end;

procedure Free;
begin
Timer01.Free ;
end;

Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
end;
2: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
end;
3: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
end;
end;
end;
begin
if FromClient and((pck=HStr('38 41 04 42 04 30 04 40 04 42 04 00 00 00 00 00 00'))) then begin
TimerCyrcle01:=1;
Timer01.enabled:=true; end;
end.
Все время выполняется первый (или второй пакет) циклом, тоесть неперходит на третий пакет

Добавлено через 1 час 28 минут
эй ребят, нельзя чтоб тема упала без ответа)

supernewbie
05.10.2010, 20:48
а что с ним собственно? почему не увеличиваешь переменную?

Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=2;
end;
2: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=3;
end;
3: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
TimerCyrcle01:=1;
end;
end;
end;

dyh9l
05.10.2010, 22:21
а что с ним собственно? почему не увеличиваешь переменную?

Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=2;
end;
2: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=3;
end;
3: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
TimerCyrcle01:=1;
end;
end;
end;

спасиб, а можно чтоб он выполнил все нужные пакеты тока 1 раз, а не зацикленно?

Добавлено через 3 минуты
и от чего зависят эти цифры?
TimerCyrcle01:=1;

supernewbie
05.10.2010, 22:31
Procedure OnTimer01(Sender : TObject) ;
begin
case TimerCyrcle01 of
1: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=2;
end;
2: begin buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=3;
end;
3: begin buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
TimerCyrcle01:=1;
Timer01.Enabled := False;
end;
end;
end;

Дак ты проверяешь, если 1: то отправлять такой пакет, если 2: то отправлять такой пакет, если 3: то отправлять такой пакет.
А тут ты делаешь переменную равную 1, таймер проверяет, переменная равна 1... Отправляет пакет и делает её равной 2. Потом снова палит, переменная равна 2, отпраляет пакет и делает её равной 3 и так по кругу) короче хреновый из меня учитель)
я лично не вижу различей вот в этом коде

Procedure OnTimer01(Sender : TObject) ;
begin
if TimerCyrcle01=1 then
begin
buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=2;
exit;
end;
if TimerCyrcle01=2 then
begin
buf := hstr('04 76 19 10 48') ;
SendToServerEx(name) ;
TimerCyrcle01:=3;
exit;
end;
if TimerCyrcle01=3 then
begin
buf := hstr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 35 00 37 00 37 00 00 00') ;
SendToServerEx(name) ;
TimerCyrcle01:=1;
Timer01.Enabled := False;
exit;
end;
end;

разве что case удобнее