Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2011-01-21 16:23:36 ЛС | профиль | цитата
Почему не работает этот код элемента?

#hws
func do_in(dt)
fvar(x,y)
x = e_int(dt)
//y = (x + 1) это тоже не работает!
println(x,':= 1 + ',x,';')
event(on_out,y)
end
"Error: Left side cannot be assigned to"


карма: 0

0
файлы: 1code_22250.txt [182B] [142]
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2011-01-21 16:43:08 ЛС | профиль | цитата
login, FTCG не настолько интеллектуально продвинутый, чтобы операторы скрипта транслировать в синтаксически верные конструкции целевого языка пакета. Посмотрите итоговый код и строку, на которую ругается компилятор - функциям нельзя присваивать значения
карма: 27
0
Ответов: 1429
Рейтинг: 50
#3: 2011-01-21 18:14:18 ЛС | профиль | цитата
Да он пытается присвоить, точно:

ToInteger(Data):= 1 + ToInteger(Data);

Но я не знаю что надо сделать.
------------ Дoбавленo в 17.32:
Dilma, покажите мне, как надо было записать этот примитивный пример.
Мне надо хоть с чего-то работающего начать. Пока, у меня, даже это не работает.
------------ Дoбавленo в 18.14:
Хелп! Мне нужны азы!
Как обьявить перемнную в, функции делфи, с помощью FTCG, до тела begin end; ?
карма: 0

0
Ответов: 4630
Рейтинг: 749
#4: 2011-01-21 18:46:32 ЛС | профиль | цитата
login, смотри код FT_Memory
карма: 26

0
Ответов: 1429
Рейтинг: 50
#5: 2011-01-22 11:19:35 ЛС | профиль | цитата
Ура! наконец, нашел нужную функцию "lng.decl_loc_var" и заработало

#hws
func do_in(dt)

lng.decl_loc_var(x, 'integer')
println(x,' := ',e_int(dt),';')
println(x, ':= ',x,' * 2;')

event(on_out,x)
end

[offtop]Это моя первая программа на FTCG, не пинайте, если я буду еще задавать тут вопросы, помогайте мне по возможности. Спасибо![/offtop]
------------ Дoбавленo в 11.19:
Dilma, скажите, а что в wiki не все операторы языка FTCG?
В элементах нахожу новые, которыx там нет:
lng - в хелпе нет.
Вместо него есть lang, но он в делфи не работает.
Может есть еще функции для Delphi не описанные в веб пакете wiki?

(плюс, может, есть, какие-то, стандартные, названия блоков делфи, которые уже прописаны а я их не знаю и т. п. ?)

карма: 0

0
Ответов: 1429
Рейтинг: 50
#6: 2011-01-25 14:25:15 ЛС | профиль | цитата
Скажите, пожалуйста, как обьявить:


#pas
interface

uses Kol,Share,Debug;

type
THIMMTimer = class(TDebug)
private
flag:boolean;
FTimer:PMMTimer;
AutoStop:integer;
AutoStopDEF:integer;
procedure SetInterval(Value:integer); ----- ВОТ ЭТИ ПРОЦЕДУРЫ как их обьявить в FTCG?
procedure SetEnable(Value:boolean);
procedure SetResolution(Value:integer);
procedure SetAutoStop(Value:integer);
procedure OnTimer(Obj:PObj);
procedure OnStop;
public
_event_onTimer:THI_Event;
_event_onStop:THI_Event;
------------ Дoбавленo в 14.25:
Теоретически, таймер может работать вот так:


#hws
func init()

//создаем переменные
lng.decl_priv_var(flag, 'boolean')
lng.decl_priv_var(FTimer, 'PMMTimer')
lng.decl_priv_var(fAutoStop, 'integer')
lng.decl_priv_var(AutoStopDEF, 'integer')

//события таймера
func OnTimer()

lng.decl_loc_var(Obj, 'PObj')
event(onTimer)

end

