Синтаксис OLE Clarion ... ?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Синтаксис OLE Clarion ... ?

Сообщение Игорь Столяров »

Привет всем !

Пробую перевести код с Visual Script на Clarion и уперся в синтксис работы Clarion c OLE ... :(
MSN и справку на Clarion смотрел, слабо помогает ...

--- Исходный код на VS ---

Dim Store
Set Store = CreateObject("CAPICOM.Store")
Store.Open
Set Certificates = Store.Certificates

If Certificates.Count > 0 Then
Set Certificates = Certificates.Find(0,"123456")
End If

--- Переводим на Clarion ---

Store Long
Certificates Long

Code

Store = Create(0,Create:Ole)
Store{Prop:ReportException} = True
Store{Prop:Create} = 'CAPICOM.Store'
Store{'Open()'}

! Непонятно как перевести Set Certificates = Store.Certificates
! Вариант Certificates = Store{'Certificates'} не работает, ну да ладно ...

If Store{'Certificates.Count'}
И вот здесь затык полный .... потому, что варианты
Store{'Certificates'} = Store{'Certificates.Find(0,"123456")'} и
Store{'Certificates = Certificates.Find(0,"123456")'}
не работают одинаково ...
end

Если у кого нибудь есть опыт работы c OLE через Clarion - подскажите пожалуйста, какой
должен быть правильный синтаксис ? C самой кодировкой - разберемся, было бы понятно как делать ... ;)

Заранее огромное спасибо за любые идеи !
Make Clarion Great Again ! 😎
Apron63
Новичок
Сообщения: 14
Зарегистрирован: 21 Октябрь 2007, 16:42
Откуда: Самара

Re: Синтаксис OLE Clarion ... ?

Сообщение Apron63 »

Одно время пытался работать с Corel используя OLE.
К сожалению, проект забросил :( , но наработки остались
Например, строка на VB из Corel
Dim s1 As Shape
Set s1 = ActiveLayer.CreateRectangle(0.792461, 9.187047, 3.421122, 7.461988)

А вот так это будет на Clarion
LOC:OleFeq{'ActiveLayer.CreateRectangle(' & i# & ',' & j# & ',' & i#+1 &',' & j#+1 & ',"Тестовый пример!")'}
Ну тут начались проблемы - не так отображаются дробные числа, в конце концов чего-то не срослось... :(
Clarion 6.3 ABC
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Синтаксис OLE Clarion ... ?

Сообщение Игорь Столяров »

Да уж ... У меня это тоже не первый заход на попытку написать что-нибудь на Clarion OLE ...
И всегда что-то не сходится. Зачем было изобретать велосипед ? Непонятно. Не уже ли так
сложно было реализовать в Clarion привычный, а главное работающий, синтаксис, который есть в других языках ...
Сейчас (последние 2 года) в SV "изобретают" синтаксис dot Net. Как бы опять беды не вышло.

А работу с CAPICOM прекрасно написал на VBScript и встроил в приложение на Clarion ...
хотя это и унизительно. :)
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Синтаксис OLE Clarion ... ?

Сообщение Дед Пахом »

Вот пример, правда для другого OLE, но идею можно уловить.
For example creating new e-mail with MS Outllok (not Outllok Express):

OutlookObject long
MailObject cstring(50)
! create OLE control
OutlookObject=create(0,create:ole)
! create OLE object
OutlookObject{prop:create}='Outlook.Application'
!Create new mail object:
mailobject = OutlookObject{'CreateItem(0)'} !( 0 - new mailitem)
! add recepient (my e-mail for example)
OutlookObject{clip(mailobject) &
'.Recipients.Add("o...@elmis.omskelecom.ru")'}
! add copy to my wife
OutlookObject{clip(mailobject) &
'.Recipients.Add("b...@elmis.omskelecom.ru")'}
! set subject
OutlookObject{clip(mailobject) & '.Subject'}='Example' ! message subject
! set text
OutlookObject{clip(mailobject) & '.Body'}='It works fine!' ! message text
! add picture as attachment
OutlookObject{clip(mailobject) & '.Attachments.Add'}='c:\money.bmp' ! file
name
! send e-mail
OutlookObject{clip(mailobject) & '.Send'}
OutlookObject{prop:deactivate}
destroy(OutlookObject)

The same things are possible for all outlook items (contacts,appointments
and so on). Every item has its own properties and methods, of course.

Good luck
Oleg Chernov
Elmis Software
o...@elmis.omskelecom.ru
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Синтаксис OLE Clarion ... ?

Сообщение Игорь Столяров »

Да, спасибо за пример - немного стало понятней.
По крайне мере как можно инициализировать и использовать свойства объекта.
Но к сожалению осталась нерешенной проблема, как передавать параметры при вызове метода объекта.

Например VBScrip есть код:

Dim SignedData, StringInfo
StringInfo = LoadFile("C:\Test.rar") ' Загрузили в строку содержимое файла.
Set SignedData = CreateObject("CAPICOM.SignedData")
SignedData.Verify StringInfo, False, False

Тогда, в переводе на Clarion получается, что

SignedData Long
StringInfo String(4096)
Code

SignedData = Create(0,Create:Ole)
SignedData{Prop:ReportException} = True
SignedData{Prop:Create} = 'CAPICOM.SignedData'

StringInfo = LoadFile("C:\Test.rar") ! Загрузили в строку содержимое файла.
SignedData{'Verify(' & ??? & ',0,0')'}

Насколько я понимаю, в исходном приере передается адрес строки. Но передача Address(StringInfo) не
проходит (да если и задуматься - то и не должна проходить). А что еще здесь можно придумать ?
Для Prop:SQL - эта проблема решается через Bind(), но здесь что-то не получается ... :(
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Синтаксис OLE Clarion ... ?

Сообщение Дед Пахом »

Смотрим топик в хелпе "Parameter Passing to OLE/OCX Methods"
С уважением, ДП
Ответить