Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Макроподстановка кода(!) в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.024 c
11-1062275252
Serega123
2003-08-31 00:27
2004.04.18
Как можно убрать кнопку с панели задач?


3-1079534042
stelius
2004-03-17 17:34
2004.04.18
Transaction


7-1076588783
h0use
2004-02-12 15:26
2004.04.18
Определение типа ОС


14-1080281180
Dmitriy O.
2004-03-26 09:06
2004.04.18
Мож кто делал ?


3-1079694074
Mim
2004-03-19 14:01
2004.04.18
Редатируемый кросстаб





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский