Вопрос № 67106: доброго времени суток товарищи эксперты!
у меня такой вопрос к вам: Как вызвать JavaScript функцию из Delphi?
пишу ActiveX на Delphi, скомпилировал файл OCX прописал его в HTML документе как объект, рядом пишется JavaScript (с простейшей фун...Вопрос № 67139: Здравствуйте уважаемые эксперты.
Недавно задавал вопрос по переводу из двоичной в восьмеричную СС.
Тут назрел еще вопрос, как из шестнадцатиричной СС перевести в двоичную, разумеется минуя 10 и вообще все что ток мона миную. Т.е. на прямик.<b...Вопрос № 67165: Привет знатоки. Есть некий прибор считающий расход вещества,
находящийся в отдаление от рабочего места.
У него есть выход на Com-порт. Хотелось бы создать программу
что бы выводить расход (суточный, часовой и т.д.) на компьютер.
В ...Вопрос № 67198: В Delphi 2006 клавиша пробел не сдвигает символы вправо, а стирает их. Также и при вводе. Настройки не менял. Почему так происходит и как с этим бороться?
Перезагрузка не помогает....
Вопрос № 67.106
доброго времени суток товарищи эксперты!
у меня такой вопрос к вам: Как вызвать JavaScript функцию из Delphi?
пишу ActiveX на Delphi, скомпилировал файл OCX прописал его в HTML документе как объект, рядом пишется JavaScript (с простейшей функцией которая вызывает alert) задача заключается в том чтобы из активной формы добраться до нашей функции.
(обратное действие сделано, JavaScript обращается к ActiveX'u)
буду очень благодарен за ваши советы.
Для того, чтобы реализовать работу со скриптами, необходимо воспользоваться компонентом "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
Если что-то будет непонятно, спрашивайте, будем вместе решать вашу задачу.
Удачи!
Ответ отправил: KiberZero (статус: 5-ый класс)
Ответ отправлен: 15.12.2006, 23:28
Вопрос № 67.139
Здравствуйте уважаемые эксперты.
Недавно задавал вопрос по переводу из двоичной в восьмеричную СС.
Тут назрел еще вопрос, как из шестнадцатиричной СС перевести в двоичную, разумеется минуя 10 и вообще все что ток мона миную. Т.е. на прямик.
Спс. всем за ответы, за каждый ответ поставлю пять:) тем кто разумеется поможет.
Отправлен: 15.12.2006, 17:12
Вопрос задал: Sarymian (статус: 3-ий класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: DeVampir
Здравствуйте, Sarymian!
Каждая цифра в 16-ой системе будет представлена четырьмя в двоичной. Соответственно нужно с конца перебирать цифры, выделяя в результирующей строке под каждую 4 символа, и в это место записывать единицы и нули (можно создать массив соответствия и перебирать его). После этого нужно не забыть удалить нули в начале (если они есть конечно!) Удачи!
--------- Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 3-ий класс)
Ответ отправлен: 15.12.2006, 17:42 Оценка за ответ: 5 Комментарий оценки: Как и обещал:)
Отвечает: Gh0stik
Здравствуйте, Sarymian!
Вот предлагаю Вам рассмотреть такой метод перевода из Hex в Bin.
На мой взгляд весьма оригинален...
Причем предусмотрен вариант когда в числе записаном 16-ричной записью используются не большие буквы (A..F), но и маленькие (a..f).
Good Luck!!!
Приложение:
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 15.12.2006, 22:16 Оценка за ответ: 5 Комментарий оценки: "Вот предлагаю Вам рассмотреть такой метод перевода из Hex в Oct." - Oct это восьмеричная СС, Bin двоичная:( Но все же пример написан правильно под двоичную:) Спс.
Вопрос № 67.165
Привет знатоки. Есть некий прибор считающий расход вещества,
находящийся в отдаление от рабочего места.
У него есть выход на Com-порт. Хотелось бы создать программу
что бы выводить расход (суточный, часовой и т.д.) на компьютер.
В инете про приём данных ничего не нашёл. Может, кто поможет, чем может?
Пожалуйста. И второе нужно, что бы данные сохранялись, допустим, в 9-00 ежесуточно в программе до следующих суток.
Может сумбурно объяснил извините
Не откажите в просьбе начинающему.
Отправлен: 15.12.2006, 21:16
Вопрос задал: SIR (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, SIR!
В общем, алогритм такой:
открываете com-порт на чтение функцией CreateFile('COM1', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0)
устанавливаете параметры обмена (скорость, контроль четности и др) с помощью функции SetCommState
и после этого начинаете читать данные функцией ReadFile.
Описание параметров функций можно найти во встроенной справке Delphi
Для работы Вам понадобится точная информация, какие параметры обмена поддерживает ваше устройство, и формат данных, которые Вы будете получать
Ставим таймер с интервалом в минуту (думаю нет разницы запуститься в 9:00:00 или 9:00:59)
в обработчике таймера пишем такой код:
Var
Hour, Min, Sec: Word;
begin
DecodeTime(Time, Hour, Min, Sec);
if (Hour=9)and(Min=0) then
begin
//запись в файл
end;
end;
Записать в файл можно несколькими способами.
Простой текстовый файл:
Var F: TextFile;
...
assignfile(F, FileName);
if fileexists(FileName) then append(f) // если существует открываем
else rewrite(f);
WriteLn(F, String_For_Record);
CloseFile(F);
Нетипизированный файл:
Var F: TextFile;
...
assignfile(F, FileName);
if fileexists(FileName) then reset(F, 1) // если существует открываем
else rewrite(F, 1); // перезаписываем (создаем новый)
BlockWrite(F, String_For_Record, Length(String_For_Record));
CloseFile(F);
Еще можно записывать через TFileStream:
var
FileStream: TFileStream;
...
FileStream:=TFileStream.Create(File_Name, fmOpenReadWrite);
FileStream.WriteBuf(String_For_Record, Length(String_For_Record);
FileStream.Free;
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 9-ый класс)
Ответ отправлен: 18.12.2006, 13:18
Вопрос № 67.198
В Delphi 2006 клавиша пробел не сдвигает символы вправо, а стирает их. Также и при вводе. Настройки не менял. Почему так происходит и как с этим бороться?
Перезагрузка не помогает.
Отправлен: 16.12.2006, 06:26
Вопрос задал: MasterZ (статус: 7-ой класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Алтунин Василий Владимирович
Здравствуйте, MasterZ!
Скорее всего включен режим замены для редактора Делфи, просто нажмите клавишу Insert. ;)
--------- ... Дорогу осилит Идущий ...
Ответ отправил: Алтунин Василий Владимирович (статус: 3-ий класс)
Ответ отправлен: 16.12.2006, 06:40 Оценка за ответ: 5 Комментарий оценки: Действительно, так оно и есть!
Отвечает: Bouffon
Здравствуйте, MasterZ!
ты случайно включил режим замены включить/выключить клавиша INSERT
вдруг что пиши на аську 458786618
Ответ отправил: Bouffon (статус: 1-ый класс)
Ответ отправлен: 16.12.2006, 11:35 Оценка за ответ: 5
Отвечает: Nick_K
Здравствуйте, MasterZ!
Отключи клавишу insert на клавиатуре и все будет ОК.
Ответ отправил: Nick_K (статус: 1-ый класс)
Ответ отправлен: 16.12.2006, 12:48 Оценка за ответ: 5