Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скриптовый язык 
:(
    Опции темы
miksayer
Дата 28.10.2005, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2004

Репутация: нет
Всего: 1



Хотелось бы реализовать скриптовый язык в моей программе. Может посоветуете какой-то компонент или еще что-то?
PM MAIL   Вверх
Akella
Дата 28.10.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



ставь пакет JEDDI (JCL, JVCL)
PM MAIL   Вверх
unknovvn
Дата 28.10.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.9.2005

Репутация: нет
Всего: нет



а что это за пакет?
и где мона скачать?
PM MAIL   Вверх
Droll
Дата 29.10.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 10.11.2004

Репутация: 1
Всего: 3



JEDI VCL - один из популярнейших бесплатных наборов компонент (визуальных и невизуальных).
Скачать можно тут: http://sourceforge.net/projects/jvcl

PS
скриптов я там не нашел, но, возможно, просто плохо искал smile
PM   Вверх
miksayer
Дата 29.10.2005, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2004

Репутация: нет
Всего: 1



мдя, я тоже там не нашел скриптов. Там вроде есть что-то, содержащее в названии слово Script, но ни примеров ни документации по этому компоненту нету
PM MAIL   Вверх
Rrader
Дата 30.10.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191





--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
miksayer
Дата 30.10.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2004

Репутация: нет
Всего: 1



Rrader, не очень хочется юзать платный компонент
И еще хочется узнать, как Vit реализовал скриптовый язык в своем GoldenPen'е
PM MAIL   Вверх
miksayer
Дата 1.11.2005, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2004

Репутация: нет
Всего: 1



а как компонент для этого из JVCL называется?
PM MAIL   Вверх
AriX
Дата 2.11.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Держи %)

PAXScript - http://paxscript.com/
RaLib - входит в набор JEDI
Dream Scripter - http://dream-com.com/scripter.html
Pascal Script - http://www.remobjects.com/page.asp?id={9A3...9-EEBBE7E302E6} - ИХМО один из лучших
Delphi Web Script - http://www.dwscript.com/
TMS Scripter Studio - http://www.tmssoftware.com/scriptstudio.htm

Думаю, что-то подходящее точно найдешь smile
PM MAIL   Вверх
Случайный посетитель
Дата 2.11.2005, 13:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можешь также воспользоваться встроенным средством Microsoft Windows - WSH(Windows Script Host)
  Вверх
Akella
Дата 2.11.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Ищи компоненты в JVCL с названием Interpreter (закладка JvInterpreter)
как пользоваться? читай справку
PM MAIL   Вверх
miksayer
Дата 5.11.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2004

Репутация: нет
Всего: 1



dsergey, AriX,спасибо, гляну
PM MAIL   Вверх
ne0n
Дата 5.11.2005, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Microsoft Windows - WSH(Windows Script Host) Лучший вариант. Помоему
у меня статья(вкаченная с делфи ворлд) была как раз чтобы реализовать скрипты в своей проге!!

Это сообщение отредактировал(а) ne0n - 5.11.2005, 12:30

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  active_script.rar 13,77 Kb
PM MAIL ICQ   Вверх
klyaksa
Дата 7.10.2013, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Подскажите какой из вариантов может такое и как это сделать.
Есть список переменных (он может быть любой). Есть код скрипта (он может быть любой). Нужно выполнить этот скрипт и после его выполнения получить значения этих переменных, например в stringlist (имя = значение). 
Пробовал смотреть Pascal  remobjects и TMS, но не разобрался как это можно сделать. Тем более так, как я понял, можно связать уже имеющиеся переменные с переменными в скрипте. Но это не вариант, т.к. они могут быть любые.

Это сообщение отредактировал(а) klyaksa - 7.10.2013, 16:45
PM MAIL   Вверх
kami
Дата 7.10.2013, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Смотри RemObjects Samples\Pascal Script for Delphi\Import\fMain.pas
Там как раз производится работа с уже созданными TMemo + регистрируется TStringList в ХХRegister_Controls(...).
Переделать большого труда не составит.

Я у себя делал так (на оригинальность и правильность не претендую, всё подсмотрено в примерах, но - работает успешно):
1. делал модуль, содержащий все нужные мне типы и функции, которые будут использоваться в скрипте (само собой - кроме уже наработанных, типа TStrings). Через PSUnitImporter.exe из папки bin генерировал врапперы для них (не всегда четко отрабатывает, бывает нужно подправить ручками. Кстати, больше всего намучился с record-ами, оказалось - нужно указывать packed).

2. Добавлял получившийся враппер плагином в PSScript:
Код

FPSMySuperWrapper := TPSImport_uSuperPascalScriptWrappers1.Create(nil);
TPSPluginItem(FPSScript.Plugins.Add).Plugin := FPSMySuperWrapper;


