Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Макроподстановка кода(!) в Delphi?   Найти похожие ветки 

 
Серж   (2004-04-02 11:55) [0]

Есть некий расчет с постоянно изменяющимися параметрами. В упрощенном виде например такой: X=C*M/1000*.005. Все переменные компилятору известны. Как дать юзерам изменять алгоритм расчета?
Например положить этот шаблон в editbox так, чтоб прога делала эти нехитрые вычисления. Писать анализатор текста довольно муторно - во многих языках есть подстановки исполняемого кода. Кто нибудь знает как с этим в Delphi?


 
Digitman ©   (2004-04-02 12:11) [1]


> Кто нибудь знает как с этим в Delphi?


никак.


 
panov ©   (2004-04-02 12:13) [2]

> Макроподстановка кода(!) в Delphi? [D6, WinXP]

Использовать WSH - Windows Script Host


 
Серж   (2004-04-02 13:10) [3]

этого я и боялся... :-)


 
TUser ©   (2004-04-02 13:16) [4]

Прикрути к проге парсер мат. выражений. То, что юзер вводит - переводи в обр. польскую запись и используй для расчетов..


 
Думкин ©   (2004-04-02 13:59) [5]

Для локального использования такого, я проводил вычисления в динамически подключаемой библиотеке, код которой мог менять в окне программы. Потом компилировал и считал, потом менял и опять компилировал и т.д. Для компиляции таскал несколько файлов от дельфи.
Для серьезного же - как сказано выше.


 
Серж   (2004-04-02 14:03) [6]

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


 
TUser ©   (2004-04-02 14:17) [7]

Если у тебя есть выражение
a*(b+c)+d/2,
то обр. польская запись - это
bc+a*d2/+
Считается дяльше по-порядку
Заносим в стек b, потом - с
Видим + - значить складываем 2 последних элемента стека, записываем в предпоследний, последний удаляем
Заносим а
Видим * - умножаем
Заносим d
Заносим 2
Делим
Стек имеет вид (b+c)*a, d/2
Видим + - складываем

Для перевода записиси в обр. польскую надо совершить обход дерева - короче, бери книгу Дейкстры и вперед.


 
Серж   (2004-04-02 14:22) [8]

ок, прояснилось спасибо
А компонентики перевода бывают? ;-)


 
Anatoly Podgoretsky ©   (2004-04-02 14:24) [9]

Зачем, чем плох WSH?
Очень мощный инструмент


 
AlexNx   (2004-04-02 14:33) [10]

а еще проще скачать JVCL и там есть отличнейший компонент
JvInterpreterProgram


 
Серж   (2004-04-02 14:39) [11]

а вот это уже интересно...


 
panov ©   (2004-04-02 14:44) [12]

Пример использования WSH.
(c) Adder 2004г.

unit ufRunScript;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 sc: Variant;
begin
 try
   SC:=CreateOLEObject("ScriptControl");
   SC.Language:="VBScript";
   SC.Timeout:=-1;
   SC.AllowUI:=True;
   Label1.Caption:=SC.Eval(Edit1.Text);
 finally
   SC:=Unassigned;
 end;
end;

end.


 
AlexNx   (2004-04-02 14:49) [13]

>panov
все это классно. но  это только для простых вычислений, где не надо использовать данные из компонентов программы.


 
panov ©   (2004-04-02 14:51) [14]

>AlexNx   (02.04.04 14:49) [13]

Можешь любые данные, из любого места, любым способом, хоть...


 
Fay ©   (2004-04-02 14:54) [15]

Попробуй FastScript


 
panov ©   (2004-04-02 14:54) [16]

>AlexNx   (02.04.04 14:49) [13]

Еще посмотри на метод  sc.AddCode позволит выполнить целый скрипт.
Причем не только VB, но и JavaScript, например...

и здесь -
http://www.compress.ru/Temp/1773/index.htm


 
panov ©   (2004-04-02 14:55) [17]

А в самом VB можешь в скрипте вообще свою программу написать, сохранить в файл и выполнять по мере необходимости...


 
panov ©   (2004-04-02 14:56) [18]

а вот и ссылка на книгу-)
http://www.delphimaster.ru/books/978594723648/


 
Anatoly Podgoretsky ©   (2004-04-02 15:01) [19]

WSH очень мощный инструмент и не привязан к языку, можешь писать например на Перле или свой написать.


 
Algol   (2004-04-02 15:02) [20]


> panov


Скрипт это конечно хорошо, но если через формулу нужно прогнать большой массив дынных, то тормоза будут немерянные ИМХО.


 
panov ©   (2004-04-02 15:18) [21]

>Algol   (02.04.04 15:02) [20]

Это уже не по теме.

Тут выбирать надо...
Если нужно динамическое изменение скриптов - пожалте к WSH.

Если нужно обрабатывать большие массивы данных - причем здесь WSH?

WSH - инструментр-интерпретатор для выполнения скриптов, для удобства, а не для скорости исполнения.


 
AlexNx   (2004-04-02 17:19) [22]

>panov
 я вот, что имеол ввиду. Скажем есть TTable с данными и нам эти данные нужно изменять по определенной формуле... или обрабатывать  данное табло скриптом... то MSH здесь не пляшет...


 
panov ©   (2004-04-02 17:26) [23]

>AlexNx   (02.04.04 17:19) [22]

Почему не пляшет? Запросто.

Конечно, если обрабатывать миллионы записей на клиенте, то это будет не быстро, но для обработки десятков тысяч вполне подойдет.

Ноне надо забывать, что тут есть еще и варианты с обработкой на сервере БД.

Теоретически можно обрабатывать на сервере Oracle - он поддерживает технологию COM и OLE.


 
AlexNx   (2004-04-02 17:31) [24]

Тогда как же мне в MSH доступиться до уже созданного, заполненного TTable и бегать по нему
Может я чего не понимаю...


 
panov ©   (2004-04-02 17:57) [25]

>AlexNx   (02.04.04 17:31) [24
Все же рекомендую почитать статью - чрезвычайно полезная-)

http://www.compress.ru/Temp/1773/index.htm


 
WebErr ©   (2004-04-02 18:05) [26]

А зачем использовать готовые скрипты (да ещё и скрипты!), когда можно несложный алгоритм перевода (1 курс!!!) сотворить вручную, заодно и не дать своим обленившимся от Делфи мозгам окончательно заплыть жиром!!! :))))


 
WebErr ©   (2004-04-02 18:06) [27]


> panov ©

Хотя и статьи, и книга внушают опасение, что я всё-таки чему-то научусь! :) Они и вправду полезные, но на них не у всех есть время! :))))


 
panov ©   (2004-04-02 18:13) [28]

>WebErr ©   (02.04.04 18:05) [26]

Да вопрос не в том, чтоб готовые использовать, а чтобы научиться использовать-)

>WebErr ©   (02.04.04 18:06) [27]

Хотя и статьи, и книга внушают опасение, что я всё-таки чему-то научусь! :) Они и вправду полезные, но на них не у всех есть время! :))))

Ну время можно найти...

хм... некоторые с умными книгами ходят сами знаете куда - там, где посидеть можно...


 
Algol   (2004-04-02 18:16) [29]

Можно еще формировать динамически исходник , затем в ран-тайме компилить оффлайн компилятором (dcc32) в dll-ку, потом динамически ее подключить...
Конечно немного муторно, но зато производительность будет очень высокая.


 
WebErr ©   (2004-04-02 18:16) [30]

Удалено модератором
Примечание: offtopic


 
panov ©   (2004-04-02 18:21) [31]

Удалено модератором
Примечание: offtopic


 
WebErr ©   (2004-04-02 18:23) [32]

Удалено модератором
Примечание: offtopic


 
Anatoly Podgoretsky ©   (2004-04-02 18:49) [33]

Удалено модератором
Примечание: offtopic


 
WebErr ©   (2004-04-02 18:56) [34]

Удалено модератором


 
panov ©   (2004-04-02 18:59) [35]

Удалено модератором


 
WebErr ©   (2004-04-02 19:01) [36]

Удалено модератором


 
panov ©   (2004-04-02 19:02) [37]

Удалено модератором


 
Anatoly Podgoretsky ©   (2004-04-02 19:02) [38]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.025 c
1-1080805977
alex123
2004-04-01 11:52
2004.04.18
Поменять порядок вкладок в PageControl


14-1080327503
Knight
2004-03-26 21:58
2004.04.18
Комбайн... CD-RW+DVD...


3-1080034794
Novichok
2004-03-23 12:39
2004.04.18
Исходник для локалки - можно ли применить в сети


7-1077131139
Khabibulin
2004-02-18 22:05
2004.04.18
A:


14-1080439909
Думкин
2004-03-28 06:11
2004.04.18
С днем рождения! 28 мамрта.