On-line: Andrey, Pasha, гостей 1. Всего: 3 [подробнее..]
АвторСообщение





Пост N: 156
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 08.04.19 11:55. Заголовок: ActiveX


Начал новую тему, т.к. подозреваю, что вопрос мой не Харбора касается.
В папке \samples\Advanced\ActiveX лежит демо, этакий браузер, работающий через ActiveX.
Всё с ним хорошо, кроме одного: если я беру и его функцию MAIN делаю CHILD, после чего вешаю это на кнопку другой процедуры, то вызывается это окно только один раз. Стоит его закрыть и вызвать снова, окно открывается, после чего происходит какая-то виндовая проблема и всё это валится.
Кто-нибудь понимает почему и как это исправить?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 21 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 2321
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 08:40. Заголовок: На MODAL аналогично ..


На MODAL аналогично поведение.
Запуск нескольких экземпляров с правкой
 
ON INIT TestNavigate() ;
ON RELEASE Win1.Test.Release
/*
DEFINE MAIN MENU

POPUP "Test"
MENUITEM "Navigate" ACTION TestNavigate()
END POPUP

END MENU
*/

работают

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 157
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 10:35. Заголовок: Долго пытался понять..


Долго пытался понять, так как у меня такого нет. Потом предположил, что вы смотрели пример в
SAMPLES\BASIC\ActiveX\

А в \samples\Advanced\ActiveX как-то не так...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2323
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 11:27. Заголовок: rvu пишет А в \s..


rvu пишет
 цитата:
А в \samples\Advanced\ActiveX как-то не так...


Запуск нескольких экземпляров demo.exe работают. Вам надо иметь параметром home адрес, к примеру так
 
STATIC PROCEDURE fOpenActivex( cAddr )
...
DEFAULT cAddr := "www.google.com"
...
oActiveX:Silent := 1
oActiveX:Navigate( cAddr )

RETURN
...
FUNCTION Main( Addr )
...
ON INIT fOpenActivex(Addr) ;
ON RELEASE fCloseActivex() ;
...


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 158
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 13:37. Заголовок: Ничего не получается..


Ничего не получается у меня. Да и было прописано у меня это, хотя немного и не так.
А можете отправить мне свой рабочий пример полностью? Я в личку написал свою почту.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 159
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 13:45. Заголовок: А может мы опять о р..


А может мы опять о разном? У меня проблема, что когда я делаю эту функцию не Main и вызываю её из другой, то окно открывается. Но после закрытия этого окна, второй раз вызвать его из моей процедуры Main не удается.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2324
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 14:45. Заголовок: rvu пишет Но после з..


rvu пишет
 цитата:
Но после закрытия этого окна, второй раз вызвать его из моей процедуры Main не удается.


Говорим об одном и том же. Валится ACCES VIOLATION ... любимое сняти в VO при обращении к памяти, которую обработал мусоросборщик, а ссылки остались.
Решение, на сейчас, оформление проги ActiveX в утилиту или запуск той же проги с параметрами, только для запуска ветки с ActiveX.
Почтой не пользуюсь. Пример тут https://TransFiles.ru/d974x
Запускаем Main.exe и дальше кнопки

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 160
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 15:13. Заголовок: Понятно. Вы вызывает..


Понятно. Вы вызываете его отдельным .exe файлом. Так я тоже делал. Но, во-первых, тоже были некоторые проблемы, во-вторых, хотелось всё держать в одном файле.
Тут и возникала глобальная проблема, когда я всё в один файл пытался запихнуть. Я и писал об этом: "беру и его функцию MAIN делаю CHILD..."

А из проблем вызова отдельным .exe файлом: можно закрывать все эти окна вместе с вызывающим окном? Хотелось бы - закрыл главное окно и всё закрылось.
Еще один вопрос был, но ответ увидел в вашем примере, большое спасибо, что выложили!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2325
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 15:26. Заголовок: rvu пишет хотелось ..


rvu пишет
 цитата:
хотелось всё держать в одном файле


Так и держите, имейте параметры запуска
My.exe -ie "adres"
FUNC Main( p1, p2, ... )
If empty(p1)
ElseIf p1 $ '-ie /ie"
Addr := p2
// ActiveX тут
...

 цитата:
Хотелось бы - закрыл главное окно и всё закрылось


В куске ActiveX (Demo.prg) ставите TIMER, к примеру, для ловли файла завершения
Как поймали убираете окно работы через Release

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2326
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 15:28. Заголовок: PS Главная прога, со..


PS
Главная прога, создает файл завершения, когда его закрывают, для окна работы ActiveX

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6233
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.04.19 15:48. Заголовок: rvu пишет: Хотелось..


rvu пишет:

 цитата:
Хотелось бы - закрыл главное окно и всё закрылось.


Смотреть пример C:\MiniGUI\SAMPLES\Advanced\RunTasks

1) Можно запросить хендл открытых окон.
2) Закрываем весь этот список.
Примерно так:
   // закрыть по ХЕНДЛУ открытые задачи на хХарборе/МиниГуи 
IF LEN(aDim) > 0
FOR nI := 1 TO Len( aDim )
hWndTask := aDim[nI]
PostMessage( hWndTask, WM_CLOSE, 0, 0)
DO EVENTS
NEXT
ENDIF

Смотреть примеры C:\MiniGUI\SAMPLES\Advanced\ExternalApp_3\demo2.prg

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 161
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 15:51. Заголовок: SergKis пишет: для ..


SergKis пишет:

 цитата:
для ловли файла завершения



Я писал, что тоже пошел по пути разделения файлов и передавал между ними информацию, записывая ее на диск. А вчера мне сказали сделать с ней CD-диск. На него я, естественно, ничего записать при работе не могу. Информацию при вызове браузера могу ему передать в параметрах. А вот закрытие... Разве что писать в %TEMP% компьютера? Кстати, как в Харборе ее посмотреть?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6234
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.04.19 15:59. Заголовок: Кстати, как в Харбор..



 цитата:
Кстати, как в Харборе ее посмотреть?



Смотри пример - https://cloud.mail.ru/public/4JFZ/35VkjhxvD

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2327
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 16:05. Заголовок: rvu Можно сделать к..


rvu
Можно сделать как Андрей показал.
Еще есть пример исп. сообщения WM_COPYDATA (можно передавать команды\данные с ее помощю), т.е. осн. программа при закрытии посылает это сообщение окну ActiveX, которое, поймав его, выполняет Release (BASIC\IPC\...)

 цитата:
как в Харборе ее посмотреть?


i_app.ch
...
#translate System.DesktopFolder => GetDesktopFolder()
#translate System.MyDocumentsFolder => GetMyDocumentsFolder()
#translate System.ProgramFilesFolder => GetProgramFilesFolder()
#translate System.SystemFolder => GetSystemFolder()
#translate System.TempFolder => GetTempFolder()
#translate System.UserTempFolder => GetUserTempFolder()
#translate System.WindowsFolder => GetWindowsFolder()
...

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 162
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 19:29. Заголовок: А параметр передаетс..


А параметр передается только один?

EXECUTE FILE cRun PARAMETERS cAddr

Какое ограничение по длине текста?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2328
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 21:02. Заголовок: rvu пишет Какое огра..


rvu пишет
 цитата:
Какое ограничение по длине текста?


Это ф-я ShellExecute, т.е. ограничения, наверно, как на строку. Сделайте так, к примеру,
 
Main.prg
*----------------------------------------------------------------------------*
FUNC RunIE()
*----------------------------------------------------------------------------*
LOCAL cAddr := '"'+This.Cargo+'"'
LOCAL cRun := '.\Demo.exe'

cAddr := This.Cargo+';'+'www.google.com'+';'+'http://hmgextended.com'

If ! empty(cAddr)
EXECUTE FILE cRun PARAMETERS cAddr
EndIf

RETURN Nil

Demo.prg
FUNCTION Main( Addr )
LOCAL a

_logfile(.T., Addr)

If ! empty(Addr)
a := hb_ATokens(Addr, ';')
Addr := a[1]
EndIf
_logfile(.T., Addr, a)
...
Если вместо ; использовать " ", то на входе будет много параметров, т.е.
FUNCTION Main( ... )
LOCAL a := hb_AParams()
LOCAL n := Len( a )
LOCAL Addr

If n > 0
Addr := a[ n ]
EndIf
....


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2329
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.19 21:04. Заголовок: PS надо If n ..


PS
 
надо
If n > 0
Addr := a[ 1 ]
EndIf


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 163
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 09.04.19 21:11. Заголовок: Это я уже сделал, сп..


Это я уже сделал, спасибо!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 164
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 10.04.19 15:02. Заголовок: Andrey пишет: Смотр..


Andrey пишет:

 цитата:
Смотреть примеры C:\MiniGUI\SAMPLES\Advanced\ExternalApp_3\demo2.prg



Очень понравилось! То что нужно!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 361
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.08.21 14:15. Заголовок: rvu пишет: В папке ..


rvu пишет:

 цитата:
В папке \samples\Advanced\ActiveX лежит демо, этакий браузер, работающий через ActiveX.



Опять я о нем. На основе него есть программа, где такая печать:

IF ValType( oWActiveX ) <> "U"
IF lPreview
oActiveX:ExecWB( OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT )
ELSE
oActiveX:ExecWB( OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT )
ENDIF
ENDIF

Хочу заменить url и напечатать.

Меняю:

oActiveX:Navigate( "proba.html" )

В браузере он открывается, но печатается не он, а который был до него. Вот в следующий раз напечатается нужный, открытый.

В исходном образце все работает нормально. Я долго пытался понять, что нужно еще вписывать, но так и не понял.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 223
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 13.04.22 13:02. Заголовок: SergKis пишет: Гово..


SergKis пишет:

 цитата:
Говорим об одном и том же. Валится ACCES VIOLATION ...


Похоже на то, что нашел решение:
Если ActiveX формируется не в Main окне, то в методе Load() CLASS TActiveX со второго вызова
не создается окно ::hWnd := CreateWindowEx( nHandle, ::cProgId )
(CreateWindowEx с ошибкой 1407, т.к. до этого не отрабатывает _Ax_Init ).
Если в классе TActiveX немного изменить функцию ATLAXWINEND на такой вид:
HB_FUNC( ATLAXWINEND )
{
if( hAtl )
{ FreeLibrary( hAtl ); hAtl = NULL; }
}
то все начинает работать!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 21 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 548
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет