Вверх ↑
Разработчик
Ответов: 26200
Рейтинг: 2137
#1: 2007-11-25 12:19:02 ЛС | профиль | цитата
Nic, последний метод проще описать можно -- и никаких плясок с бубном вокруг if.



procedure THIGate._work_doFlip;
begin
Fstate := not FState;
end;


------------ Дoбавленo:


Ни фига он не инициирует состояние, так как в Create свойства еще не считаны. Провеь State всегда равен нулю. Короче, я изменил код



unit hiGate;

interface

uses Kol,Share,Debug;

type
THIGate = class(TDebug)
private
FState:boolean;
RunOnce:boolean;
public
_prop_State:byte;
_event_onGate:THI_Event;

constructor Create;
procedure _work_doGate(var _Data:TData; Index:word);
procedure _work_doFlip(var _Data:TData; Index:word);
procedure _work_doState(var Data:TData; Index:word);
end;

implementation

constructor THIGate.Create;
begin
RunOnce := true;
inherited;
end;

procedure THIGate._work_doGate;
var dt:TData;
begin
dt := _Data;
if RunOnce then begin
Fstate := not boolean(_prop_State);
RunOnce := false;
end;
if FState then _hi_CreateEvent(_Data,@_event_onGate,Dt);
end;

procedure THIGate._work_doState;
begin
RunOnce := false;
FState := ReadBool(Data);
end;

procedure THIGate._work_doFlip;
begin
if RunOnce then begin
Fstate := not boolean(_prop_State);
RunOnce := false;
end;
Fstate := not FState;
end;

end.


doFlip пришлось подправить, тк он может быть активирован раньше doGate.
карма: 22

0