Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.04.2013, 02:26
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию Вопросы по Microsoft ScriptControl 1.0

Доброго времени суток.
Имеется JavaScript. Из-за большого объёма скрипта, перевести его на делфийский язык не представляется возможным.
Решил его пользовать через Microsoft ScriptControl 1.0.

Делаю следующим образом.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ScriptControl: TScriptControl;
 pPar:PSafeArray;
 varr,res:Variant;
 pkBaseURL: String;
 Script, LineScript: String;
 ScriptFile: TextFile;
begin
    AssignFile(ScriptFile,'piwik.js');
    Reset(ScriptFile);
if IOResult <> 0 then
  begin
    MessageBox(0,'Ошибка доступа к файлу.','ОШИБКА',0);
    exit;
  end;

  // чтение из файла
  while not EOF(ScriptFile) do
  begin
    readln(ScriptFile, LineScript); // прочитать строку из файла
    Script := Script + LineScript+#13+#10;
  end;

  Memo1.Text := Script;
  CloseFile(ScriptFile);
    ScriptControl := TScriptControl.Create(Self);
    ScriptControl.Language := 'JavaScript';
    ScriptControl.AddCode(Script);

    varr:=VarArrayCreate([0, 1], varVariant);
    pkBaseURL := 'http://piwik.rehcusebe.ru/';
    varr[0]:= pkBaseURL + 'piwik.php';
    varr[1]:=1;
    pPar:=PSafeArray(TVarData(varr).VArray);
    res:=ScriptControl.Run('Piwik.getTracker',pPar);
    ShowMessage(res);
    FreeAndNil(ScriptControl);

end;

В момент отработки строчки кода
Код:
ScriptControl.AddCode(Script);
Выдаёт ошибку. Посмотреть можно на вложенном изображении.
Так же выкладываю архив сo скриптом. И им же самым, только после приведения кода в божеский вид в формате *.docx.

Прошу подсказать, в чём проблема ? Как и где надо задать определение ?
Изображения
Тип файла: png err.png (47.9 Кбайт, 1 просмотров)
Вложения
Тип файла: rar piwik.rar (72.6 Кбайт, 2 просмотров)

Последний раз редактировалось seeman_tm, 25.04.2013 в 14:52.
Ответить с цитированием
  #2  
Старый 25.04.2013, 09:56
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  ActiveX,
  ComObj,
  Windows, Messages, SysUtils, Variants,
  MSScriptControl_TLB in 'MSScriptControl_TLB.pas';

var
  ScriptControl: IScriptControl;
  Parameters: OleVariant;
  Params: PSafeArray;

begin
  OleInitialize(nil);
  ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
  ScriptControl.Language:='javascript';
  ScriptControl.AddCode('function showmessage(msg, ttl) {var WScriptShell = new ActiveXObject("WScript.Shell"); WScriptShell.Popup(msg, 60, ttl);}');
  Parameters:=VarArrayOf(['Сообщение', 'Заголовок']);
  Params:=PSafeArray(VarArrayAsPSafeArray(Parameters));
  ScriptControl.Run('showmessage', Params);
end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 25.04.2013, 14:55
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию

Благодарю, но темка почемуто покоцалась. И первый пост начал отображаться не тот, вернее не дописанный. Отсюда следует что ты не понял в чём суть вопроса.
Элементарные скрипты и у самого запустить получается.
Ну а сейчас, скрипт объёмный и сложный. Можешь поглядеть файлики в архиве выложенном выше.
Именно в момент добавления кода в ScriptControl, валится вышеуказанная на картинке ошибка.

Последний раз редактировалось seeman_tm, 25.04.2013 в 15:20.
Ответить с цитированием
  #4  
Старый 26.04.2013, 16:40
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию Поднимим тему.

И так. Ругань была из-за того, что не была описана переменная через Var.
Так как эта переменная представляет собой некий Object, включающий в себя дополнительные переменные, то встаёт вопрос, а как создать такой объект и передать его в скрипт ?

Последний раз редактировалось seeman_tm, 26.04.2013 в 19:30.
Ответить с цитированием
  #5  
Старый 28.04.2013, 08:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

PHP код:
var myvar = new MyClass(); 
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 29.04.2013, 00:08
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию

Ага, тнх. Натолкнуло на мысль.
Сделал. Но вот не задача. Появилась другая ошибка. Смотрите прикреплённый скриншот.

Вот собственно код в делфи:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ScriptControl: TScriptControl;
 pPar:PSafeArray;
 varr,piwikTracker:Variant;
 pkBaseURL: String;
 Script, LineScript: String;
 ScriptFile: TextFile;
 Document: IDispatch;
begin
   AssignFile(ScriptFile,'piwik.js');
    Reset(ScriptFile);
if IOResult <> 0 then
  begin
    MessageBox(0,'Ошибка доступа к файлу.','ОШИБКА',0);
    exit;
  end;

  // чтение из файла
  while not EOF(ScriptFile) do
  begin
    readln(ScriptFile, LineScript); // прочитать строку из файла
    Script := Script + LineScript+#13+#10;
  end;

  Memo1.Text := Script;
  CloseFile(ScriptFile);


    ScriptControl := TScriptControl.Create(Nil);
    ScriptControl.Language := 'JavaScript';
    ScriptControl.AddCode('var document= new Object("[object HTMLDocument]");');
    ScriptControl.AddCode('var navigator= new Object("[object Navigator]");');
    ScriptControl.AddCode('var screen= new Object("[object Screen]");');
    ScriptControl.AddCode('var window= new Object("[object Window]");');
    ScriptControl.AddCode('window.location = new Object("[object window.location]");');
    ScriptControl.AddCode('window.location.href = "[window.location.href]";');
    ScriptControl.AddCode(Script);

 {   pkBaseURL := 'http://piwik.rehcusebe.ru/';
    varr:=VarArrayCreate([0, 1], varVariant);
    varr[0]:= pkBaseURL + 'piwik.php';
    varr[1]:= 1;

    pPar:=PSafeArray(TVarData(varr).VArray);
 //   piwikTracker :=ScriptControl.Run('Piwik.getTracker',pPar);     }
    ShowMessage('OK '+piwikTracker);
    FreeAndNil(ScriptControl);

end;

Как видно, скрип не запускается. Ошибка сыпется при добавлении кода.
Код:
ScriptControl.AddCode(Script);
Посоветуйте, как победить эту ошибку ?
Изображения
Тип файла: png err2.png (39.3 Кбайт, 6 просмотров)

Последний раз редактировалось seeman_tm, 29.04.2013 в 00:10.
Ответить с цитированием
  #7  
Старый 29.04.2013, 09:10
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

для начала отладь скрипт в IE с Internet Explorer Developer Tools, а потом его к Delphi подключай.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 29.04.2013, 19:31
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию

Цитата:
Сообщение от NumLock
для начала отладь скрипт в IE с Internet Explorer Developer Tools, а потом его к Delphi подключай.

Нет смысла отлаживать по нескольким причинам.
1. Так как он работает в браузере (по крайней мере в Firefox).
2. Он загружается с сайта.
3. Есть вероятность, что сайт внесёт логическое изменение скрипта.
4. Да и мало ли что ещё.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter