:: Visual Foxpro, Foxpro for DOS
Запуск формы из HTML
shumik73
Автор

Сообщений: 515
Откуда: Алматы
Дата регистрации: 10.05.2006
Добрый день Fox-сообщество
Помогите разобраться с маленькой проблемой

Создаю заставку приветсвия
Наформу накидал Explorer и загрузил HTML-код
При клике на ссылку - перехватываю управление в BeforeNavigate2 и запускаю процедуру создание моей формы
Да вот проблема форма создаётся и уходит на второй план.
Модальные формы мне не нужны, ну и переключаться не стоит

[attachment 10943 www.JPG]

DEFINE CLASS htmls AS form
Top = 76
Left = 243
Height = 456
Width = 784
DoCreate = .T.
Caption = "Form1"
Name = "Form1"
ADD OBJECT olecontrol1 AS olecontrol WITH ;
Top = 12, ;
Left = 12, ;
Height = 300, ;
Width = 756, ;
TabIndex = 8, ;
Anchor = 15, ;
Name = "Olecontrol1"
PROCEDURE doform
_Screen.AddProperty("s",CreateObject("Form"))
_Screen.s.Show()
ENDPROC
PROCEDURE Init
TEXT TO lcSQL TEXTMERGE NOSHOW
<CENTER>
<TABLE border=0 cellSpacing=10 cellPadding=10>
<TR height=150>
<TD width=150 align=center> <a href="vfps://Thisform.DoForm()">
<img src="C:\LUZIA\picture/logo/w11.jpg" border=0 height=150 width=150><BR>Школа</a>
</TD>
<TD width=150 align=center> <a href="files://mspaint.exe">
<img src="C:\LUZIA\picture/logo/w12.jpg" border=0 height=150 width=150><BR>Дом</a>
</TD>
<TD width=150 align=center> <a href="vfps://wait window 1111">
<img src="C:\LUZIA\picture/logo/w13.jpg" border=0 height=150 width=150><BR>Квартира</a>
</TD>
</TR>
</TABLE>
</CENTER>
ENDTEXT
ACTIVATE SCREEN
DO WHILE NOT VARTYPE(THISFORM.olecontrol1.OBJECT.Document) = "O"
ENDDO
WITH THISFORM.olecontrol1.OBJECT.Document
.Open()
.Write(lcSQL)
.Close()
ENDWITH
ENDPROC
PROCEDURE olecontrol1.Refresh
*** ActiveX Control Method ***
NODEFAULT
ENDPROC
PROCEDURE olecontrol1.BeforeNavigate2
*** ActiveX Control Event ***
LPARAMETERS pdisp, url, flags, targetframename, postdata, headers, cancel
IF url = "vfps://"
Cancel = .T.
url = SUBSTR(url,8)
url = STRTRAN(url,[%20],[ ])
IF RIGHT(url,1)=[/]
url=LEFT(url,LEN(url)-1)
ENDIF
&url
ENDIF
IF url="files://"
Cancel = .T.
url = SUBSTR(url,9)
url = STRTRAN(url,[%20],[ ])
IF RIGHT(url,1)=[/]
url=LEFT(url,LEN(url)-1)
ENDIF
DECLARE INTEGER ShellExecute ;
IN SHELL32.DLL ;
INTEGER nWinHandle,;
STRING cOperation,;
STRING cFileName,;
STRING cParameters,;
STRING cDirectory,;
INTEGER nShowWindow
ShellExecute(0,"Open",URL,"","",1)
ENDIF
ENDPROC
PROCEDURE olecontrol1.Init
THIS.Navigate("about:blank")
ENDPROC
ENDDEFINE
[h][/h]


Исправлено 1 раз(а). Последнее : shumik73, 26.10.10 11:09
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
С ОЛЕ контролами удобнее работать немного по другому - прописывать код не в методах самого объекта, а делать это методом формы.
Для вызова же кода использовать такой прием:

На форму кладется таймер с небольшой задержкой, например 100 мс и Enabled = .f..
В методе оле (например, beforeNavigate) выполняется только включение таймера (ну и сохранение параметров в свойства формы, например.
А таймер при срабатывании уже вызывает метод, который и делает, что надо, например вызывает форму.
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
DO WHILE NOT VARTYPE(THISFORM.olecontrol1.OBJECT.Document) = "O"
ENDDO
вы это, парни, завязывайте с тяжелым прошлым
я канешно понимаю опыт еще с доса тянется, но не до такой жеш степени


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
DO EVENTS нада, а так с Кантом согласен, видимо Женька ничего кроме своих постов на форуме не видит, а жаль


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
shumik73
Автор

Сообщений: 515
Откуда: Алматы
Дата регистрации: 10.05.2006
Во блин гуру тут накинулись...рычат прям...

Может у меня времени все посты читать и нету, вот солюшин я нет нет от времени перебираю
Так что открывайте примерчик - в разделе "New in Visual Foxpro 9.0" есть пример "Binding to Windows Message Events"
точнее "c:\program files\microsoft visual foxpro 9\samples\solution\europa\windowsevents.scx"
и на форме в методе Refresh черным по белому

ACTIVATE SCREEN
DO WHILE NOT VARTYPE(THIS.olecontrol1.OBJECT.Document) = "O"
ENDDO
WITH THIS.olecontrol1.OBJECT.Document
.Open()
.Write(ALLTRIM(Desc))
.Close()
ENDWITH

Так что если считаете что "New ..9.0" - это "тяжелое досовское прошлое"
- то тогда вопрос не ко мне...

Мне собственно код работает - поехали дальше!

А уж если этот солюшин не устраивает - может наш "SOLUTION RUSSIAN 2010" забабахаите
Да так чтобы скачать одним махом все примерчики
Как раз многочисленные посты пригодятся?


А гуру слабо будет?




Исправлено 1 раз(а). Последнее : shumik73, 27.10.10 08:13
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
shumik73
Во блин гуру тут накинулись...рычат прям...

А уж если этот солюшин не устраивает - может наш "SOLUTION RUSSIAN 2010" забабахаите
Да так чтобы скачать одним махом все примерчики
Как раз многочисленные посты пригодятся?

А гуру слабо будет?

Да уж сколько раз предлагал и домен есть www.foxhelp.ru - давайте сделаем!


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu




Исправлено 1 раз(а). Последнее : JS, 27.10.10 09:24
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
тады как вариант добавить в процедуру doform команду activate
и раз уж пошла полемика по примерам от билли, то туды и пишите письма-пожелания, глядишь ответит к 15-ому году


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
У меня работает
Public o
o=CreateObject("form1")
o.show()
Define Class Form1 as Form
Add Object Timer as Timer with Interval=0
Add Object ie as OleControl with OleClass="Shell.Explorer.2", width=300, height=200
Procedure ie.init
With this
.navigate("About:blank")
EndWith
Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With this
If url="my://form"
Text to thisform.timer.tag noshow
Public oForm
oForm=CreateObject("Form2")
oForm.Show()
EndText
thisform.timer.interval=10
cancel=.t.
EndIf
EndWith
procedure Init
With this
.resize
.ie.document.writeln("<br><a href='my://form'>formn</a>")
EndWith
Procedure Resize
With this
.ie.Width=.Width
.ie.height=.Height
EndWith
Procedure Timer.Timer
With this
If not Empty(.Tag)
ExecScript(.Tag)
.Tag=""
.Interval=0
EndIf
EndWith
EndDefine
Define Class form2 as Form
Caption="Form XXX"
EndDefine


------------------
Часто бывает так, что есть над чем задуматься, а нечем.




Исправлено 1 раз(а). Последнее : piva, 27.10.10 16:22
Ratings: 0 negative/0 positive
Re: Запуск формы из HTML
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Тут и решение без таймера, и забавный вызов объектов без макро, просто стало интересно.
Занятно получилось

Так как getPem за выполняет методы пришлось сделать через свойства, вот еще когда нужно использовать свойства вместо методов


Public o
o=CreateObject("form1")
o.show()
Define Class Form1 as Form
url=""
Add object Script as Script
Add Object ie as OleControl with OleClass="Shell.Explorer.2", width=300, height=200
Procedure ie.init
With this
.navigate("About:blank")
EndWith
Procedure ie.beforenavigate2(pdisp, url, flags, targetframename, postdata, headers, cancel)
With thisform
cancel=.t.
.url=url
EndWith
Procedure ie.CommandStateChange(Command, enable)
With thisform
If command=-1
lcForm=GetWordNum(.url,2,"//")
.url=""
If PemStatus(.Script,lcForm,5)
GetPem(.Script,lcForm)
EndIf
EndIf
EndWith
procedure Init
With this
.resize
.ie.document.writeln("<br><a href='my://form1'>form 1</a><br>")
.ie.document.writeln("<br><a href='my://form2'>form 2</a><br>")
.ie.document.writeln("<br><a href='my://form3'>form 3</a><br>")
EndWith
Procedure Resize
With this
.ie.Width=.Width
.ie.height=.Height
EndWith
EndDefine
Define Class Script as Custom
form1=.null.
form2=.null.
form3=.null.
Add object Forms as Collection
Procedure Form1_Access
this.Formx("Form1","new form 1")
Procedure Form2_Access
this.Formx("Form2","new form 2")
Procedure Form3_Access
this.Formx("Form3","new form 3")
Hidden Procedure Formx(lcKey,lcCaption)
With this
loForm=.null.
If .Forms.getkey(lcKey) > 0
loForm=.Forms.Item(lckey)
EndIf
If Vartype(loForm)="O"
loForm.Show()
Else
loForm=CreateObject("formx",lcCaption)
.Forms.Add(loForm,lckey)
EndIf
EndWith
EndDefine
Define Class Formx as Form
Procedure Init (lcCaption)
With this
.Caption=lcCaption
.Show()
EndWith
EndDefine


------------------
Часто бывает так, что есть над чем задуматься, а нечем.




Исправлено 1 раз(а). Последнее : piva, 28.10.10 13:47
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 (Гостей: 28)

© 2000-2024 Fox Club 
Яндекс.Метрика