Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2008, 10:36   #1
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
По умолчанию Выполнение строки как кода в Delphi

Каким образом в Delphi можно реализовать выполнение строки (String) как код, или хотя бы перейти к функции с названием в переменной типа String?
Asteroid вне форума Ответить с цитированием
Старый 08.09.2008, 12:18   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Меня тоже всегда интересовал этот вопрос. Для преобразования строки в формулу использую TCalcExpress. Работает отлично, указываем переменные, подставляем их значения... и вперед. Но это мелочи.
А возможно сделать такое...?
Например у меня в текстовом файле написано
Код:
aSumma:=Table1Summa.Value;
aProcentNDS:=Table1ProcentNDS.Value;
aItog:= aSumma / 100 * aProcentNDS;
ShowMessage(floattostr(aItog));
И далее
Код:
procedure TForm1.Button1Click(Sender: TObject);
var aSumma, aNDS, aItog: Double;
begin
//выполнить то, что написано в текстовом файле
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 08.09.2008, 13:05   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Это возможно с использованием компонент.
Типа таких:
"Innerfuse Pascal Script III"
TPaxScripter
paxCompiler
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.09.2008, 23:12   #4
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
По умолчанию

Вот здесь можно скачать компонент PaxСompiler - позволяет выполнять строки во время выполнения программы (из txt файла в том чиле). Там же есть и дока к нему, версии компонента для Delphi от 5 до 2007...

Спасибо Serge_Bliznykov за наводку!
Asteroid вне форума Ответить с цитированием
Старый 10.09.2008, 14:30   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

И тебе Спасибо за ссылку. Проверил. Работает. Круто.
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.09.2008, 16:14   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

А как насчёт скорости? В бинарные скрипты позволяет переводить? А то я тут как всегда амбициозный прект задумал
---
вооооо ))
http://www.remobjects.com/page.asp?id={9A30A672-62C8-4131-BA89-EEBBE7E302E6}
пыщь

Последний раз редактировалось JTG; 10.09.2008 в 16:44.
JTG вне форума Ответить с цитированием
Старый 10.09.2008, 20:45   #7
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
По умолчанию

Для создания бинирных файлов есть функция TPaxCompiler.Compile, а для исользования TPaxProgram компонент (мотоды LoadFromFile потом Run и тд.) Но реально скрость не засекал - примерчики простнькие так все летает, а как на деле - кто его знает...
Asteroid вне форума Ответить с цитированием
Старый 28.04.2009, 14:57   #8
DAV88
 
Регистрация: 25.04.2009
Сообщений: 9
По умолчанию

А может кто-нить подскажет как с помощью PaxСompiler вставить строку как код?а то че-то не могу разобраться в английской инструкции.Мне просто нужно вставить функцию,которая будет введена в эдите вставить как код.
DAV88 вне форума Ответить с цитированием
Старый 28.04.2009, 15:08   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Пользуйтесь RTTI и динамической загрузкой DLL при нормальдном проектировании и документировании требований к библиотекам в подобном изврате потребности не возникнет )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 29.04.2009, 10:01   #10
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
По умолчанию

2 DAV88:

Можно так...

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, PaxCompiler, StdCtrls, PaxProgram;

type
  TForm1= class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    PaxCompiler1: TPaxCompiler;
    PaxPascalLanguage1: TPaxPascalLanguage;
    PaxProgram1: TPaxProgram;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  str:string;
begin
  str:='Say '; // переменная для примера

  paxCompiler1.Reset;  // Готовим PaxCompiler
  paxCompiler1.RegisterLanguage(PaxPascalLanguage1); // Скрипт будет на Паскале

  // Теперь нужно зарегистрировать все процедуры, переменные, функции и т.д. (точнее указатели на них)
  // которые мы будем ипользовать в скрипте
  paxCompiler1.RegisterHeader(0, 'procedure ShowMessage(const Msg: string);',@ShowMessage);
  // Если процедура или функция, то RegisterHeader

  paxCompiler1.RegisterVariable(0,'str:string;',@str);
  // Если переменная, константа то RegisterVariable

  paxCompiler1.AddModule('main',PaxPascalLanguage1.LanguageName);
  // Добовляем новый модуль (название произвольное)

  // и собственно сам код - строка за строкой...
  paxCompiler1.AddCode('main','begin');
  paxCompiler1.AddCode('main',Edit1.Text);
  paxCompiler1.AddCode('main','end.');

  if  paxCompiler1.Compile(paxprogram1) then // компилируем
  begin                                      // запускаем!
    PaxProgram1.Run;
  end
  else
    ShowMessage('Error compile');
end;

end.
Юзай
Asteroid вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi 7, как прервать выполнение программы Altera Софт 3 27.07.2008 15:14
Delphi. Редактор кода. BOBAH13 Общие вопросы Delphi 5 25.05.2008 00:20
Перевод кода с Fortran-77 на Delphi unhide Помощь студентам 3 20.05.2008 14:27
Трансляция кода из Delphi в C phobos Помощь студентам 9 21.04.2007 18:26
Выполнение командной строки в Delphi Alar Общие вопросы Delphi 0 29.10.2006 19:44