Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#46: 2011-03-15 00:55:49 ЛС | профиль | цитата
Не могу воспользоваться циклом for. Не могу понять, что означает <condition>, и какие скобочки или слова должны обрамлять тело цикла:

" for (<init>; <expression>; <condition>)
Выполняет тело цикла пока условие <expression> истинно. В качестве <init> и <condition> допускается использование любого оператора или ф-ции."

Покажите, пожалуйста, пример. Мне надо, просто, выполнять цикл пока "условие" верно.


карма: 0

0
Ответов: 4631
Рейтинг: 749
#47: 2011-03-15 11:41:31 ЛС | профиль | цитата
Цикл в FTCG или в целевом коде (Delphi)?
В FTCG:


#hws
fvar (i)

for (i=0; i<=10; i++)
//действия...
end
где i=0 - начальное значение счетчика (любое)
i<=10 - цикл выполняется, пока это условие истинно
i++ - действие, выполняемое после каждой итерации
(обычно изменение счетчика, в данном случае -
увеличение на единицу)

Или:

#hws
while (i<=10)
//действия...
i++
end
карма: 26

1
Голосовали:login
Ответов: 1429
Рейтинг: 50
#48: 2011-03-15 17:34:18 ЛС | профиль | цитата
Странное дело, этот код компилируется, но не работает:

#hws
func doCalc()
fvar(a)
a = copy(MathStr, 1, 1)
event(onResult,e_str(a))
end

А этот работает:

#hws
func doCalc()
fvar(a)
a = copy(MathStr, 1, 2)
event(onResult,e_str(a))
end

То-есть, если я, из строки, копирую один символ - наступает крах, если больше - то нет.
Если кеширую результат в переменную, то работает и с одним символом, но это лишние такты.

Целевой код такой:

#pas
procedure TClassFTCG_Tools_8EA8840.event_doData(var Data:TData; index:word);
begin
MessageBox(0, PChar('e'), PChar(''), MB_OK);
end;
и такой, соответственно:

#pas
procedure TClassFTCG_Tools_8EA8840.event_doData(var Data:TData; index:word);
begin
MessageBox(0, PChar('ex'), PChar(''), MB_OK);
end;
------------ Дoбавленo в 17.33:
Вот не работающий, целевой, код целиком.

#pas
unit hiFTCG_Tools_8EA8840;

interface

uses windows,kol,Share,hiFTCG_Tools_EM,ftcg_share;

type
TClassFTCG_Tools_8EA8840 = class(TFTCG_Tools_EM)
private

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_do_in(var Data:TData; index:word);
procedure event_doInterval(var Data:TData; index:word);
procedure event_doInterval1(var Data:TData; index:word);
procedure event_doStop(var Data:TData; index:word);
procedure event_doInterval2(var Data:TData; index:word);
end;

function Create_hiFTCG_Tools_8EA8840(Control:PControl):TFTCG_Tools_EM;

implementation

uses hiFTCG_Tools;

function Create_hiFTCG_Tools_8EA8840;
begin
Result := TClassFTCG_Tools_8EA8840.Create(Control);
end;

constructor TClassFTCG_Tools_8EA8840.Create;
begin
inherited Create(_Control);
SetLength(doWork, 6);
SetLength(getVar, 0);
doWork[0] := event_doData;
doWork[1] := event_do_in;
doWork[2] := event_doInterval;
doWork[3] := event_doInterval1;
doWork[4] := event_doStop;
doWork[5] := event_doInterval2;
end;

destructor TClassFTCG_Tools_8EA8840.Destroy;
begin
inherited Destroy;
end;

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

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

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

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

procedure TClassFTCG_Tools_8EA8840.event_doData(var Data:TData; index:word);
begin
MessageBox(0, PChar('e'), PChar(''), MB_OK);

end;

procedure TClassFTCG_Tools_8EA8840.event_do_in(var Data:TData; index:word);
begin

end;

procedure TClassFTCG_Tools_8EA8840.event_doInterval(var Data:TData; index:word);
begin