//конструктор
block.select(BLK_CREATE)
println (FTimer, ' := NewMMTimer(1000);')
println (FTimer,'.Enabled := true;')
println (FTimer,'.OnTimer := ',OnTimer,';')
println (flag,' := false;')

end


Но CodeGen виснет.
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#7: 2011-01-25 18:43:34 ЛС | профиль | цитата
Во-первых, насколько я знаю FTCG, вложенных функций он не поддерживает, что уже может служить причиной зависания кодогена, во-вторых, код элемента, сделанного на FTCG, не компилируется и не попадает в конечную программу, все функции, которые ты определишь в элементе, будут доступны только в момент работы FTCG (т.е. компиляции схемы). Тут по сложнее будет реализация таймера.
карма: 10
0
Ответов: 1429
Рейтинг: 50
#8: 2011-01-25 20:30:50 ЛС | профиль | цитата
Assasin писал(а):
не компилируется и не попадает в конечную программу

Это я уже хорошо понимаю. Тут я написал только код, который напечатает (я проверил) в Delphi исходник то, что я хочу, в нужных местах. А раз он не поддерживает вложеных функций, то , тогда, да.
------------ Дoбавленo в 19.44:
Возник простой вопрос:
Почему этот код не выдает в поток значение y ?? (выдает пустое событие)


#hws
func doCalc(dt)
lng.decl_loc_var(y, 'integer')
println(y,' := 5;')
event(onResult, y)
end

В целевой код оно печатает это:

#pas
procedure TClassFTCG_Tools_8EA8A50.event_doValue(var Data:TData; index:word);
var
y1:integer;
begin

y1 := 5;
_hi_onEvent(THIFTCG_Tools(FParent).Events[0]);
end;


------------ Дoбавленo в 20.30:
ОТвет: Выдает, если создать новый элемент с нуля.
Но я взял готовый матпарсер, не смотря на то, что в нем нет кода, он ничего нормально не выдает.
карма: 0

0
Ответов: 4630
Рейтинг: 749
#9: 2011-01-26 12:35:13 ЛС | профиль | цитата
Так, как у тебя, должно работать.
Пробуй так:

#hws
event(onResult, 'y'+_id_)
карма: 26

1
Голосовали:login
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2011-01-26 12:39:13 ЛС | профиль | цитата
login писал(а):
скажите, а что в wiki не все операторы языка FTCG?
В элементах нахожу новые, которыx там нет:
lng - в хелпе нет.

lng это не оператор - это пользовательский объект, которые расширяется путем прописывания методов в direct.inc пакета.
карма: 27
0
Ответов: 4630
Рейтинг: 749
#11: 2011-01-26 12:42:21 ЛС | профиль | цитата
Dilma, а что, на SVN не самый свежий direct.inc? Не нашел там объявления lng.decl_priv_var.
------------ Дoбавленo в 12.42:
А, нет, просто оно называется lng_blk_priv_var. Сори.
карма: 26

0
Гость
Ответов: 17029
Рейтинг: 0
#12: 2011-01-26 14:25:37 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2021-05-21 12:22:05
карма: 0

0
Ответов: 1429
Рейтинг: 50
#13: 2011-01-26 14:29:51 ЛС | профиль | цитата
Выше был Login
карма: 0

0
Ответов: 4630
Рейтинг: 749
#14: 2011-01-26 14:45:54 ЛС | профиль | цитата
login, пробуй так:

#hws
func do_in(dt)
println ('procedure MyProc(Arg:integer);')
println('begin')
//мой код...
println('end;')

//Затем здесь делаешь вызовы MyProc
end
карма: 26

0
Ответов: 1429
Рейтинг: 50
#15: 2011-01-26 15:04:20 ЛС | профиль | цитата
Netspirit, я так и хочу делать, но оно напротив этой процедуры MyProc пишет:
Error: Statement expected but 'PROCEDURE' found

То-есть, я так думаю, хочет, чтоб я ее класс указал.

карма: 0

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