Вопрос по примеру Shell.Explorer

Clarion, Clarion 7

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

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

Вопрос по примеру Shell.Explorer

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

Добрый день !

Наверно, вопрос к автору (Andrew Myalin): По Вашему совету разбираюсь с работой Shell.Explorer и возник вопрос:
- а можно через интерфейс выключить не только управление, но и работу ссылок внутри окна ? Т.е. если в открытой HTML странице есть ссылки - то заблокировать их работу ?
Всех или только работающих на вызов новых окон ...
Только не посылайте сразу опять на MSDN - я там уже был ... ;)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Посмотрел сейчас на кокласс WebBrowser, похоже, если реализовать метод BeforeNavigate интерфейса DWebBrowserEvents2 так, чтобы последний его параметр Cancel стал равным true, то ни одна команда перехода по url работать не будет. Вот из MSDN (а почему нет?)
Cancel
Boolean value that the container can set to True to cancel the navigation operation, or to False to allow it to proceed.
С уважением, ДП
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Вопрос по примеру Shell.Explorer

Сообщение Andrew™ »

[quote="Игорь Столяров"]Добрый день !

Наверно, вопрос к автору (Andrew Myalin): По Вашему совету разбираюсь с работой Shell.Explorer и возник вопрос:
- а можно через интерфейс выключить не только управление, но и работу ссылок внутри окна ? Т.е. если в открытой HTML странице есть ссылки - то заблокировать их работу ?
Всех или только работающих на вызов новых окон ...
Только не посылайте сразу опять на MSDN - я там уже был ... ;)/quote]

а тут вроде и реализацию интерфейсов делать не надо

через OCXREGISTEREVENTPROC регистришь свой обработчик как в примере (см. CIExplorer.clw)

Код: Выделить всё

EventFunc               FUNCTION(*SHORT Reference,SIGNED OleControl,LONG CurrentEvent)
szUrl      CSTRING(256)
W          &WINDOW
obj        &CIExplorer
        CODE
        
 CASE CurrentEvent 
  OF 250   ! Before navigate 
   RETURN False ! блокируем навигацию по ссылкам
 END
 
 
 RETURN True
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

К сожалению, блокировку ссылок в обработчике сделать пока не удалось - событие все равно присходит. Скорее всего проблема с отсутствием опыта таких работ у меня. Попробую через интерфейс.
Есть другой вопрос - можно ли как нибудь OCX сделать как "поле" по умолчанию ? Сейчас скролинг страницы с клавиатуры возможен только после щелчка мышкой на нем.
Это относится ко всем OCX - например к документу MS Write ...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Есть другой вопрос - можно ли как нибудь OCX сделать как "поле" по умолчанию ? Сейчас скролинг страницы с клавиатуры возможен только после щелчка мышкой на нем.
Это относится ко всем OCX - например к документу MS Write ...
Такое не поможет?
?Ole{prop:doverb}=-4 !DOVERB:UIActivate
или
SetFocus(?Ole{'hWnd'})

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

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

Спасибо !
Порылся в велосипедном форуме и уже попробовал вариант:
?Ole{prop:doverb}=-4 ! DOVERB:UIActivate
работает прекрасно - фокус сразу попадает на OLE объект.

А вот ссылки не хотят блокировться, хоть что-делай ...
Причем ссылки которые открываются в новом окне - есстественно инициализируют новую копию Explorer ... :(
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Причем ссылки которые открываются в новом окне - есстественно инициализируют новую копию Explorer ...
ну чего... Метод Navigate имеет вторым параметром flag
Flags
Optional. A constant or value that specifies whether to add the resource to the history list, whether to read from or write to the cache, and whether to display the resource in a new window. The variable can be a combination of the values defined by the BrowserNavConstants enumeration.
typedef enum BrowserNavConstants {
navOpenInNewWindow = 0x1,
navNoHistory = 0x2,
navNoReadFromCache = 0x4,
navNoWriteToCache = 0x8,
navAllowAutosearch = 0x10,
navBrowserBar = 0x20,
navHyperlink = 0x40
} BrowserNavConstants;
и третий параметр
TargetFrameName
Optional. String expression that evaluates to the name of an HTML frame in URL to display in the browser window. The possible values for this parameter are:

_BLANK
Load the link into a new unnamed window.
_PARENT
Load the link into the immediate parent of the document the link is in.
_SELF
Load the link into the same window the link was clicked in.
_TOP
Load the link into the full body of the current window.
<WINDOW_NAME>
A named HTML frame. If no frame or window exists that matches the specified target name, a new window is opened for the specified link.
короче, в том же окне открывать линк возможность есть.
Не знаю, что там у тебя не получается с BeforeNavigate? Как Андрей писал, приходит в OCXREGISTEREVENTPROC это событие?
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

Ха ! С помощью интерфейсов получилось сделать только обратную задачу - заставить все ссылки открываться в новых окнах, блокировка ссылок не получилась. Наверно, я просто не умею их готовить ... ;)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Та же фигня с блокировкой ссылок и у меня - такое впечатление, что BeforeNavigate2 параметр Cancel просто игнорирует. Хотя у меня ссылки открываются в одном и том же окне (точнее, внутри ole-контрола clarion-окна).
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

У меня ссылки тоже открываются внутри OLE контрола, я имел ввиду, что если задаться целью - то можно заставить открываться все ссылки в новом окне. А вот заблокировать работу ссылкок - не получилось.
Точнее сделать это можно бытовым способом - заблокировав клик левой педалью мыши на контроле или окне с контролом ... ;)) Шутка.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

О, вот попалось
// FB:
// Поддержка отлова евента WebBrowser::BeforeNavigate
// Изветстно, что DWebBrowserEvents2_BeforeNavigate2 никогда не
// доходит до подписчика. Некоторые считают это багом IE.
// Поэтому мы в ручную сами подписываемся на WebBrowser::BeforeNavigate
// (без двоек).
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Вопрос по примеру Shell.Explorer

Сообщение Yufil »

Игорь Столяров писал(а):Добрый день !

Наверно, вопрос к автору (Andrew Myalin): По Вашему совету разбираюсь с работой Shell.Explorer и возник вопрос:
- а можно через интерфейс выключить не только управление, но и работу ссылок внутри окна ? Т.е. если в открытой HTML странице есть ссылки - то заблокировать их работу ?
Всех или только работающих на вызов новых окон ...
Только не посылайте сразу опять на MSDN - я там уже был ... ;)
Попробуй просто повесить обработчик на событие onclick
Ответить