end;

procedure TClassFTCG_Tools_8EA8840.event_doInterval1(var Data:TData; index:word);
begin

end;

procedure TClassFTCG_Tools_8EA8840.event_doStop(var Data:TData; index:word);
begin

end;

procedure TClassFTCG_Tools_8EA8840.event_doInterval2(var Data:TData; index:word);
begin

end;

end.

карма: 0

0
Ответов: 3349
Рейтинг: 233
#49: 2011-03-15 18:24:55 ЛС | профиль | цитата
#pas
procedure TClassFTCG_Tools_8EA8840.event_doData(var Data:TData; index:word);
begin
MessageBox(0, PChar('ex'), PChar(''), MB_OK);
end;
В Таком виде typecast делать не нужно
#pas
procedure TClassFTCG_Tools_8EA8840.event_doData(var Data:TData; index:word);
begin
MessageBox(0, 'ex', '', MB_OK);
end;
Delphi сам его сделает
------------ Дoбавленo в 18.24:
Кстати именно из-за этого и ошибка.

Add(InlineCode,13453293,119,133)
{
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: constructor Create;|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|37:MessageBox(0,PChar('g'),PChar(''),0);|4:end;|0:|4:end.|
}
Add(InlineCode,16623649,154,133)
{
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: constructor Create;|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|23:MessageBox(0,'g','',0);|4:end;|0:|4:end.|
}

карма: 1

1
Голосовали:login
Ответов: 1429
Рейтинг: 50
#50: 2011-03-15 18:34:14 ЛС | профиль | цитата
Подскажите, как можно определить длинну строки(строка лежит в переменной) в коде FTCG?
Я не нахожу этой функции в хелпе.
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#51: 2011-03-15 19:10:18 ЛС | профиль | цитата
Супер заглушка
#hws
fvar(a)
a = "data" + #0
trace(pos(#0,a)-1)
карма: 10
1
Голосовали:Ivann
Ответов: 3349
Рейтинг: 233
#52: 2011-03-15 19:19:06 ЛС | профиль | цитата
[offtop]А если в строке уже присутствует нулевой символ...Все равно не важно, но решение интересное[/offtop]
карма: 1

0
Ответов: 1429
Рейтинг: 50
#53: 2011-03-15 23:44:41 ЛС | профиль | цитата
Assasin, Спасибо! Подходит
------------ Дoбавленo в 23.36:
Серьезная трудность..
В целевом коде есть, некая, переменная Resultat.
Вней хранится число. Как выдать это число на Event-точку элемента FTCG?

У меня получается выдать результат только на выход контейнера FTCG, напечатав:

#hws
println('_hi_onEvent(THIFTCG_Tools(FParent).Events[0],',Resultat,');')
------------ Дoбавленo в 23.44:
Можно сделать:

#hws
println(dt,' :=',Resultat,';')
event(OnResult,dt)
Тогда в коде всё выглядит нормально, но не компилируется по причине: incompatible types TData and integer. Может, как-то, конвертнуть?
(я ж не знаю делфи, может возможно как-то ссылку на переменную передавать?)
карма: 0

0
Ответов: 4631
Рейтинг: 749
#54: 2011-03-16 11:27:07 ЛС | профиль | цитата
Если в целевом коде есть переменная с именем 'Resultat',
то в поток компонента и выдаётся это имя:

#hws
event(OnResult, 'Resultat')
А в методе другого компонента это обрабатывается примерно так:

#hws
func doMethod(_data)
println('x := ', _data, ' + 25;')
end
Тогда в целевом коде будет
x := Resultat + 25;


карма: 26

0
Разработчик
Ответов: 4698
Рейтинг: 426
#55: 2011-03-16 13:45:47 ЛС | профиль | цитата
login, испробуй-ка вот это:
#hws
println('_hi_onEvent(THIFTCG_Tools(FParent).Events[0],_DoData(',Resultat,'));')
карма: 10
0
Ответов: 1429
Рейтинг: 50
#56: 2011-03-16 14:32:47 ЛС | профиль | цитата
Netspirit, эх, я тоже так, сначала, подумал.
Вот я делаю это:

#hws
event(OnResult, 'Resultat') //пробовал и без кавычек, результат одинаковый.

А, в ответ, получаю это:

#pas
procedure TClassFTCG_Tools_8EA8BB0.event_doData(var Data:TData; index:word);
begin
resultat1 := 6 + 6;
val4 := 0;
end;

val4 - это подключенный элемент memory, а вместо нуля должен был стоять resultat1.

Assasin, не работает по причине: Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments

Netspirit, нолик то у памяти был integer. А если память NULL, то результат такой:

#pas
procedure TClassFTCG_Tools_8EA8BB0.event_doData(var Data:TData; index:word);
begin
resultat1 := 6 + 6;
val4 := '';
end;
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#57: 2011-03-16 14:36:08 ЛС | профиль | цитата
login писал(а):
Assasin, не работает по причине: Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments

Очень странно, приведи пожалуйста весь сгенерированный FTCG код и лог компиляции
карма: 10
0
Ответов: 4631
Рейтинг: 749
#58: 2011-03-16 14:45:06 ЛС | профиль | цитата
login, попробуй

#hws
event(OnResult, code('resultat'&&_id_))
карма: 26

0
Ответов: 1429
Рейтинг: 50
#59: 2011-03-16 21:35:28 ЛС | профиль | цитата
Assasin, вот:

Подготовка к сборке проекта...
Генерация кода целевого языка
Компоновка проекта...
Command line: dcc32.exe "C:\Program Files\HiAsm\Elements\delphi\code\22.dpr" "-UC:\Program Files\HiAsm\." -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

C:\Program Files\HiAsm\Elements\delphi\code\WinLayout.pas(159) Warning: Variable 'd' might not have been initialized

C:\Program Files\HiAsm\Elements\delphi\code\WinLayout.pas(176) Warning: Variable 'd' might not have been initialized

C:\Program Files\HiAsm\Elements\delphi\code\WinLayout.pas(40) Hint: Private symbol '_onObjDestroy' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools.pas(59) Hint: Variable 'PrevNeedInit' is declared but never used in 'THIFTCG_Tools.CreateInstance'

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8BB0.pas(80) Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8BB0.pas(12) Hint: Private symbol 'readData' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8BB0.pas(13) Hint: Private symbol 'readDataInt' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8BB0.pas(14) Hint: Private symbol 'readDataStr' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8BB0.pas(15) Hint: Private symbol 'readDataReal' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiMainForm_8E3B250.pas(11) Fatal: Could not compile used unit 'hiFTCG_Tools_8EA8BB0.pas'
Сборка завершена.

А это результат:
code_22985.txt
------------ Дoбавленo в 14.47:
Netspirit, всеравно:

#pas
procedure TClassFTCG_Tools_8EA8BB0.event_doData(var Data:TData; index:word);
begin
resultat1 := 6 + 6;
val4 := '';
end;
------------ Дoбавленo в 21.35:
Вот так:

#hws
event(OnResult, str(Resultat))
Он печатает правильно:

#pas
procedure TClassFTCG_Tools_8EA8BB0.event_doData(var Data:TData; index:word);
begin
resultat1 := 6 + 6;
val4 := 'resultat1';
end;

Вот если бы еще кавычки убрать Может подредактировать функцию str ?
Может можно добавить свою функцию в язык, точную копию str, только без печати кавычек
карма: 0

0
файлы: 1code_22985.txt [1.8KB] [135]
Ответов: 4631
Рейтинг: 749
#60: 2011-03-17 11:55:19 ЛС | профиль | цитата
В Memory поставь trace(_data) в методе doValue:

#hws
func doValue(_data)
fvar(dt)
trace(_data)
dt = Data
........
А в своем компоненте поставь event(OnResult, Resultat) и посмотри, что будет выдавать
в панель отладки при компиляции. Также убедись что св-во Default в Memory стоит в "NULL".
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)