Вверх ↑
Ответов: 1429
Рейтинг: 50
#1: 2011-03-20 01:38:25 ЛС | профиль | цитата
Я закончил код мат-парсера, вот:
code_23014.txt

Но теперь, я не пойму, почему мой парсер не работает элементом for, интересно то, что я уже сталкивался с этой ошибкой: Error: Undeclared identifier: 'i5' Может это ошибка самого элемента for, что он не делает доступным переменную своего счетчика i, поясните мне плиз?

Вот не рабочая схема:

code_23015.txt

А вот код Delphi:

code_23016.txt
------------ Дoбавленo в 03.15:
А вот второй вопрос, в этой схеме кодогенератор не соблюдает последовательность подключения к хабу, и печатает код наоборот. Цикл for выполняется в конце а не в начале:


Add(MainForm,2953706,21,105)
{
Width=306
Height=154
Caption="Test"
Position=1
}
Add(FTCG_Tools,5039548,217,105)
{
}
BEGIN_SDK
Add(EditMultiEx,11372400,21,21)
{
WorkCount=#6:doData|6:doCalc|5:doFor|
Width=608
Height=326
link(doData,10594900:doEvent1,[(31,27)(31,34)])
}
Add(FT_Memory,4409165,98,49)
{
Default=Real(6)
}
Add(FTMathParse,4815401,140,140)
{
DataCount=15
MathStr="exp(exp(%1/%2)*%3/(%2/%10))/%10"
ResultType=1
link(onResult,9008319:doValue,[])
link(X1,4409165:Value,[(146,117)(104,117)])
link(X2,13600669:Value,[])
link(X3,5273271:Value,[(160,110)(202,110)])
link(X10,4177038:Value,[(209,122)(391,122)])
}
Add(FT_Memory,13600669,147,49)
{
Default=Integer(45)
}
Add(FT_Memory,9008319,294,140)
{
Default=Real(0)
link(onData,5750475:doMessage,[])
}
Add(FT_Message,5750475,371,140)
{
}
Add(FT_Memory,5273271,196,49)
{
Default=Integer(3)
}
Add(FT_For,2249134,329,28)
{
End=2
Start=1
link(onEvent,4177038:doValue,[])
}
Add(FT_Memory,4177038,385,28)
{
Default=Integer(500)
link(onData,7827668:doMessage,[])
}
Add(FT_Hub,10594900,42,28)
{
link(onEvent1,2249134:doFor,[])
link(onEvent2,4815401:doCalc,[(74,41)(74,146)])
}
Add(FT_Message,7827668,441,28)
{
}
END_SDK
Add(Button,11335642,154,105)
{
Left=100
Top=35
Width=90
Height=25
Caption="Test"
link(onClick,5039548:doData,[])
}
Add(Button,2054337,154,161)
{
Left=100
Top=65
Width=90
Height=25
Caption="Test"
link(onClick,5039548:doCalc,[(202,167)(202,118)])
}



Код Delphi:


#pas
unit hiFTCG_Tools_8EA8B00;

interface

uses windows,kol,Share,hiFTCG_Tools_EM,ftcg_share;

type
TClassFTCG_Tools_8EA8B00 = class(TFTCG_Tools_EM)
private
val3:integer;
resultat5:real;
val9:real;

function readData(index:word):TData;
function readDataInt(index:word):integer;
function readDataStr(index:word):string;
function readDataReal(index:word):real;
public

constructor Create(_Control:PControl);
destructor Destroy; override;
procedure event_doData(var Data:TData; index:word);
procedure event_doCalc(var Data:TData; index:word);
procedure event_doFor(var Data:TData; index:word);
end;

function Create_hiFTCG_Tools_8EA8B00(Control:PControl):TFTCG_Tools_EM;

implementation

uses hiFTCG_Tools;

function Create_hiFTCG_Tools_8EA8B00;
begin
Result := TClassFTCG_Tools_8EA8B00.Create(Control);
end;

constructor TClassFTCG_Tools_8EA8B00.Create;
begin
inherited Create(_Control);
SetLength(doWork, 3);
SetLength(getVar, 0);
doWork[0] := event_doData;
doWork[1] := event_doCalc;
doWork[2] := event_doFor;
val3 := 500;
val9 := 0;
end;

destructor TClassFTCG_Tools_8EA8B00.Destroy;
begin
inherited Destroy;
end;

function TClassFTCG_Tools_8EA8B00.readData;
begin
dtNull(Result);
_ReadData(Result, THIFTCG_Tools(FParent).Datas[index]);
end;

function TClassFTCG_Tools_8EA8B00.readDataInt;
var dt:TData;
begin
dtNull(dt);
_ReadData(dt, THIFTCG_Tools(FParent).Datas[index]);
Result := ToInteger(dt);
end;

function TClassFTCG_Tools_8EA8B00.readDataStr;
var dt:TData;
begin
dtNull(dt);
_ReadData(dt, THIFTCG_Tools(FParent).Datas[index]);
Result := ToString(dt);
end;

function TClassFTCG_Tools_8EA8B00.readDataReal;
var dt:TData;
begin
dtNull(dt);
_ReadData(dt, THIFTCG_Tools(FParent).Datas[index]);
Result := ToReal(dt);
end;

procedure TClassFTCG_Tools_8EA8B00.event_doData(var Data:TData; index:word);
var
i2:integer;
begin
resultat5 := exp(exp(6/45)*3/(45/val3))/val3;
val9 := resultat5;
MessageBox(0, PChar(double2str(val9)), PChar(''), MB_OK);

for i2 := 1 to 2 do
begin
val3 := i2;
MessageBox(0, PChar(int2str(val3)), PChar(''), MB_OK);
end;
end;

procedure TClassFTCG_Tools_8EA8B00.event_doCalc(var Data:TData; index:word);
begin

end;

procedure TClassFTCG_Tools_8EA8B00.event_doFor(var Data:TData; index:word);
begin

end;

end.


Это возможно исправить?
------------ Дoбавленo в 01.38:
Причина "несоблюдения очереди", была в выделении блоков методом: "block.select"
Не знаю почему, но если было, хоть одно, выделение блока, очередь хаба перестает работать.
карма: 0

0
файлы: 3code_23014.txt [1.4KB] [189], code_23015.txt [1.4KB] [180], code_23016.txt [2.4KB] [216]