Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 686
от 21.12.2006, 09:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 415, Экспертов: 69
В номере:Вопросов: 4, Ответов: 8


Вопрос № 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)
буду очень благодарен за ваши советы.

если кому удобней по асе, стучите: 4873661
Отправлен: 15.12.2006, 13:43
Вопрос задал: [CRA5H-OVERRIDE] (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: KiberZero
Здравствуйте, [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

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

Удачи!
Ответ отправил: 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
Для работы Вам понадобится точная информация, какие параметры обмена поддерживает ваше устройство, и формат данных, которые Вы будете получать

Если будут вопросы - пишите в личку
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 6-ой класс)
Ответ отправлен: 15.12.2006, 21:29

Отвечает: PaVeL_Ekt
Здравствуйте, SIR!

Запись в файл по расписанию:

Ставим таймер с интервалом в минуту (думаю нет разницы запуститься в 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное