Консультация № 67106
15.12.2006, 13:43
0.00 руб.
0 1 1
доброго времени суток товарищи эксперты!
у меня такой вопрос к вам: Как вызвать JavaScript функцию из Delphi?
пишу ActiveX на Delphi, скомпилировал файл OCX прописал его в HTML документе как объект, рядом пишется JavaScript (с простейшей функцией которая вызывает alert) задача заключается в том чтобы из активной формы добраться до нашей функции.

(обратное действие сделано, JavaScript обращается к ActiveX‘u)
буду очень благодарен за ваши советы.

если кому удобней по асе, стучите: 4873661

Обсуждение

Неизвестный
15.12.2006, 23:28
общий
это ответ
Здравствуйте, [CRA5H-OVERRIDE]!

Для того, чтобы реализовать работу со скриптами, необходимо воспользоваться компонентом "Microsoft ScriptControl" со вкладки ActiveX и установить свойство типа скрипта. После этого, соответствующим методом(зависит от конкретной задачи) описать процедуру вызова, описания и работы скрипта. Извините, но вы мало предоставили информации по вашему вопросу, поэтому чтобы долго не разъяснять и не вдаваться в подробности, прочитайте ниже о методах настройки вызовов скриптов.

Если у вас отсутствует этот компонент, то установите его из библиотеки типов.

Основной принцип вызова скрипта в данном компоненте основан на вызове TScriptControl, например:

Button1.OnClick := ScriptControl1.OnClickHandler;
Настройка свойств и вызов скриптов
Рассмотрим ключевые свойства и методы TScriptControl.
property Language: String
Задает язык, интерпретатор которого будет реализовывать компонент. В стандартной поставке доступны VBScript и JScript, однако, если в вашей системе установлены расширения Windows Scripting, возможно использование других языков, таких как Perl или Rexx
property Timeout: Integer
Задает интервал исполнения скрипта, по истечении которого генерируется ошибка. Значение –1 позволяет отключить ошибки таймаута и позволить скрипту исполняться неограниченное время
property UseSafeSubset: Boolean
При установке этого свойства в TRUE компонент может выполнять ограниченный набор действий, заданный текущими установками безопасности в системе. Использование этого свойства полезно, если Вы запускаете скрипты, полученные, например, по Интернет.
procedure AddCode(const Code: WideString);
Добавляет код, заданный параметром к списку процедур компонента. В дальнейшем эти процедуры могут быть вызваны при помощи метода Run, либо из других процедур скрипта.
ScriptControl1.AddCode(Memo1.Text);
function Eval(const Expression: WideString): OleVariant
Выполняет код, заданный в параметре Expression и возвращает результат исполнения. Позволяет выполнить код без добавления его к списку процедур компонента.
procedure AddObject(const Name: WideString; Object_: IDispatch; AddMembers: WordBool);
Добавляет объект к пространству имен компонента. Объект должен быть OLE-automation сервером. Добавленный объект доступен как объект в коде скрипта. Например, если в программе создан Automation сервер External, реализующий метод DoSomething(Value: Integer), то добавив объект
ScriptControl1.AddObject(‘External’, TExternal as IDispatch, FALSE);
Мы можем в коде скрипта использовать его следующим образом:
Dim I
I = 8 + External.DoSomething(8)
function Run(const ProcedureName: WideString; var Parameters: PSafeArray): OleVariant;
Выполняет именованную процедуру из числа ранее добавленных при помощи метода AddCode. В массиве Parameters могут быть переданы параметры
procedure Reset;
Сбрасывает компонент в начальное состояние, удаляя все добавленные ранее объекты и код.
Таким образом, TScriptControl представляет собой достаточно гибкую исполняющую систему с возможностями расширения путем добавления в её пространство имен серверов автоматизации OLE.
Интеграция TScriptControl с VCL
В существующем виде возможности TScriptControl сильно ограничены сложным доступом к классам VCL. Исполнение интерпретируемого кода – это хорошо, однако хотелось бы иметь возможность их него обращаться к компонентам в программе, получать и устанавливать их свойства, обрабатывать возникающие в них события, например следующим образом:
Sub Main()
Dim Control
Control = Self.Controls("Panel2")
Control.Add "Panel3", "TPanel"
With Panel3
.Align = "alTop"
.BevelOuter = "bvNone"
.Height = 40
.Caption = ""
.Add "Btn", "TButton", True
With Btn
.Top = 10
.Left = .Top
.Caption = "Click me"
End With

End With
End Sub

Sub Btn_OnClick()
Dim StatusBar
Dim Panel
Dim I
I = 0
For Each Panel in StatusBar.Panels
I = I + 1
with Panel
.Text = .Text & " " & CStr(I)
End With
Next
End Sub

Если что-то будет непонятно, спрашивайте, будем вместе решать вашу задачу.

Удачи!
Форма ответа