webbrowser-open-office-document-in-visual-basic
البته مطلب زیر تکرار مکررات است
The WebBrowser control has several properties, methods, and events that you can use to implement controls found in Internet Explorer. For example, you can use the Navigate method to implement an address bar, and the GoBack , GoForward , Stop , and Refresh methods to implement navigation buttons on a toolbar
Obj.ContextMenu = TRUE 'Boolean Type
در لینک زیر رویداد های یک اکتیو ایکس کنترل Webbrowser نشان داده
vba/api/access.webbrowsercontrol
برای نمایش یک سایت در کنترل webbrowser که در اینجا نام کنترل WebBrowser0 است :
Me.WebBrowser0.Navigate "www.Blogsky.com"
فقط صفحات Html در این Browser قابل مشاهده هستند پس در این کنترل نمی توانید فایل Pdf یا Word باز کنید.
برای Disable کردن اجرای عملیات در webbrowser یا باصطلاح خودمون عدم نمایش ، رویداد BeforeNavigate2 را مطالعه نمائید در تابع آرگومان آخر از نوع Boolean تعریف شده که می توانید آنرا False کنید.
برای استفاده از کلاس ماژول هایی که Microsoft HTML DOCUMENT دارد در Refrence محیط VBE آنرا تیک بزنید همانطور که گفته شد WithEvents متغیری را تعریف می کند که می توانید به رویدادها دسترسی پیدا کنید البته آن متغیر تعریف شده را باید در تابع WebBrowser0_DocumentComplete به پراپرتی Document این کنترل تنظیم کنید.
Private WithEvents HDoc As HTMLDocument
در DocumentComplete که دو آرگومان دارد اولی بعنوان آبجکت و دومی url از نوع Variant بنویسید
Set HDoc=WebBrowser0.Document
از نحوه نوشتاری رویه هایی که در HTMLDocunent وجود دارد اطلاعی ندارم و تنها چیزی که پیدا شد رویداد OnClick است
Private Function Hdoc_OnClick() As Boolean
Msgbox " Clicked Me !!!)
End Function
در رویه بالا اگر شما Boolean را بکار نبرید خطا دریافت خواهید کرد. و حتما باید آنرا بکاربرد
غیر فعال کردن Scroll :
Me.WebBrowser0.Document.Body.Scroll="No"
Event : NavigationStateChanged
دو تا آرگومان دارد و مقدار Boolean دارند یکی CanGoBack و دیگری CanGorward
powerscript_reference/mouseMove_event
WithEvents
Specifies that one or more declared member variables refer to an instance of a class that can raise events.
برای استفاده از عناصر مربوطه در Refrence تیک Microsoft Html library را حتما تیک بزنید البته بدون تیک هم می توان کارهایی انجام داد که مجبور به تیک این آپشن نباشیم البته اگر فایل مربوطه در system32 نباشد دیگر هیچ کاری نمی توان انجام داد.
Public WithEvents ObjHtmlDoc As HTMLDocument
Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
Set objHtmlDoc = WebBrowser1.Document
End Sub
OnMouseMove Event :
زمانیکه ماوس را روی کنترل webbrowser می گیرید مختصات x و y را برمی گرداند
First Tick "Microsoft HTML Object Library" Form VBA Refrences
Important :in Upper Sub Procedures Declared Private WithEvents Doc Ass HTMLDocument ( To use Event )
Important : Set Variable Doc In Sub WebBrowser_DocumentComplete(Byval pDisp as Object,url As Varaint)
Doc_OnMouseMove
Me.text3=Me.Text3 = "X : " & dc.parentWindow.event.clientX & _
"Y : " & dc.parentWindow.event.clientX
OnMouseUp Event
برای Scroll کردن در اکتیو ایکس WebBrowser به سمت پائین و انتهای body روش زیر پیشنهاد شده
To scroll to a specific location, you can use WebBrowser.Document.Window.ScrollTo(x,y)
method. For example to scroll down to the end of body:
private void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.Document.Window.ScrollTo(0, webBrowser1.Document.Window.Size.Height);
}
WebBrowser Events
DocumentComlete Event :
زمانی فعال می شود که یک سند به طول کامل بارگیری و مقدار دهی اولیه شود ( "Object.Navigate="url )
نوشتاری :
Private Sub WebBrowser0_DocumentComplete(ByVal iDisp As Object ,url As Variant)
Zoom Method : زوم کردن
طبق عبارت زیر می توانید صفحه را با درصد انتخابی Zoom in یا Zoom Out کنید.
Me.WebBrowser0.Document.body.Style.zoom = "220%"
Scroll Height : ارتفاع اسکرول در صفحه
برای بدست آوردن ارتفاع اسکرول طبق زیر عمل کنید
To Get Scroll Height Of Body ( Object Must Be Set )
Dim HtmlBody As HtmlBody
Set HtmlBody = Me.WebBrowser0.Document.body
MsgBox HtmlBody.scrollHeight
Click Button : کلیک روی باتن
کلیک روی باتن طبق تصویر زیر و باز شدن منو با کلیک اول منو بازشد و کلیک دوم به حالت قبل برگشت.
HTMLElement . متد Click یک کلیک ماوس روی عنصری را شبیه سازی می کند عنگامی که Click با عناصر پشتیبانی شده مانند <input> استفاده می شود ، رویداد کلیک عنصر را فعال می کند . این رویداد سپس به عناصر بالاتر در شاخه سند ( یا زنجیره رویداد ) تبدیل می شود و رویداد کلیک آنها را فعال می نماید.
در تصویر Gif زیر کامند سمت چپ داکیومنت را در کنترل راهبری می کند و کامند سمت راست منو رو باز میکند البته در حالتی که کنترل وب براوزر را بازتر کنیم آن حالت راهبری بصورت Toggle از بین می رود و در form-header سه دکمه مثل "ورود به سیستم" نمایان می شود وعملا این کد خاصیتی ندارد. برای کلیک کردن روی سه باتن loging یا Signup می توانید ....... لوپ زدن در element ها و چک کردن id یا href یا هر چیز دیگری و Ele.Click
شامل header و content و footer است.
.Document.GetElementsByTagName("Button")(0)
.innerText="Toggle Navigation"
getElementsByName و getElementsByClassName یک آرایه را باز می گردانند بنابراین باید ایندکس آیتم آرایه در براکت ها مشخص شود.
مطلب زیر هم جالبه برای انتخاب تمام کلاس ها با getElementsByClassName و Click
' Input the userid and password ie.Document.getElementById("uid").Value = "testID" ie.Document.getElementById("password").Value = "testPW"
' Click the "Search" button ie.Document.getElementById("enter").Click
Link
Set HTMLdoc = appIE.HTMLDocument
Set link = Nothingi = 0While i < HTMLdoc.Links.Length And link Is NothingIf HTMLdoc.Links(i).innerText = "Favorites" Then Set link = HTMLdoc.Links(i)i = i + 1WendIf Not link Is Nothing Thenlink.Focuslink.ClickEnd If
برای کلیک کردن ، حتما متغیر که اینجا myLinks است باید تنظیم شود
Dim myLinks As Object
Set myLinks = Document.getElementsByTagName("a")
Add List the Link to ListBox
Private Sub Form_Load()
WebBrowser1.Navigate "www.vbforums.com"
End Sub
Dim HTMLdoc As HTMLDocument
Dim HTMLlinks As HTMLAnchorElement
Dim STRtxt As String
' List the links.
On Error Resume Next
Set HTMLdoc =WebBrowser1.Document
For Each HTMLlinks In HTMLdoc.links
List1.AddItem HTMLlinks.href
STRtxt = STRtxt & HTMLlinks.href & vbCrLf
Next HTMLlinks
'Append means add data to end
Open "C:\Documents and Settings\joe\Desktop\linklog.txt" For Append As #1
Print #1, STRtxt
Close #1
End Sub
CommandStateChange Event :
زمانی ر خ می دهد که حالت فعال یک فرمان یا Command تغییر نماید
Cmmand : | ||
CSC_NAVIGATEFORWARD ( Value : 1) The enabled state of the Forward button has changed. CSC_NAVIGATEBACK ( Value : 3 ) If Command = 2 Then Me.Command5.Enabled = Enable How To Hide Or Show WebBrowser Control Me.WebBrowser0.Visible = False | The enabled statebutton has http:// changed. |
باتنی می توان در فرم تعبیه کرد و از GoBack برای برگشتن به عقب استفاده کرد البته باتن Back د ر کیبورد همین کار را انجام میدهد
On Error Resume Next
Me.WebBrowser0.GoBack
وقتی صفحه وب کاملا Load شد اگر از Goback استفاده کنید ( در رویه یک باتن بنویسید ) با خطا مواجه می شوید چون صفحه قبلی وجود ندارد که شما را به آن بازگرداند ولی اگر از دکمه کیبورد ( Back ) استفاده کنید خطا دریافت نمی کنید ... کد اول بخاطر همین نوشته شد.
بجای استفاده از DONTPROMPTUSER می توانید از PROMPTUSER بهره ببرید برای اینکه به کاربر اعلام نماید و Dialog Box را نمایش دهد. از Shell هم می توان استفاده کرد .
Shell "rundll32.exe C:\WINDOWS\SYSTEM\MSHTML.DLL,PrintHTML " & _ "http://www.developerfusion.com" , vbMinimizedFocus
با SendKeys هم می توان کنترل + P را فرستاد راه های رسیدن به پرینت صفحه.
To Fill Edit Box :
WebBrowser1.document.all("username").Value = "Name"
WebBrowser1.document.all("password").Value = "passwort"
WebBrowser1.document.all("Submit").Click
OnMouseDown()
Private Declare Ptrsafe Function GetAsyncKeyState Lib "user32" (ByVal VKey As Long) As Integer
For Key = 1 To 5 '255
If GetAsyncKeyState(Key) Then 'WebBrowser1_MouseDown VKey
Exit For
End If
Next
If Key = 2 Then
Me.Label1 ="Right MouseDown"
End If
استفاده از تابع ویندوری ShellExecute برای اجرای فایل
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
'Declare arguments
(ByVal hWnd As Long, ByVal lpszOp As String, _
ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal LpszDir As String, ByVal FsShowCmd As Long) _
As Long
'Used to display a window
Const SW_SHOWNORMAL = 1
'Open pdf occurs on button click
Private Sub cmdPDF_Click()
Dim strPath, strParam As String
strPath = "C:\Example.pdf"
strParam = " /A " & Chr(34) & "page=14" & Chr(34) & strPath
Call ShellExecute(0&, "open", "AcroRd32.exe", strParam, "", SW_SHOWNORMAL)
End Sub
Remove Open\Save Dialog
------------------------------------------------------
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\AcroPDF.FDF.1]
[HKEY_CLASSES_ROOT\AcroPDF.PDF.1]
"EditFlags"=hex:00,00,01,00
------------------------------------------------------
Add Open\Save Dialog
------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\AcroPDF.FDF.1]
"EditFlags"=hex:00,00,00,00
[HKEY_CLASSES_ROOT\AcroPDF.PDF.1]
"EditFlags"=hex:00,00,00,00
لطفا بعد از مطالعه و استفاده فاتحه ای برای پدر مرحومم قرائت فرمائید .... دوستان عزیز لطفا در نظر سنجی شرکت کنید در ضمن مطالب زیر ربطی به اکسس ندارد و فقط برای مطالعه است
صرفا جهت مطالعه ، مطالب زیر ربطی به کنترل بالا ندارد . موارد جدید مربوط به webbrowser اگر یافت شد به بالا اضافه خواهد شد.
WM_NCHITTEST=132
WM_SETCURSOR=32
WM_MOUSEMOVE=512
پیام ویندوزی ارسال به پنجره
WM_MOUSEMOVE :
Private Type POINTAPI
x As Long
y As Long
End Type
'Constants
Public Sub SetMouseHook()
If Not IsHooked Then
OldWndProc = SetWindowsHookEx(WH_MOUSE, AddressOf MouseProc, 0, GetCureantThreadID)
IsHooked = True
End If
End Sub
Public Sub RemoveMouseHook()
UnhookWindowsHookEx OldWndProc
IsHooked = False
End Sub
SubClass Window
Public Declare PtrSafe Function SetWindowLongPtrA Lib "user32" (ByVal Hwnd As LongPtr, _
ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Public Declare PtrSafe Function CallWindowProcA Lib "user32.dll (ByVal lpPrevWndFunc As LongPtr, _
ByVal Hwnd As LongPtr, ByVal Msg As Long, _
ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
Public OldWndProc As LongPtr
Public IsHooked As Boolean
Public cCount As LongLong