Есть приложение к которому надо присабачить поддержку скриптов. Приложение осуществляет сбор с плат АЦП, проводит мат обработку, осуществляет управление ЦАП и цифровыми выходами. НАписано оно на Visual C++. Мне надо сделать так чтобы эта программа всё делала по зарание написаному сценарию - некая циклонрамма. Так вот хочу попробывать присабачить сюда fastscript и писать скрипты на VBA. Но так как приложение написано на Visual то единственный способ прилепить к нему FastScript - это DLL. Поэтому и спрашиваю можно ли как то это сделать. Я к сожалению не очень силён в идеалогии VCL.
Кстати, что-то у меня получается изменить только свойства самой передаваемой в скрип вормы. Т.е. например
Form1.Caption = "brbrbr";
а вот изменить свойства эдементов формы не получается. Есть у меня на форме кнопка Exit
Form1.Exit.Caption = "brbrbrbr";
Ругается что не знает он что такое Exit.
Ваш класс должен быть наследником TObject(конечно если вам не нужен его интерфейс сделайте закрытое наследование) по другому не получится.
В вашем случае придётся добавить:
- новый класс (наследник TObject)
- методы вашего класса.
И только после этого передовать объект.
Кстати, что-то у меня получается изменить только свойства самой передаваемой в скрип вормы. Т.е. например
Form1.Caption = "brbrbr";
а вот изменить свойства эдементов формы не получается. Есть у меня на форме кнопка Exit
Form1.Exit.Caption = "brbrbrbr";
Ругается что не знает он что такое Exit.
Нужно передовать все объекты,а затем в скрипте работать с ними по отдельности.
Т.е. Form1.Caption и Exit.Caption.
Появился....
Точнее два.
1. Можно ли описать функции в одном файле скрипта, а в другом пользоваться этими функциями (их вызывать)
2. Мне надо выполнять скрипт по блокам... В блоке может быть вызвано несколдько функций. Можно ли как то такое сделать. Т.е. мне надо приостанавливать выполнение скрипта.
1. Можно ли описать функции в одном файле скрипта, а в другом пользоваться этими функциями (их вызывать)
Да с помощью директивы uses (в руководстве по FS есть описание с.м."Использование директивы "uses""(стр. 66)).
написал:
2. Мне надо выполнять скрипт по блокам... В блоке может быть вызвано несколдько функций. Можно ли как то такое сделать. Т.е. мне надо приостанавливать выполнение скрипта.
Так же можно найти в руководстве по FS "Отладка скрипта" (стр. 56).
На счёт приостановки выполнения скрипта ничег оне понял...
Опишу то что мне надо.
допустим есть такой код скрипта
{
for(int i=0;i<10;i++)
{
iValue = i;
while(!bReplace)
Sleep(100); //вот здесь бы мне уснуть... Да вот Sleep нету
}
}
Короче здесь мне надо сменить 10 раз значение iValue (переменная передаётся в срипт из основной программы, так же как и bReplace). Причём сменить его надо в определённые моменты (определяется переменной bReplace).
Вот как мне такую задачу решить?! Sleep то ведь использовать нельзя...
Функция MyTestFunc реализует паузу в скрипте.
Хочу длину паузы определять сам.
Для этого выполнение скрипта засунул в отдельный поток, а на форму положил кнопку, которой меняю значение m_bPause на false.
Так вот при нахатии на эту кнопку возникает ошибка "Project Script.exe raised exception class EInvalidOperation with message 'Canvas does not allow drawing'. Process stopped. Use Step or Run to continue".
Почитал мануал, покурил форум...ничего не понял. сорри.
Подскажите, плз:
Есть форма frmReport с кнопкой btnPrint.
Также на форме TfrxReport под названием frMy.
в frMy в бенд ReportTitle кладу Picture Object. Называю его frImage1.
Вопрос:
как теперь с формы, перед построением отчета, в frImage1.FileLink передать необходимый мне путь к картинке?
Почитал мануал, покурил форум...ничего не понял. сорри.
Подскажите, плз:
Есть форма frmReport с кнопкой btnPrint.
Также на форме TfrxReport под названием frMy.
в frMy в бенд ReportTitle кладу Picture Object. Называю его frImage1.
Вопрос:
как теперь с формы, перед построением отчета, в frImage1.FileLink передать необходимый мне путь к картинке?
Заранее спасибо
Нашел. Извините за беспокойство.
(frMy.FindObject('frImage1') as TfrxPictureView).FileLink := 'C:\sdsd.jpg';
Комментарии
class MyClass
{
char mas[10];
public:
void SetMas(char*);
void GetMas(char*);
}
void MyClass :: SetMas(char* Str)
{
strcpy(mas, "Test");
}
void MyClass :: GetMas(char* Str)
{
strcpy(Str, mas);
}
Вот хотя бы что-то такое как передать в скрипт???
Form1.Caption = "brbrbr";
а вот изменить свойства эдементов формы не получается. Есть у меня на форме кнопка Exit
Form1.Exit.Caption = "brbrbrbr";
Ругается что не знает он что такое Exit.
В вашем случае придётся добавить:
- новый класс (наследник TObject)
- методы вашего класса.
И только после этого передовать объект.
Т.е. Form1.Caption и Exit.Caption.
Спасибо за помощь
Точнее два.
1. Можно ли описать функции в одном файле скрипта, а в другом пользоваться этими функциями (их вызывать)
2. Мне надо выполнять скрипт по блокам... В блоке может быть вызвано несколдько функций. Можно ли как то такое сделать. Т.е. мне надо приостанавливать выполнение скрипта.
Вы вообше читаете документацию ?
скрипт
#include "unit2.cpp";
{
func();
}
файл unin2.cpp
#language C++Script
void func()
{
ShowMessage("Тест");
}
Выдаёт ошибку " '{' Expected "
?????
Опишу то что мне надо.
допустим есть такой код скрипта
{
for(int i=0;i<10;i++)
{
iValue = i;
while(!bReplace)
Sleep(100); //вот здесь бы мне уснуть... Да вот Sleep нету
}
}
Короче здесь мне надо сменить 10 раз значение iValue (переменная передаётся в срипт из основной программы, так же как и bReplace). Причём сменить его надо в определённые моменты (определяется переменной bReplace).
Вот как мне такую задачу решить?! Sleep то ведь использовать нельзя...
Делаем так:
1)Объявляем новый класс.
2)К методам формы добавляем функцию обработчик:
3)Делаем реализацию обоих методов:
4) Добавляем класс и метод в скрипт:
5)Код скрипта:
Если не понятно посмотрите пример.
Наткнулся ещё на проблему...
Есть, например, такой скрипт
{
MyTestFunc(70);
ShowMessage("Задержка кончилаь1");
MyTestFunc(70);
ShowMessage("Задержка кончилаь2");
MyTestFunc(70);
ShowMessage("Задержка кончилаь3");
}
Описание MyTestFunc
void TForm1 :: MyTestFunc(int i)
{
m_bPause = true;
while(m_bPause)
Sleep(i);
}
Функция MyTestFunc реализует паузу в скрипте.
Хочу длину паузы определять сам.
Для этого выполнение скрипта засунул в отдельный поток, а на форму положил кнопку, которой меняю значение m_bPause на false.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
m_bPause = false;
}
Так вот при нахатии на эту кнопку возникает ошибка "Project Script.exe raised exception class EInvalidOperation with message 'Canvas does not allow drawing'. Process stopped. Use Step or Run to continue".
Если же записать вот так
void __fastcall TForm1::Button1Click(TObject *Sender)
{
m_bPause = false;
Sleep(100);
}
ТО вроде всё нормалаьно...
Что за затык. Могу прислать своё творчество...
Смеяться не буду
Подскажите, плз:
Есть форма frmReport с кнопкой btnPrint.
Также на форме TfrxReport под названием frMy.
в frMy в бенд ReportTitle кладу Picture Object. Называю его frImage1.
Вопрос:
как теперь с формы, перед построением отчета, в frImage1.FileLink передать необходимый мне путь к картинке?
Заранее спасибо
Нашел. Извините за беспокойство.
(frMy.FindObject('frImage1') as TfrxPictureView).FileLink := 'C:\sdsd.jpg';