3. В OnScriptCompile добавлял переменные, которые будут использоваться в скрипте, например, так:
Код

  Sender.AddRegisteredVariable('Intervals', 'TRouteIntervals');
  Sender.AddRegisteredPTRVariable('StartRouteTime', 'TDateTime'); // для использования функций из DateUtils нужно подключить плагин TPSImport_DateUtils.
  Sender.AddRegisteredPTRVariable('Cost', 'Double');


4. В OnScriptExecute - привязывал объявленные переменные к реальным:
Код

  Sender.SetVarToInstance('Intervals', FIntervals);
  Sender.SetPointerToData('StartRouteTime', @FStartRouteTime, Sender.FindNamedType('TDateTime'));
  Sender.SetPointerToData('Cost', @FCost, Sender.FindBaseType(btDouble));



5. И уже в тексте самого скрипта делаешь с этими переменными что хочешь, например:
Код

  Cost:= Intervals.FullRouteLength * 1024.5+MyDelphiFunctionFromWrapper(StartRouteTime);


После отработки скрипта в переменных получается то, что наработал скрипт, но меня интересовала одна - Cost (это для скрипта, а для программы - FCost).

Ну, а если даже сам скрипт не знает, какие переменные ему нужны - тут курить примеры с Variant-ами и массивами...

Это сообщение отредактировал(а) kami - 7.10.2013, 22:15
PM MAIL WWW   Вверх
kami
Дата 7.10.2013, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(klyaksa @  7.10.2013,  15:46 Найти цитируемый пост)
Тем более так, как я понял, можно связать уже имеющиеся переменные с переменными в скрипте. Но это не вариант, т.к. они могут быть любые.

мда... не дочитал.
А, собственно, как это - любые? То есть - программа говорит скрипту "на тебе что-то, сама не знаю что", а скрипт, совершенно не представляя, что же ему отдали, должен с этим что-то сделать нечто эдакое, да еще и вернуть другой набор чего-то, о чем в свою очередь программа не догадывается и -соответственно - не сможет использовать?
PM MAIL WWW   Вверх
klyaksa
Дата 8.10.2013, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Цитата(kami @  7.10.2013,  22:23 Найти цитируемый пост)
А, собственно, как это - любые? То есть - программа говорит скрипту "на тебе что-то, сама не знаю что", а скрипт, совершенно не представляя, что же ему отдали, должен с этим что-то сделать нечто эдакое, да еще и вернуть другой набор чего-то, о чем в свою очередь программа не догадывается и -соответственно - не сможет использовать? 

Например, дан скрипт (любой). Мы его текст пропарсили и получили какие в нем есть переменные. Потом запустили и надо получить значения (конечные) этих переменных и, допустим, в мемо их вывели с = лялял, х = 10...

Добавлено через 4 минуты и 58 секунд
Вроде бы по описанию что нужно умеет FastScript, но пробник с оф. сайта работать не захотел.

---------------------------
Delphi XE: bds.exe - Системная ошибка
---------------------------
Запуск программы невозможен, так как на компьютере отсутствует Tee9150.bpl. Попробуйте переустановить программу. 
---------------------------
ОК   
---------------------------


[Window Title]
Error

[Content]
Can't load package C:\DelphiXE\Fast\LibD15\dclfstee15.bpl.
Не найден указанный модуль.
Do you want to attempt to load this package the next time a project is loaded?

[Yes] [No]
PM MAIL   Вверх
kami
Дата 8.10.2013, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(klyaksa @  8.10.2013,  08:24 Найти цитируемый пост)
Потом запустили и надо получить значения (конечные) этих переменных и, допустим, в мемо их вывели с = лялял, х = 10...

Ввиду того, что твое приложение не знает, какие переменные есть в скрипте и, соответственно, - не имеет ни малейшего представления, что с ними делать дальше - не лучше ли будет сразу из скрипта выводить необходимые значения в тот же мемо и не заморачиваться на получение имен переменных в приложении? Можно даже не просто значения, а прямо текстовые описания предпринятых скриптом действий.

Добавлено через 54 секунды
То есть, получается - при запуске скрипта передали ему экземпляр мемо, а он пишет туда что хочет.
PM MAIL WWW   Вверх
klyaksa
Дата 8.10.2013, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Скрипт  пишет пользователь, ему не нужно заморачиваться с выводом переменных.
Только если самому добавлять строки в скрипт, но это как-то не очень. Хотя на крайний случай как вариант.
PM MAIL   Вверх
klyaksa
Дата 8.10.2013, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



kami,  а как в RemObjects Samples\Pascal Script for Delphi\TestApp подключить memo...? Добавляю плагины импорта на компиляции скрипта Project TestApplication.exe raised exception class EPSCompilerException with message 'Unable to register type TDrawItemEvent'.
Т.е. как в Import\fMain.pas, только с PSScript.

Вроде разобрался, в проекте с нуля заработало.

Это сообщение отредактировал(а) klyaksa - 8.10.2013, 12:49
PM MAIL   Вверх
klyaksa
Дата 8.10.2013, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Кстати, где можно глянуть что понимает RemObjects Pascal Script.
Можно ли как сразу инициализировать массивы?
SysUtils можно подцепить или каждую надо отдельно и импортировать?

Это сообщение отредактировал(а) klyaksa - 8.10.2013, 13:34
PM MAIL   Вверх
CynicRus
Дата 8.10.2013, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



Цитата(klyaksa @ 8.10.2013,  12:56)
Кстати, где можно глянуть что понимает RemObjects Pascal Script.
Можно ли как сразу инициализировать массивы?
SysUtils можно подцепить или каждую надо отдельно и импортировать?

Там очень много чего можно. К сожалению документация унылая, и потому приходится курить исходники.  Можно, например

TSA:=['string','anotherstring'] и т.д. В самом скрипте. Что понимает PascalScript - тебе нужен модуль uPSCompiler. Открываешь его и смотришь, чего он понимает. За счёт того, что приходится втыкать самому в код, реализация чего либо дополнительного в PS проблематична, но возможна. Вот например реализация метода перевода любой зарегистрированной PS переменной в строку:

Код


function MakeString(data : TPSVariantIFC) : string;
begin;
  if data.Dta = nil then
    result := 'Nil'
  else
  if data.aType.basetype in [btString,btChar] then
    result := PSGetAnsiString(Data.Dta,data.aType)
  else if data.aType.ExportName = 'BOOLEAN' then
    result := BoolToStr(PSGetInt(Data.Dta,data.aType) <> 0,true)
  else if data.aType.BaseType in [btExtended,btSingle,btDouble] then
    result := FloatToStr(PSGetReal(data.Dta,data.aType))
  else
    result := PSVariantToString(data,'');
end;

function ToStr_(Caller: TPSExec; p: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
begin
  result := true;
  Stack.SetAnsiString(-1, MakeString(NewTPSVariantIFC(Stack[Stack.Count-2],false)));
end;



А вот реалиация Swap для 2 переменных:

Код

function swap_(Caller: TPSExec; p: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
var
  Param1,Param2: TPSVariantIFC;
  tempCopy : pointer;
begin
  Result:=true;
  Param1 := NewTPSVariantIFC(Stack[Stack.count-1],true);
  Param2 := NewTPSVariantIFC(Stack[Stack.count-2],true);
  if Param1.aType.BaseType <> Param2.aType.BaseType then
    exit(false)
  else
  begin
    Param1.aType.CalcSize;
    param2.aType.CalcSize;
    if Param1.aType.RealSize <> Param2.aType.RealSize then
      exit(false);
    GetMem(tempcopy,Param1.aType.RealSize);
    Move(Param1.Dta^,tempCopy^,param1.atype.realsize);
    Move(Param2.Dta^,Param1.Dta^,param1.atype.realsize);
    Move(tempCopy^,Param2.Dta^,param1.atype.realsize);
    Freemem(tempcopy);
  end;
end;


Это сообщение отредактировал(а) CynicRus - 8.10.2013, 17:00
PM MAIL   Вверх
kami
Дата 9.10.2013, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(klyaksa @  8.10.2013,  12:56 Найти цитируемый пост)
Можно ли как сразу инициализировать массивы?

Я пробовал - константой объявить в скрипте не смог :( . А так хотелось...

Цитата(klyaksa @  8.10.2013,  12:56 Найти цитируемый пост)
SysUtils можно подцепить или каждую надо отдельно и импортировать?

Емнип, SysUtils подцепляется автоматом. По крайней мере я не задумывался над тем, что из плагинов нужно для (к примеру) StrToInt.
А вообще - да, с документацией немножко плоховасто. Но для не слишком крутых задач имеющихся примеров хватает. Если что-то нужно - открываем uPSC_xxxxxxx.pas и смотрим, что PSScript узнает, подключив плагин.

Сейчас ради интереса попробовал - в TestApp в скрипте можно написать
Код

 Memo2.Lines.Add('asretq349501924uftesdfa');
. Зачем там добавили вывод через MyWriteln - разве что для примера импорта функции... 
PM MAIL WWW   Вверх
CynicRus
Дата 9.10.2013, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



О, вчера забыл - а добавляется приведённый мной код в PS примерно вот так:
Код

procedure TPSThread.OnCompImport(Sender: TObject; x: TPSPascalCompiler);

***


  with x.AddFunction('function ToStr:string').Decl.AddParam do
  begin
    OrgName := 'x';
    Mode := pmIn;
  end;

  with x.AddFunction('procedure swap;').Decl do
  begin
    with AddParam do
    begin
      OrgName := 'x';
      Mode := pmInOut;
    end;

    with AddParam do
    begin
      OrgName := 'y';
      Mode := pmInOut;
    end;
  end;




PM MAIL   Вверх
klyaksa
Дата 9.10.2013, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Из SysUtils не все работает. Например, не все функции преобразования флоат в строку.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1552 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.