delphi & javascript kardeşliği | delphi programming · 2010. 7. 1. · delphi programming...
TRANSCRIPT
D e l p h i P r o g r a m m i n gThere are only 10 types of people in the world Those who understand binary and thosewho donrsquot
Search Keywords
HomeTObjectCreate
Hakkında Ziyaretccedili Defteri
Delphi Posted by Tuğrul HELVACI - Haziran 1 2009 Comments 2
Delphi amp JavaScript Kardeşliği
Son zamanlarda bir raporlama aracının Delphirsquoye adaptasyonu ile uğraşıyorum Bu aracın adıFusion Charts Son derece şık ve yetenekli bir araccedil Arka planında Flash animasyonlarıkullanan kendisine veriyi XML uumlzerinden alabilen HTML amp JavaScript kullanarak flashnesnelerinin erişimine muumlsaade eden bir raporlama aracı Bu hali ile Fusion Charts aracıDelphi uumlzerinde TWebBrowser nesnesi vasıtası ile rahatlıkla kullanılabiliyor Yeterkiuygulamanızın ccedilalıştığı klasoumlrde ihtiyaccedil duyduğu dosyalar olsun Benim ileride yazacağımFusion Charts amp Delphi entegrasyonunda XML HTML ve JavaScript dosyalarına gerekolmayacak Ama bu raporlama aracı uumlzerinde ccedilalışırken JavaScriptrsquoe amiyane tabir ile birazbulaşmak durumunda kaldım
Meraklı bir mizacım olduğu iccedilin Delphi uumlzerinde TWebBrowser nesnesi vasıtası ile birJavaScript sınıfını yada metodunu kullanıp kullanamayacağımı araştırdım Ve goumlrduumlm ki bizim
sevgili Delphirsquomizin yapamayacağı şey yok Delphi uumlzerinden TWebBrowser nesnesivasıtası ile(daha doğru bir ifade ile COM vasıtası ile) JavaScriptrsquoe ulaşmak ve JavaScript kodlarıccedilalıştırmak muumlmkuumln Oumlncelikle soumlylemek isterim ki JavaScript konusunda pek bilgili
Plugin WP FlashTime by horoscop 2009orgrequires Flash Player 8 or better currency
converter calculatorPlugin creat de horoscop |horoscop saptamanal | horoscop zilic | horoscop
| play sonic games
Etiketler
Absolute Abstract Classes ActionScript Algoritma
API Bug Byte Arrays Class Reference CloseHandle
COM CreateDesktop CreateEvent CreateMutexCreateProcess CreateRemoteThread CreateSemaphoreCreateToolHelp32SnapShot CreateWaitableTimerDeleteCriticalSection delphi 2010 DTS EnterCriticalSection
Contact Me | Subscribe
PDFmyURLcom
sayılmam Dolayısı ile yazacağım oumlrnekler sizlere basit gelirse yahut bazı hatalarım olursaşimdiden affınıza sığınırım
Herşeyden evvel TWebBrowser nesnesi kendisine yuumlkleyeceği bir HTML dosya alır Bu dosyadisk uumlzerinde yada internet uumlzerinde bir yerdedir ve TWebBrowserrsquoın Navigate metodunaparametre olarak aktarılır Navigate metodu kendisine verilen HTML dosyayı yada linkingoumlsterdiği verileri parse eder ve TWebBrowser uumlzerinde goumlsterir Buraya kadar herşey normalLacirckin ben yapım gereği disk uumlzerinde bulunan dosyalar ile ccedilalışmayı pek sevmem Budosyaların bozulabilme ihtimalleri yada silinebilme ihtimallerinin olması programınızın doğruccedilalışmasını engelleyeceği iccedilin dosya erişimli youmlntemlerden muumlmkuumln mertebe uzak kalmanızıtavsiye ederim Bu bağlamda yaptığım araştırma sonucu pek ccedilok kaynakta HTML kaynakkodlarının herhangi bir dosyaya ihtiyaccedil duymadan TWebBrowser nesnesinde goumlsterilebildiğinioumlğrendim Bulduğum metod aşağıdaki gibidir
MSDN yardım doumlkuumlmanlarından yada Microsoftrsquoun online MSDN kaynaklarındanTWebBrowser sınıfının oumlzelliklerini inceleyecek olursanız pek ccedilok interfacersquoi implementeettiğini goumlzlemlersiniz Bu interfacersquolerden bir tanesi de IPersistStreamInitlsquodirIPersistStreamInit interfacersquoi TWebBrowser tarafından implemente edildiğine goumlre buinterfacersquoin iccedilinde mevcut bulunan IsDirtyLoadSaveGetSizeMax ve InitNew metodlarının da
EnumDesktopProc EnumDesktops Flash FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoGetThreadContext GetTickCount GetTickCount64Hacking Inheritance InitializeCriticalSectionInterface InterlockedCompareExchangeInterlockedDecrement InterlockedExchangeInterlockedExchangeAdd InterlockedIncrementJavaScript LeaveCriticalSection Method PointerModule32First Module32Next MSSQL OpenDesktopOpenEvent OpenMutex OpenSemaphoreOpenWaitableTimer Operator Overloading PersistancePointer Procedure Pointer ProcessProcess32First Process32Next Query QueryInterfaceQueryPerformanceCounter Queue ReleaseMutexReleaseSemaphore Reqursion ResetEvent ResumeThreadRTTI SetEvent SetProcessWorkingSetSizeSetThreadContext SetWaitableTimer Smilarity SORT SQLSQL Server Stream SuspendThread Sw itchDesktopTDateTime TerminateProcess TerminateThread
Thread TInterfacedObject TValue UntypedParameters VirtualAllocEx VirtualFreeEx
WaitForMultipleObjects WaitForSingleObjectWeaver WriteProcessMemory _AddRef _Release
WP Cumulus Flash tag cloud by Roy Tanckrequires Flash Player 9 or better
Son Yorumlar
Yeni Veri Tipleri ve Operator Overloading iccedilinTuğrul HELVACIYeni Veri Tipleri ve Operator Overloading iccedilinZafer CcedilelenkDelphi ve Google Maps API iccedilin TuğrulHELVACIDelphi ve Google Maps API iccedilin ahmet
01
02030405060708091011121314151617
1819202122232425
procedure LoadHTML(WebBrowser TWebBrowser HTMLCodeString)
varsl TStringListms TMemoryStream
beginWebBrowserNavigate(aboutblank)
if Assigned(WebBrowserDocument) thenbegin
sl = TStringListCreatetry
ms = TMemoryStreamCreatetry
slText = HTMLCodeslSaveToStream(ms)msSeek(0 0)(WebBrowserDocument as
IPersistStreamInit)Load(TStreamAdapterCreate(ms))
finallymsFree
endfinally
slFreeend
endend
PDFmyURLcom
interfacersquoin iccedilinde mevcut bulunan IsDirtyLoadSaveGetSizeMax ve InitNew metodlarının daimplemente edilmiş olması gerekir Bizim ihtiyacımız olan Load metodu kendisine IStreamtuumlruumlnde bir parametre bekler IStream adından da anlaşılabileceği gibi bir interfacersquodirDelphirsquonin Classespas dosyasında tanımlanmış olan TStreamAdapter isimli sınıfı da IStreaminterfacersquoini implemente etmiştir ve asıl amacı Delphi TStream sınıflarının IStream bek leyenyapılarla haberleşmesini sağlamaktır Dolayısı ile IStream parametresi bekleyen Loadmetoduna TStreamAdapter sınıfından bir nesne geccedililebilir
Yukarıdaki kodumuz programımız iccedilerisinde html kodları yazabilmemizi ve bu kodları birTWebBrowser nesnesi uumlzerinde goumlzlemleyebilmemizi sağlamaktadır Şimdi ufak bir testyapalım
Ziyaretccedili Defteri iccedilin Tuğrul HELVACI
Son Yazılar
Yeni Veri Tipleri ve Operator OverloadingInterface Nedir Nerelerde ve Neden Kullanırız Derinlemesine Threading(3)SQLrsquode Benzerlik AlgoritmalarıhellipFull Text Searchinghellip
Kategoriler
Genel (4)IDE (1)
İşletim Sistemi (7)Programlama (43)
Net (3)C (2)Delphi (43)Grafik (2)Internet (4)Veritabanı (3)Win32 (6)
Takvim
Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz
01
02030405060708091011121314151617181920212223242526
272829303132333435
wBrowser formumuz uumlzerinde bulunan TWebBrowser nesnesininadıdır
const
Enter = Char(13) + Char(10)HtmlStartSection = lthtmlgtHtmlEndSection = lthtmlgtHeadStartSection = ltheadgtHeadEndSection = ltheadgtBodyStartSection = ltbodygtBodyEndSection = ltbodygtScriptStartSection= ltscript type=textjavascriptgtScriptEndSection = ltscriptgt
HTML = HtmlStartSection + Enter +
HeadStartSection + Enter +HEADSECTION + Enter +
SCRIPTSECTION + Enter +HeadEndSection + Enter +BodyStartSection + Enter +
BODYSECTION + Enter +BodyEndSection + Enter +
HtmlEndSection const
JScriptShowMessage =function ShowMessage(Message) + Enter
+ + Enter +
alert(Message) + Enter +
procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
begin
PDFmyURLcom
Oumlrneğimiz son derece basit bir html sayfasının yapısını oluşturacak sabitlerden ve yineShowMessage isimli bir JavaScript fonksiyonundan ibaret Şu aşamada bu kodumuzTWebBrowser sınıfından tuumlremiş wBrowser isimli nesnemize belirtilen HTML kodlarınıyuumlklemekten başka bir işe yaramıyor Yukarıdaki kodda ilginccedil olabilecek tek hususTWebBrowser sınıfının ReadyState oumlzelliğinin READYSTATE_INTERACTIVE olmasınınkontroluuml olabilir Bu kontrol TWebBrowser nesnesine html kodlarının yuumlklenmesininbeklenmesi iccedilindir Peki makalemizin başlığına konu olan JavaScript metodlarının ccedilağrılmasınınasıl yapacağız diye duumlşuumlnuumlyor olabilirsiniz Sizleri daha fazla bekletmeden ShowMessageisimli JavaScript metodunu Delphirsquoden nasıl ccedilağırdığımızı goumlstermeye ccedilalışayım
Bir kaccedil paragraf oumlnce TWebBrowser sınıfının pek ccedilok interfacersquoi implemente ettiğinisoumlylemiştik Bu interfacersquolerden bir tanesi de IHTMLDocument2lsquodir IHTMLDocument2interfacersquoinin parentWindow propertyrsquosi IHTMLWindow2 tuumlruumlnden başka bir interface doumlnduumlruumlrIHTMLWindow2 interfacersquoinin execScript metodu tam da aradığımız işi yapmaktadır Sonparametresinden analayacağınız uumlzere bu interfacersquoin guumlcuuml sadece JavaScript kodlarıccedilalıştırmak ile sınırlı değildir Ancak biz oumlrneğimizde en yaygın kullanılan JavaScript olduğu iccedilinonu ele alacağız Goumlrduumlğuumlnuumlz gibi ShowMessage JavaScript metoduna Delphirsquonin TimeToStrmetodundan doumlnen değeri parametre olarak aktarıyor ve metodu ccedilalıştırıyoruz ShowMessageJavaScript metodunun iccedilinde alert komutunun olduğunu hatırlıyorsunuzdur Bu da ekranazaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirki
laquo Haz
1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31
Arşivler
Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)
Bağlantılar
Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARANZafer Ccedilelenk
363738394041
42
43
44454647
48
sHTML = HTMLsScript = ScriptStartSection + Enter +
JscriptShowMessage + Enter +ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION
[rfReplaceAll])sHTML = StringReplace(sHTML SCRIPTSECTION sScript
[rfReplaceAll])sHTML = StringReplace(sHTML BODYSECTION Delphi ve
JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE doApplicationProcessMessages
end
0102030405060708
09
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
zaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirkiJavaScript iccedilinde bazı nesneleri oluşturur ve kullanırız Bu nesneler bazen kendi yazdığımızJavaScript sınıfları olabileceği gibi bazen de 3primeuumlncuuml parti yazılımların ActiveX denetimleriolabilir Fusion Charts buna bir oumlrnek Yada Flash nesneleri başka bir oumlrnek
Pek i biz JavaScript iccedilinde oluşturduğumuz bu nesnelere Delphi altından nasıl erişeceğiz Delphi iccedilinde nesnelerin propertyrsquolerine erişebilsek bazı metodlarını ccedilalıştırabilsek ne guumlzelolurdu dediğinizi duyar gibiyim Onun iccedilinde aşağıdaki youmlntemi kullanacağız
Ziyaretccedili Bilgileri
Ziyaret 5 12073
Beğenilenler
Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes
Meta
GirişYazılar RSSYorumlar RSSWordPressorg
Etiketler-Liste
010203
040506070809101112131415161718
19202122232425262728293031
32333435363738
constJScriptShowMessage =
function ShowMessage(Message) + Enter+
+ Enter +alert(Message) + Enter +
JScriptClass = function TPerson(Adi Yasi) + Enter + + Enter +
var fAdi = Adi + Enter +var fYasi = Yasi + Enter +thisSetAdi = SetAdi + Enter +thisSetYasi = SetYasi + Enter +thisToString = ToString + Enter +
function ToString() + Enter + + Enter + return fAdi + + 39 + + 39
+ + fYasi + Enter + + Enter +
function SetAdi( Value ) + Enter + + Enter +
fAdi = Value + Enter + + Enter +
function SetYasi( Value ) + Enter + + Enter +
fYasi = Value + Enter + + Enter +
+ Enter + var Person = new TPerson( + 39 +
Tuğrul HELVACI + 39 + 34) procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
beginsHTML = HTML
PDFmyURLcom
Bu oumlrneğimizin bir oumlncekinden tek farkı TPerson isminde bir JavaScript sınıfına sahip olması vebu sınıfın metodlarının ccedilalıştırılıyor olmasıdır Buradaki en can alıcı nokta TPerson isimliJavaScript sınıfının bir oumlrneğinin var Person = new TPerson() biccediliminde oluşturulması veglobal bir değişkene atanmasıdır Artık bizler Delphi tarafında TWebBrowserrsquoın IHTMLWindow2interfacersquoi uumlzerinden bu sınıf nesnesine erişebilir ve istediğimiz gibi kullanabiliriz
Goumlrduumlğuumlnuumlz gibi Delphi uumlzerinden JavaScriptrsquoe ait olan metodlara ve sınıflara erişebildikAcaba JavaScript Delphi uumlzerinde tanımlı olan sınıf ve metodlara erişebilir mi
Bu sorunun cevabı da evet Lacirckin biraz daha karmaşık bir mekanizmaya sahip MSDN helpuumlzerinden yaptığım araştırmada JavaScriptrsquoin harici dillere erişimi sağlayabilmesi iccedilinTWebBrowserrsquoın bazı interfacersquoleri implemente etmesi gerektiğini oumlğrendim Bu interfacersquolerIDocHostUIHandler IDocHostUIHandler2 interfacersquoleri Bu interfacersquolerin pek ccedilok metodumevcut Bu metodları burada paylaşmayı duumlşuumlnmuumlyorum ancak bu interfacersquolerin tanımlandığı
Absolute API Byte Arrays Class Reference
COM CreateDesktop CreateProcess
CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next
OpenDesktop Persistance Pointer Procedure
Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess
Thread Untyped Parameters VirtualAllocEx
VirtualFreeEx WaitForSingleObjectWriteProcessMemory
Delphi About
Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010
394041424344
45
46
47484950
51525354555657585960
61
626364
65
sScript = ScriptStartSection + Enter +JscriptShowMessage+ Enter +JscriptClass + Enter +
ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION [rfReplaceAll])
sHTML = StringReplace(sHTML SCRIPTSECTION sScript [rfReplaceAll])
sHTML = StringReplace(sHTML BODYSECTION Delphive JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE do
ApplicationProcessMessagesend procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)
WinexecScript(PersonSetYasi(18) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)end
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
sayılmam Dolayısı ile yazacağım oumlrnekler sizlere basit gelirse yahut bazı hatalarım olursaşimdiden affınıza sığınırım
Herşeyden evvel TWebBrowser nesnesi kendisine yuumlkleyeceği bir HTML dosya alır Bu dosyadisk uumlzerinde yada internet uumlzerinde bir yerdedir ve TWebBrowserrsquoın Navigate metodunaparametre olarak aktarılır Navigate metodu kendisine verilen HTML dosyayı yada linkingoumlsterdiği verileri parse eder ve TWebBrowser uumlzerinde goumlsterir Buraya kadar herşey normalLacirckin ben yapım gereği disk uumlzerinde bulunan dosyalar ile ccedilalışmayı pek sevmem Budosyaların bozulabilme ihtimalleri yada silinebilme ihtimallerinin olması programınızın doğruccedilalışmasını engelleyeceği iccedilin dosya erişimli youmlntemlerden muumlmkuumln mertebe uzak kalmanızıtavsiye ederim Bu bağlamda yaptığım araştırma sonucu pek ccedilok kaynakta HTML kaynakkodlarının herhangi bir dosyaya ihtiyaccedil duymadan TWebBrowser nesnesinde goumlsterilebildiğinioumlğrendim Bulduğum metod aşağıdaki gibidir
MSDN yardım doumlkuumlmanlarından yada Microsoftrsquoun online MSDN kaynaklarındanTWebBrowser sınıfının oumlzelliklerini inceleyecek olursanız pek ccedilok interfacersquoi implementeettiğini goumlzlemlersiniz Bu interfacersquolerden bir tanesi de IPersistStreamInitlsquodirIPersistStreamInit interfacersquoi TWebBrowser tarafından implemente edildiğine goumlre buinterfacersquoin iccedilinde mevcut bulunan IsDirtyLoadSaveGetSizeMax ve InitNew metodlarının da
EnumDesktopProc EnumDesktops Flash FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoGetThreadContext GetTickCount GetTickCount64Hacking Inheritance InitializeCriticalSectionInterface InterlockedCompareExchangeInterlockedDecrement InterlockedExchangeInterlockedExchangeAdd InterlockedIncrementJavaScript LeaveCriticalSection Method PointerModule32First Module32Next MSSQL OpenDesktopOpenEvent OpenMutex OpenSemaphoreOpenWaitableTimer Operator Overloading PersistancePointer Procedure Pointer ProcessProcess32First Process32Next Query QueryInterfaceQueryPerformanceCounter Queue ReleaseMutexReleaseSemaphore Reqursion ResetEvent ResumeThreadRTTI SetEvent SetProcessWorkingSetSizeSetThreadContext SetWaitableTimer Smilarity SORT SQLSQL Server Stream SuspendThread Sw itchDesktopTDateTime TerminateProcess TerminateThread
Thread TInterfacedObject TValue UntypedParameters VirtualAllocEx VirtualFreeEx
WaitForMultipleObjects WaitForSingleObjectWeaver WriteProcessMemory _AddRef _Release
WP Cumulus Flash tag cloud by Roy Tanckrequires Flash Player 9 or better
Son Yorumlar
Yeni Veri Tipleri ve Operator Overloading iccedilinTuğrul HELVACIYeni Veri Tipleri ve Operator Overloading iccedilinZafer CcedilelenkDelphi ve Google Maps API iccedilin TuğrulHELVACIDelphi ve Google Maps API iccedilin ahmet
01
02030405060708091011121314151617
1819202122232425
procedure LoadHTML(WebBrowser TWebBrowser HTMLCodeString)
varsl TStringListms TMemoryStream
beginWebBrowserNavigate(aboutblank)
if Assigned(WebBrowserDocument) thenbegin
sl = TStringListCreatetry
ms = TMemoryStreamCreatetry
slText = HTMLCodeslSaveToStream(ms)msSeek(0 0)(WebBrowserDocument as
IPersistStreamInit)Load(TStreamAdapterCreate(ms))
finallymsFree
endfinally
slFreeend
endend
PDFmyURLcom
interfacersquoin iccedilinde mevcut bulunan IsDirtyLoadSaveGetSizeMax ve InitNew metodlarının daimplemente edilmiş olması gerekir Bizim ihtiyacımız olan Load metodu kendisine IStreamtuumlruumlnde bir parametre bekler IStream adından da anlaşılabileceği gibi bir interfacersquodirDelphirsquonin Classespas dosyasında tanımlanmış olan TStreamAdapter isimli sınıfı da IStreaminterfacersquoini implemente etmiştir ve asıl amacı Delphi TStream sınıflarının IStream bek leyenyapılarla haberleşmesini sağlamaktır Dolayısı ile IStream parametresi bekleyen Loadmetoduna TStreamAdapter sınıfından bir nesne geccedililebilir
Yukarıdaki kodumuz programımız iccedilerisinde html kodları yazabilmemizi ve bu kodları birTWebBrowser nesnesi uumlzerinde goumlzlemleyebilmemizi sağlamaktadır Şimdi ufak bir testyapalım
Ziyaretccedili Defteri iccedilin Tuğrul HELVACI
Son Yazılar
Yeni Veri Tipleri ve Operator OverloadingInterface Nedir Nerelerde ve Neden Kullanırız Derinlemesine Threading(3)SQLrsquode Benzerlik AlgoritmalarıhellipFull Text Searchinghellip
Kategoriler
Genel (4)IDE (1)
İşletim Sistemi (7)Programlama (43)
Net (3)C (2)Delphi (43)Grafik (2)Internet (4)Veritabanı (3)Win32 (6)
Takvim
Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz
01
02030405060708091011121314151617181920212223242526
272829303132333435
wBrowser formumuz uumlzerinde bulunan TWebBrowser nesnesininadıdır
const
Enter = Char(13) + Char(10)HtmlStartSection = lthtmlgtHtmlEndSection = lthtmlgtHeadStartSection = ltheadgtHeadEndSection = ltheadgtBodyStartSection = ltbodygtBodyEndSection = ltbodygtScriptStartSection= ltscript type=textjavascriptgtScriptEndSection = ltscriptgt
HTML = HtmlStartSection + Enter +
HeadStartSection + Enter +HEADSECTION + Enter +
SCRIPTSECTION + Enter +HeadEndSection + Enter +BodyStartSection + Enter +
BODYSECTION + Enter +BodyEndSection + Enter +
HtmlEndSection const
JScriptShowMessage =function ShowMessage(Message) + Enter
+ + Enter +
alert(Message) + Enter +
procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
begin
PDFmyURLcom
Oumlrneğimiz son derece basit bir html sayfasının yapısını oluşturacak sabitlerden ve yineShowMessage isimli bir JavaScript fonksiyonundan ibaret Şu aşamada bu kodumuzTWebBrowser sınıfından tuumlremiş wBrowser isimli nesnemize belirtilen HTML kodlarınıyuumlklemekten başka bir işe yaramıyor Yukarıdaki kodda ilginccedil olabilecek tek hususTWebBrowser sınıfının ReadyState oumlzelliğinin READYSTATE_INTERACTIVE olmasınınkontroluuml olabilir Bu kontrol TWebBrowser nesnesine html kodlarının yuumlklenmesininbeklenmesi iccedilindir Peki makalemizin başlığına konu olan JavaScript metodlarının ccedilağrılmasınınasıl yapacağız diye duumlşuumlnuumlyor olabilirsiniz Sizleri daha fazla bekletmeden ShowMessageisimli JavaScript metodunu Delphirsquoden nasıl ccedilağırdığımızı goumlstermeye ccedilalışayım
Bir kaccedil paragraf oumlnce TWebBrowser sınıfının pek ccedilok interfacersquoi implemente ettiğinisoumlylemiştik Bu interfacersquolerden bir tanesi de IHTMLDocument2lsquodir IHTMLDocument2interfacersquoinin parentWindow propertyrsquosi IHTMLWindow2 tuumlruumlnden başka bir interface doumlnduumlruumlrIHTMLWindow2 interfacersquoinin execScript metodu tam da aradığımız işi yapmaktadır Sonparametresinden analayacağınız uumlzere bu interfacersquoin guumlcuuml sadece JavaScript kodlarıccedilalıştırmak ile sınırlı değildir Ancak biz oumlrneğimizde en yaygın kullanılan JavaScript olduğu iccedilinonu ele alacağız Goumlrduumlğuumlnuumlz gibi ShowMessage JavaScript metoduna Delphirsquonin TimeToStrmetodundan doumlnen değeri parametre olarak aktarıyor ve metodu ccedilalıştırıyoruz ShowMessageJavaScript metodunun iccedilinde alert komutunun olduğunu hatırlıyorsunuzdur Bu da ekranazaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirki
laquo Haz
1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31
Arşivler
Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)
Bağlantılar
Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARANZafer Ccedilelenk
363738394041
42
43
44454647
48
sHTML = HTMLsScript = ScriptStartSection + Enter +
JscriptShowMessage + Enter +ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION
[rfReplaceAll])sHTML = StringReplace(sHTML SCRIPTSECTION sScript
[rfReplaceAll])sHTML = StringReplace(sHTML BODYSECTION Delphi ve
JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE doApplicationProcessMessages
end
0102030405060708
09
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
zaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirkiJavaScript iccedilinde bazı nesneleri oluşturur ve kullanırız Bu nesneler bazen kendi yazdığımızJavaScript sınıfları olabileceği gibi bazen de 3primeuumlncuuml parti yazılımların ActiveX denetimleriolabilir Fusion Charts buna bir oumlrnek Yada Flash nesneleri başka bir oumlrnek
Pek i biz JavaScript iccedilinde oluşturduğumuz bu nesnelere Delphi altından nasıl erişeceğiz Delphi iccedilinde nesnelerin propertyrsquolerine erişebilsek bazı metodlarını ccedilalıştırabilsek ne guumlzelolurdu dediğinizi duyar gibiyim Onun iccedilinde aşağıdaki youmlntemi kullanacağız
Ziyaretccedili Bilgileri
Ziyaret 5 12073
Beğenilenler
Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes
Meta
GirişYazılar RSSYorumlar RSSWordPressorg
Etiketler-Liste
010203
040506070809101112131415161718
19202122232425262728293031
32333435363738
constJScriptShowMessage =
function ShowMessage(Message) + Enter+
+ Enter +alert(Message) + Enter +
JScriptClass = function TPerson(Adi Yasi) + Enter + + Enter +
var fAdi = Adi + Enter +var fYasi = Yasi + Enter +thisSetAdi = SetAdi + Enter +thisSetYasi = SetYasi + Enter +thisToString = ToString + Enter +
function ToString() + Enter + + Enter + return fAdi + + 39 + + 39
+ + fYasi + Enter + + Enter +
function SetAdi( Value ) + Enter + + Enter +
fAdi = Value + Enter + + Enter +
function SetYasi( Value ) + Enter + + Enter +
fYasi = Value + Enter + + Enter +
+ Enter + var Person = new TPerson( + 39 +
Tuğrul HELVACI + 39 + 34) procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
beginsHTML = HTML
PDFmyURLcom
Bu oumlrneğimizin bir oumlncekinden tek farkı TPerson isminde bir JavaScript sınıfına sahip olması vebu sınıfın metodlarının ccedilalıştırılıyor olmasıdır Buradaki en can alıcı nokta TPerson isimliJavaScript sınıfının bir oumlrneğinin var Person = new TPerson() biccediliminde oluşturulması veglobal bir değişkene atanmasıdır Artık bizler Delphi tarafında TWebBrowserrsquoın IHTMLWindow2interfacersquoi uumlzerinden bu sınıf nesnesine erişebilir ve istediğimiz gibi kullanabiliriz
Goumlrduumlğuumlnuumlz gibi Delphi uumlzerinden JavaScriptrsquoe ait olan metodlara ve sınıflara erişebildikAcaba JavaScript Delphi uumlzerinde tanımlı olan sınıf ve metodlara erişebilir mi
Bu sorunun cevabı da evet Lacirckin biraz daha karmaşık bir mekanizmaya sahip MSDN helpuumlzerinden yaptığım araştırmada JavaScriptrsquoin harici dillere erişimi sağlayabilmesi iccedilinTWebBrowserrsquoın bazı interfacersquoleri implemente etmesi gerektiğini oumlğrendim Bu interfacersquolerIDocHostUIHandler IDocHostUIHandler2 interfacersquoleri Bu interfacersquolerin pek ccedilok metodumevcut Bu metodları burada paylaşmayı duumlşuumlnmuumlyorum ancak bu interfacersquolerin tanımlandığı
Absolute API Byte Arrays Class Reference
COM CreateDesktop CreateProcess
CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next
OpenDesktop Persistance Pointer Procedure
Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess
Thread Untyped Parameters VirtualAllocEx
VirtualFreeEx WaitForSingleObjectWriteProcessMemory
Delphi About
Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010
394041424344
45
46
47484950
51525354555657585960
61
626364
65
sScript = ScriptStartSection + Enter +JscriptShowMessage+ Enter +JscriptClass + Enter +
ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION [rfReplaceAll])
sHTML = StringReplace(sHTML SCRIPTSECTION sScript [rfReplaceAll])
sHTML = StringReplace(sHTML BODYSECTION Delphive JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE do
ApplicationProcessMessagesend procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)
WinexecScript(PersonSetYasi(18) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)end
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
interfacersquoin iccedilinde mevcut bulunan IsDirtyLoadSaveGetSizeMax ve InitNew metodlarının daimplemente edilmiş olması gerekir Bizim ihtiyacımız olan Load metodu kendisine IStreamtuumlruumlnde bir parametre bekler IStream adından da anlaşılabileceği gibi bir interfacersquodirDelphirsquonin Classespas dosyasında tanımlanmış olan TStreamAdapter isimli sınıfı da IStreaminterfacersquoini implemente etmiştir ve asıl amacı Delphi TStream sınıflarının IStream bek leyenyapılarla haberleşmesini sağlamaktır Dolayısı ile IStream parametresi bekleyen Loadmetoduna TStreamAdapter sınıfından bir nesne geccedililebilir
Yukarıdaki kodumuz programımız iccedilerisinde html kodları yazabilmemizi ve bu kodları birTWebBrowser nesnesi uumlzerinde goumlzlemleyebilmemizi sağlamaktadır Şimdi ufak bir testyapalım
Ziyaretccedili Defteri iccedilin Tuğrul HELVACI
Son Yazılar
Yeni Veri Tipleri ve Operator OverloadingInterface Nedir Nerelerde ve Neden Kullanırız Derinlemesine Threading(3)SQLrsquode Benzerlik AlgoritmalarıhellipFull Text Searchinghellip
Kategoriler
Genel (4)IDE (1)
İşletim Sistemi (7)Programlama (43)
Net (3)C (2)Delphi (43)Grafik (2)Internet (4)Veritabanı (3)Win32 (6)
Takvim
Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz
01
02030405060708091011121314151617181920212223242526
272829303132333435
wBrowser formumuz uumlzerinde bulunan TWebBrowser nesnesininadıdır
const
Enter = Char(13) + Char(10)HtmlStartSection = lthtmlgtHtmlEndSection = lthtmlgtHeadStartSection = ltheadgtHeadEndSection = ltheadgtBodyStartSection = ltbodygtBodyEndSection = ltbodygtScriptStartSection= ltscript type=textjavascriptgtScriptEndSection = ltscriptgt
HTML = HtmlStartSection + Enter +
HeadStartSection + Enter +HEADSECTION + Enter +
SCRIPTSECTION + Enter +HeadEndSection + Enter +BodyStartSection + Enter +
BODYSECTION + Enter +BodyEndSection + Enter +
HtmlEndSection const
JScriptShowMessage =function ShowMessage(Message) + Enter
+ + Enter +
alert(Message) + Enter +
procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
begin
PDFmyURLcom
Oumlrneğimiz son derece basit bir html sayfasının yapısını oluşturacak sabitlerden ve yineShowMessage isimli bir JavaScript fonksiyonundan ibaret Şu aşamada bu kodumuzTWebBrowser sınıfından tuumlremiş wBrowser isimli nesnemize belirtilen HTML kodlarınıyuumlklemekten başka bir işe yaramıyor Yukarıdaki kodda ilginccedil olabilecek tek hususTWebBrowser sınıfının ReadyState oumlzelliğinin READYSTATE_INTERACTIVE olmasınınkontroluuml olabilir Bu kontrol TWebBrowser nesnesine html kodlarının yuumlklenmesininbeklenmesi iccedilindir Peki makalemizin başlığına konu olan JavaScript metodlarının ccedilağrılmasınınasıl yapacağız diye duumlşuumlnuumlyor olabilirsiniz Sizleri daha fazla bekletmeden ShowMessageisimli JavaScript metodunu Delphirsquoden nasıl ccedilağırdığımızı goumlstermeye ccedilalışayım
Bir kaccedil paragraf oumlnce TWebBrowser sınıfının pek ccedilok interfacersquoi implemente ettiğinisoumlylemiştik Bu interfacersquolerden bir tanesi de IHTMLDocument2lsquodir IHTMLDocument2interfacersquoinin parentWindow propertyrsquosi IHTMLWindow2 tuumlruumlnden başka bir interface doumlnduumlruumlrIHTMLWindow2 interfacersquoinin execScript metodu tam da aradığımız işi yapmaktadır Sonparametresinden analayacağınız uumlzere bu interfacersquoin guumlcuuml sadece JavaScript kodlarıccedilalıştırmak ile sınırlı değildir Ancak biz oumlrneğimizde en yaygın kullanılan JavaScript olduğu iccedilinonu ele alacağız Goumlrduumlğuumlnuumlz gibi ShowMessage JavaScript metoduna Delphirsquonin TimeToStrmetodundan doumlnen değeri parametre olarak aktarıyor ve metodu ccedilalıştırıyoruz ShowMessageJavaScript metodunun iccedilinde alert komutunun olduğunu hatırlıyorsunuzdur Bu da ekranazaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirki
laquo Haz
1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31
Arşivler
Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)
Bağlantılar
Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARANZafer Ccedilelenk
363738394041
42
43
44454647
48
sHTML = HTMLsScript = ScriptStartSection + Enter +
JscriptShowMessage + Enter +ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION
[rfReplaceAll])sHTML = StringReplace(sHTML SCRIPTSECTION sScript
[rfReplaceAll])sHTML = StringReplace(sHTML BODYSECTION Delphi ve
JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE doApplicationProcessMessages
end
0102030405060708
09
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
zaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirkiJavaScript iccedilinde bazı nesneleri oluşturur ve kullanırız Bu nesneler bazen kendi yazdığımızJavaScript sınıfları olabileceği gibi bazen de 3primeuumlncuuml parti yazılımların ActiveX denetimleriolabilir Fusion Charts buna bir oumlrnek Yada Flash nesneleri başka bir oumlrnek
Pek i biz JavaScript iccedilinde oluşturduğumuz bu nesnelere Delphi altından nasıl erişeceğiz Delphi iccedilinde nesnelerin propertyrsquolerine erişebilsek bazı metodlarını ccedilalıştırabilsek ne guumlzelolurdu dediğinizi duyar gibiyim Onun iccedilinde aşağıdaki youmlntemi kullanacağız
Ziyaretccedili Bilgileri
Ziyaret 5 12073
Beğenilenler
Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes
Meta
GirişYazılar RSSYorumlar RSSWordPressorg
Etiketler-Liste
010203
040506070809101112131415161718
19202122232425262728293031
32333435363738
constJScriptShowMessage =
function ShowMessage(Message) + Enter+
+ Enter +alert(Message) + Enter +
JScriptClass = function TPerson(Adi Yasi) + Enter + + Enter +
var fAdi = Adi + Enter +var fYasi = Yasi + Enter +thisSetAdi = SetAdi + Enter +thisSetYasi = SetYasi + Enter +thisToString = ToString + Enter +
function ToString() + Enter + + Enter + return fAdi + + 39 + + 39
+ + fYasi + Enter + + Enter +
function SetAdi( Value ) + Enter + + Enter +
fAdi = Value + Enter + + Enter +
function SetYasi( Value ) + Enter + + Enter +
fYasi = Value + Enter + + Enter +
+ Enter + var Person = new TPerson( + 39 +
Tuğrul HELVACI + 39 + 34) procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
beginsHTML = HTML
PDFmyURLcom
Bu oumlrneğimizin bir oumlncekinden tek farkı TPerson isminde bir JavaScript sınıfına sahip olması vebu sınıfın metodlarının ccedilalıştırılıyor olmasıdır Buradaki en can alıcı nokta TPerson isimliJavaScript sınıfının bir oumlrneğinin var Person = new TPerson() biccediliminde oluşturulması veglobal bir değişkene atanmasıdır Artık bizler Delphi tarafında TWebBrowserrsquoın IHTMLWindow2interfacersquoi uumlzerinden bu sınıf nesnesine erişebilir ve istediğimiz gibi kullanabiliriz
Goumlrduumlğuumlnuumlz gibi Delphi uumlzerinden JavaScriptrsquoe ait olan metodlara ve sınıflara erişebildikAcaba JavaScript Delphi uumlzerinde tanımlı olan sınıf ve metodlara erişebilir mi
Bu sorunun cevabı da evet Lacirckin biraz daha karmaşık bir mekanizmaya sahip MSDN helpuumlzerinden yaptığım araştırmada JavaScriptrsquoin harici dillere erişimi sağlayabilmesi iccedilinTWebBrowserrsquoın bazı interfacersquoleri implemente etmesi gerektiğini oumlğrendim Bu interfacersquolerIDocHostUIHandler IDocHostUIHandler2 interfacersquoleri Bu interfacersquolerin pek ccedilok metodumevcut Bu metodları burada paylaşmayı duumlşuumlnmuumlyorum ancak bu interfacersquolerin tanımlandığı
Absolute API Byte Arrays Class Reference
COM CreateDesktop CreateProcess
CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next
OpenDesktop Persistance Pointer Procedure
Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess
Thread Untyped Parameters VirtualAllocEx
VirtualFreeEx WaitForSingleObjectWriteProcessMemory
Delphi About
Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010
394041424344
45
46
47484950
51525354555657585960
61
626364
65
sScript = ScriptStartSection + Enter +JscriptShowMessage+ Enter +JscriptClass + Enter +
ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION [rfReplaceAll])
sHTML = StringReplace(sHTML SCRIPTSECTION sScript [rfReplaceAll])
sHTML = StringReplace(sHTML BODYSECTION Delphive JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE do
ApplicationProcessMessagesend procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)
WinexecScript(PersonSetYasi(18) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)end
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
Oumlrneğimiz son derece basit bir html sayfasının yapısını oluşturacak sabitlerden ve yineShowMessage isimli bir JavaScript fonksiyonundan ibaret Şu aşamada bu kodumuzTWebBrowser sınıfından tuumlremiş wBrowser isimli nesnemize belirtilen HTML kodlarınıyuumlklemekten başka bir işe yaramıyor Yukarıdaki kodda ilginccedil olabilecek tek hususTWebBrowser sınıfının ReadyState oumlzelliğinin READYSTATE_INTERACTIVE olmasınınkontroluuml olabilir Bu kontrol TWebBrowser nesnesine html kodlarının yuumlklenmesininbeklenmesi iccedilindir Peki makalemizin başlığına konu olan JavaScript metodlarının ccedilağrılmasınınasıl yapacağız diye duumlşuumlnuumlyor olabilirsiniz Sizleri daha fazla bekletmeden ShowMessageisimli JavaScript metodunu Delphirsquoden nasıl ccedilağırdığımızı goumlstermeye ccedilalışayım
Bir kaccedil paragraf oumlnce TWebBrowser sınıfının pek ccedilok interfacersquoi implemente ettiğinisoumlylemiştik Bu interfacersquolerden bir tanesi de IHTMLDocument2lsquodir IHTMLDocument2interfacersquoinin parentWindow propertyrsquosi IHTMLWindow2 tuumlruumlnden başka bir interface doumlnduumlruumlrIHTMLWindow2 interfacersquoinin execScript metodu tam da aradığımız işi yapmaktadır Sonparametresinden analayacağınız uumlzere bu interfacersquoin guumlcuuml sadece JavaScript kodlarıccedilalıştırmak ile sınırlı değildir Ancak biz oumlrneğimizde en yaygın kullanılan JavaScript olduğu iccedilinonu ele alacağız Goumlrduumlğuumlnuumlz gibi ShowMessage JavaScript metoduna Delphirsquonin TimeToStrmetodundan doumlnen değeri parametre olarak aktarıyor ve metodu ccedilalıştırıyoruz ShowMessageJavaScript metodunun iccedilinde alert komutunun olduğunu hatırlıyorsunuzdur Bu da ekranazaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirki
laquo Haz
1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31
Arşivler
Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)
Bağlantılar
Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARANZafer Ccedilelenk
363738394041
42
43
44454647
48
sHTML = HTMLsScript = ScriptStartSection + Enter +
JscriptShowMessage + Enter +ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION
[rfReplaceAll])sHTML = StringReplace(sHTML SCRIPTSECTION sScript
[rfReplaceAll])sHTML = StringReplace(sHTML BODYSECTION Delphi ve
JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE doApplicationProcessMessages
end
0102030405060708
09
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
zaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirkiJavaScript iccedilinde bazı nesneleri oluşturur ve kullanırız Bu nesneler bazen kendi yazdığımızJavaScript sınıfları olabileceği gibi bazen de 3primeuumlncuuml parti yazılımların ActiveX denetimleriolabilir Fusion Charts buna bir oumlrnek Yada Flash nesneleri başka bir oumlrnek
Pek i biz JavaScript iccedilinde oluşturduğumuz bu nesnelere Delphi altından nasıl erişeceğiz Delphi iccedilinde nesnelerin propertyrsquolerine erişebilsek bazı metodlarını ccedilalıştırabilsek ne guumlzelolurdu dediğinizi duyar gibiyim Onun iccedilinde aşağıdaki youmlntemi kullanacağız
Ziyaretccedili Bilgileri
Ziyaret 5 12073
Beğenilenler
Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes
Meta
GirişYazılar RSSYorumlar RSSWordPressorg
Etiketler-Liste
010203
040506070809101112131415161718
19202122232425262728293031
32333435363738
constJScriptShowMessage =
function ShowMessage(Message) + Enter+
+ Enter +alert(Message) + Enter +
JScriptClass = function TPerson(Adi Yasi) + Enter + + Enter +
var fAdi = Adi + Enter +var fYasi = Yasi + Enter +thisSetAdi = SetAdi + Enter +thisSetYasi = SetYasi + Enter +thisToString = ToString + Enter +
function ToString() + Enter + + Enter + return fAdi + + 39 + + 39
+ + fYasi + Enter + + Enter +
function SetAdi( Value ) + Enter + + Enter +
fAdi = Value + Enter + + Enter +
function SetYasi( Value ) + Enter + + Enter +
fYasi = Value + Enter + + Enter +
+ Enter + var Person = new TPerson( + 39 +
Tuğrul HELVACI + 39 + 34) procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
beginsHTML = HTML
PDFmyURLcom
Bu oumlrneğimizin bir oumlncekinden tek farkı TPerson isminde bir JavaScript sınıfına sahip olması vebu sınıfın metodlarının ccedilalıştırılıyor olmasıdır Buradaki en can alıcı nokta TPerson isimliJavaScript sınıfının bir oumlrneğinin var Person = new TPerson() biccediliminde oluşturulması veglobal bir değişkene atanmasıdır Artık bizler Delphi tarafında TWebBrowserrsquoın IHTMLWindow2interfacersquoi uumlzerinden bu sınıf nesnesine erişebilir ve istediğimiz gibi kullanabiliriz
Goumlrduumlğuumlnuumlz gibi Delphi uumlzerinden JavaScriptrsquoe ait olan metodlara ve sınıflara erişebildikAcaba JavaScript Delphi uumlzerinde tanımlı olan sınıf ve metodlara erişebilir mi
Bu sorunun cevabı da evet Lacirckin biraz daha karmaşık bir mekanizmaya sahip MSDN helpuumlzerinden yaptığım araştırmada JavaScriptrsquoin harici dillere erişimi sağlayabilmesi iccedilinTWebBrowserrsquoın bazı interfacersquoleri implemente etmesi gerektiğini oumlğrendim Bu interfacersquolerIDocHostUIHandler IDocHostUIHandler2 interfacersquoleri Bu interfacersquolerin pek ccedilok metodumevcut Bu metodları burada paylaşmayı duumlşuumlnmuumlyorum ancak bu interfacersquolerin tanımlandığı
Absolute API Byte Arrays Class Reference
COM CreateDesktop CreateProcess
CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next
OpenDesktop Persistance Pointer Procedure
Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess
Thread Untyped Parameters VirtualAllocEx
VirtualFreeEx WaitForSingleObjectWriteProcessMemory
Delphi About
Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010
394041424344
45
46
47484950
51525354555657585960
61
626364
65
sScript = ScriptStartSection + Enter +JscriptShowMessage+ Enter +JscriptClass + Enter +
ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION [rfReplaceAll])
sHTML = StringReplace(sHTML SCRIPTSECTION sScript [rfReplaceAll])
sHTML = StringReplace(sHTML BODYSECTION Delphive JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE do
ApplicationProcessMessagesend procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)
WinexecScript(PersonSetYasi(18) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)end
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
zaman bilgisini goumlsteren kuumlccediluumlk bir dialog kutusu ccedilıkartacaktır Oumlyle zamanlar gelirkiJavaScript iccedilinde bazı nesneleri oluşturur ve kullanırız Bu nesneler bazen kendi yazdığımızJavaScript sınıfları olabileceği gibi bazen de 3primeuumlncuuml parti yazılımların ActiveX denetimleriolabilir Fusion Charts buna bir oumlrnek Yada Flash nesneleri başka bir oumlrnek
Pek i biz JavaScript iccedilinde oluşturduğumuz bu nesnelere Delphi altından nasıl erişeceğiz Delphi iccedilinde nesnelerin propertyrsquolerine erişebilsek bazı metodlarını ccedilalıştırabilsek ne guumlzelolurdu dediğinizi duyar gibiyim Onun iccedilinde aşağıdaki youmlntemi kullanacağız
Ziyaretccedili Bilgileri
Ziyaret 5 12073
Beğenilenler
Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes
Meta
GirişYazılar RSSYorumlar RSSWordPressorg
Etiketler-Liste
010203
040506070809101112131415161718
19202122232425262728293031
32333435363738
constJScriptShowMessage =
function ShowMessage(Message) + Enter+
+ Enter +alert(Message) + Enter +
JScriptClass = function TPerson(Adi Yasi) + Enter + + Enter +
var fAdi = Adi + Enter +var fYasi = Yasi + Enter +thisSetAdi = SetAdi + Enter +thisSetYasi = SetYasi + Enter +thisToString = ToString + Enter +
function ToString() + Enter + + Enter + return fAdi + + 39 + + 39
+ + fYasi + Enter + + Enter +
function SetAdi( Value ) + Enter + + Enter +
fAdi = Value + Enter + + Enter +
function SetYasi( Value ) + Enter + + Enter +
fYasi = Value + Enter + + Enter +
+ Enter + var Person = new TPerson( + 39 +
Tuğrul HELVACI + 39 + 34) procedure TfrmJavaScriptButton1Click(Sender TObject)var
sHTMLsScript String
beginsHTML = HTML
PDFmyURLcom
Bu oumlrneğimizin bir oumlncekinden tek farkı TPerson isminde bir JavaScript sınıfına sahip olması vebu sınıfın metodlarının ccedilalıştırılıyor olmasıdır Buradaki en can alıcı nokta TPerson isimliJavaScript sınıfının bir oumlrneğinin var Person = new TPerson() biccediliminde oluşturulması veglobal bir değişkene atanmasıdır Artık bizler Delphi tarafında TWebBrowserrsquoın IHTMLWindow2interfacersquoi uumlzerinden bu sınıf nesnesine erişebilir ve istediğimiz gibi kullanabiliriz
Goumlrduumlğuumlnuumlz gibi Delphi uumlzerinden JavaScriptrsquoe ait olan metodlara ve sınıflara erişebildikAcaba JavaScript Delphi uumlzerinde tanımlı olan sınıf ve metodlara erişebilir mi
Bu sorunun cevabı da evet Lacirckin biraz daha karmaşık bir mekanizmaya sahip MSDN helpuumlzerinden yaptığım araştırmada JavaScriptrsquoin harici dillere erişimi sağlayabilmesi iccedilinTWebBrowserrsquoın bazı interfacersquoleri implemente etmesi gerektiğini oumlğrendim Bu interfacersquolerIDocHostUIHandler IDocHostUIHandler2 interfacersquoleri Bu interfacersquolerin pek ccedilok metodumevcut Bu metodları burada paylaşmayı duumlşuumlnmuumlyorum ancak bu interfacersquolerin tanımlandığı
Absolute API Byte Arrays Class Reference
COM CreateDesktop CreateProcess
CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next
OpenDesktop Persistance Pointer Procedure
Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess
Thread Untyped Parameters VirtualAllocEx
VirtualFreeEx WaitForSingleObjectWriteProcessMemory
Delphi About
Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010
394041424344
45
46
47484950
51525354555657585960
61
626364
65
sScript = ScriptStartSection + Enter +JscriptShowMessage+ Enter +JscriptClass + Enter +
ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION [rfReplaceAll])
sHTML = StringReplace(sHTML SCRIPTSECTION sScript [rfReplaceAll])
sHTML = StringReplace(sHTML BODYSECTION Delphive JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE do
ApplicationProcessMessagesend procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)
WinexecScript(PersonSetYasi(18) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)end
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
Bu oumlrneğimizin bir oumlncekinden tek farkı TPerson isminde bir JavaScript sınıfına sahip olması vebu sınıfın metodlarının ccedilalıştırılıyor olmasıdır Buradaki en can alıcı nokta TPerson isimliJavaScript sınıfının bir oumlrneğinin var Person = new TPerson() biccediliminde oluşturulması veglobal bir değişkene atanmasıdır Artık bizler Delphi tarafında TWebBrowserrsquoın IHTMLWindow2interfacersquoi uumlzerinden bu sınıf nesnesine erişebilir ve istediğimiz gibi kullanabiliriz
Goumlrduumlğuumlnuumlz gibi Delphi uumlzerinden JavaScriptrsquoe ait olan metodlara ve sınıflara erişebildikAcaba JavaScript Delphi uumlzerinde tanımlı olan sınıf ve metodlara erişebilir mi
Bu sorunun cevabı da evet Lacirckin biraz daha karmaşık bir mekanizmaya sahip MSDN helpuumlzerinden yaptığım araştırmada JavaScriptrsquoin harici dillere erişimi sağlayabilmesi iccedilinTWebBrowserrsquoın bazı interfacersquoleri implemente etmesi gerektiğini oumlğrendim Bu interfacersquolerIDocHostUIHandler IDocHostUIHandler2 interfacersquoleri Bu interfacersquolerin pek ccedilok metodumevcut Bu metodları burada paylaşmayı duumlşuumlnmuumlyorum ancak bu interfacersquolerin tanımlandığı
Absolute API Byte Arrays Class Reference
COM CreateDesktop CreateProcess
CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next
OpenDesktop Persistance Pointer Procedure
Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess
Thread Untyped Parameters VirtualAllocEx
VirtualFreeEx WaitForSingleObjectWriteProcessMemory
Delphi About
Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010
394041424344
45
46
47484950
51525354555657585960
61
626364
65
sScript = ScriptStartSection + Enter +JscriptShowMessage+ Enter +JscriptClass + Enter +
ScriptEndSection
sHTML = StringReplace(sHTML HEADSECTION [rfReplaceAll])
sHTML = StringReplace(sHTML SCRIPTSECTION sScript [rfReplaceAll])
sHTML = StringReplace(sHTML BODYSECTION Delphive JavaScript [rfReplaceAll])
LoadHTML(wBrowser sHTML)
while wBrowserReadyState lt READYSTATE_INTERACTIVE do
ApplicationProcessMessagesend procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)
WinexecScript(PersonSetYasi(18) JavaScript)WinexecScript(ShowMessage(PersonToString())
JavaScript)end
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
dosyayı makalenin sonunda indirebilmeniz accedilısından ekleyeceğim
IDocHostUIHandler ve IDocHostUIHandler2 interfacelerinin tanım dosyası hazırlandıktan sonraTWebBrowser sınıfımızın IDocHostUIHandler interfacersquoini desteklemesini sağlamamızgerekiyor Tanımlamamız aşağıdaki şekildeki gibi goumlruumlnecek
Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010
Sık Ziyaret Edilenler
Sayfa Home(16059)
Delphi ve Google Maps API(4132)
Delphi ve Google Maps API(1976)
Nedir bu Threadrsquolerden ccedilektiğimiz(1444)
Delphi amp Animated Flash Charts(Fusion Charts)(1179)
Delphi amp JavaScript Kardeşliği(936)
Delphi 2010 (Weaver) ve TValue(918)
Derinlemesine Threading(1)(886)
Derinlemesine Threading(2)(695)
Win32 amp Net(Delphi-gtC)(617)
Kategori Delphi(613)
Bir Kiosk ve CreateDesktop macerası(568)
Sayfa Hakkında
01020304050607
08
09
10
11
12
1314
15
16
1718
1920
21
2223
24
2526272829
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget out
ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw UINT)
HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer) HResult
stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINT constpcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResult stdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
Yukarıda yeni tanımı bulunan TWebBrowser artık IDocHostUIHandler interfacersquoini implementeetmiştirNot Tanım satırımızda TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)şeklinde bir yazım tarzı goumlrmekteyiz Bu tanım tuumlruumlne interpose adı verilir Delphirsquode mevcut birsınıfın genişletilebilmesi yapısının değiştirilebilmesi adına yeniden tanımına muumlsaade edilirTıpkı Net terminolojisindeki helper sınıflar gibi
TWebBrowser sınıfımızın implemente ettiği interfacersquoin bizim iccedilin en oumlnemli metoduGetExternal metodudur Bu metod haricindeki hiccedil bir metoda şu an iccedilin ihtiyacımız yok Busebep ile tuumlm metodların iccediline E_NOTIMPL yani implemente etmeyeceğiz anlamına gelensabiti doumlnduumlrecek kodu yazıyoruz GetExternal fonksiyonu JavaScriptrsquoin harici uygulamalarlahaberleşebilmesi adına IDispatch arabirimini destekleyen bir parametre alır Bu parametreyegeccedililmesi gereken nesne sınıfının IDispatch interfacersquoini implemente etmesi gereklidir Bununiccedilib ObjComAutopas unitinde tanımlı olan TObjectDispatch sınıfı kullanılabilir
COM programlamanın karmaşıklığı benim kafamı karıştırdığı gibi eminim sizin de kafanızıkarıştırmıştır Bu sebeple biraz da kod oumlrneği goumlrerek ilerlemek sanırım hepimize biraz nefesaldıracaktır
(563)TThreadWaitFor Bug
(540)Delphi 2010 (Weaver) ve TValue
(530)
Oylama
Sitedeki makaleleri yararlı buluyor musunuz
Evet yararlı ama yetersiz
Evet son derece yararlı
Evet muumlkemmel
Hayır yararlı değil
Hayır hem yararlı değil hem de yetersiz
Hayır rezalet
Vote
View Results
Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz
Delphi 5 yada oumlncesi
Delphi 6
Delphi 7
Delphi 8
Delphi 2005
Delphi 2006
001002003004005006007
008
009
010
011
012
013014
015
016
017018
019
TWebBrowser = class(SHDocVwTWebBrowser IDocHostUIHandler)private
function GetHTMLWindow2 IHTMLWindow2function GetDocument2 IHTMLDocument2
protected IDocHostUIHandler function EnableModeless(fEnable Integer) HResult
stdcallfunction FilterDataObject(const pDO IDataObject out
ppDORet IDataObject) HResult stdcallfunction GetDropTarget(const pDropTarget IDropTarget
out ppDropTarget IDropTarget) HResult stdcallfunction GetExternal(out ppDispatch IDispatch) HResult
stdcallfunction GetHostInfo(var pInfo _DOCHOSTUIINFO) HResult
stdcallfunction GetOptionKeyPath(out pchKey PWideChar dw
UINT) HResult stdcallfunction HideUI HResult stdcallfunction OnDocWindowActivate(fActivate Integer)
HResult stdcallfunction OnFrameWindowActivate(fActivate Integer)
HResult stdcallfunction ResizeBorder(var prcBorder tagRECT const
pUIWindow IOleInPlaceUIWindowfRameWindow Integer) HResult stdcall
function ShowContextMenu(dwID UINT ppt PtagPOINTconst pcmdtReserved IUnknownconst pdispReserved IDispatch) HResult stdcall
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
Delphi 2007
Delphi 2009
Delphi 2010
Vote
View Results
020
021
022023
024
025026027028029030031032033034035036037038
039040041042043044045046047048
049050051052053054055056057058059060061062
function ShowUI(dwID UINT const pActiveObjectIOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult stdcall
function TranslateAccelerator(var lpmsg tagMSG varpguidCmdGroup TGUID nCmdID UINT) HResult stdcall
function TranslateUrl(dwTranslate UINT pchURLInPWideChar out ppchURLOut PWideChar) HResultstdcall
function UpdateUI HResult stdcallpublic
property Document2 IHTMLDocument2 read GetDocument2property HTMLWindow2 IHTMLWindow2 read GetHTMLWindow2
end
TApplicationWrapper = class(TObjectWrapper)private
function GetApplication TApplicationfunction GetCaption stringprocedure SetCaption(S string)
publishedproperty Application TApplication read GetApplicationproperty Caption string read GetCaption write
SetCaptionend
TWebBrowser function TWebBrowserEnableModeless(fEnable Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserFilterDataObject(const pDO IDataObject
out ppDORet IDataObject) HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetDocument2 IHTMLDocument2begin
Supports(Document IHTMLDocument2 Result)end
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
063064
065066067068069070
071072073074075076077078079
080081082083084085086087088089
090091092093094095096097098099
100101102103104
105106
function TWebBrowserGetDropTarget(const pDropTarget
IDropTargetout ppDropTarget IDropTarget) HResult
beginResult = E_NOTIMPL
end function TWebBrowserGetExternal(out ppDispatch IDispatch)
HResultvar
W TApplicationWrapperbegin
W = TApplicationWrapperConnect(FormsApplication)ppDispatch = TAutoObjectDispatchCreate(W) as IDispatchResult = S_OK
end function TWebBrowserGetHostInfo(var pInfo _DOCHOSTUIINFO)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserGetHTMLWindow2 IHTMLWindow2begin
Result = Document2parentWindowend function TWebBrowserGetOptionKeyPath(out pchKey PWideChar
dw UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserHideUI HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnDocWindowActivate(fActivate Integer)
HResultbegin
Result = E_NOTIMPLend function TWebBrowserOnFrameWindowActivate(fActivate
Integer) HResultbegin
Result = E_NOTIMPL PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
107108109110
111112113114115
116
117118119120121122123
124125126127128129130131132133134135
136137138139140141142143144145146147148149150151
end function TWebBrowserResizeBorder(var prcBorder tagRECT
const pUIWindow IOleInPlaceUIWindow fRameWindowInteger) HResult
beginResult = E_NOTIMPL
end function TWebBrowserShowContextMenu(dwID UINT ppt
PtagPOINTconst pcmdtReserved IInterface const pdispReserved
IDispatch) HResultbegin
Result = E_NOTIMPLend function TWebBrowserShowUI(dwID UINT
const pActiveObject IOleInPlaceActiveObjectconst pCommandTarget IOleCommandTarget const pFrame
IOleInPlaceFrameconst pDoc IOleInPlaceUIWindow) HResult
beginResult = E_NOTIMPL
end function TWebBrowserTranslateAccelerator(var lpmsg tagMSG
var pguidCmdGroup TGUID nCmdID UINT) HResultbegin
Result = E_NOTIMPLend function TWebBrowserTranslateUrl(dwTranslate UINT
pchURLIn PWideCharout ppchURLOut PWideChar) HResult
beginResult = E_NOTIMPL
end function TWebBrowserUpdateUI HResultbegin
Result = E_NOTIMPLend TApplicationWrapper function TApplicationWrapperGetApplication TApplicationbegin
Result = FormsApplicationend
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
Yukarıdaki kodda JavaScriptrsquoin ulaşmasını istediğimiz sınıfın TApplicationWrapper olduğunuTWebBrowserrsquoın GetExternal metodunda soumlyluumlyoruz Bu soumlylem bize JavaScript iccedilindeTApplicationWrapper sınıfının tuumlm public propertyrsquolerine ve metodlarına erişim hakkısağlayacaktır Artık JavaScript iccedilinde TApplicationWrapper sınıfını istediğimiz gibikullanabileceğiz Ancak sizin de goumlzlemlediğiniz gibi TAutoObjectDispatch isimli bir başkasınıf da mevcut GetExternal metodunun iccedilinde Bu sınıf Delphi sınıflarından değildir Bu vebenzer sınıfların tanımlandığı dosyayı da indirebilmeniz iccedilin makalenin en sonunaekleyeceğim
Bu sınıfın var olmasının nedeni IDispatch arabirimini destekleyen bir yapıya sahip olmamızıngerekliliğidir Hatırlarsanız bir kaccedil paragraf oumlnce ObjComAutopas dosyası iccedilindekiTObjectDispatch isimli sınıfın IDispatch arabirimini bizim iccedilin implemente ettiğini soumlylemiştikJavaScript dış duumlnyadaki(oumlrneğimizde Delphi) ortamlara erişim sağlayacağı zaman externalsoumlz dizimini kullanır Oumlrneğin externalCaption = lsquoSelamrsquo gibi external direktifi ileerişeceği nesnenin Caption isimli bir propertyrsquosinin olup olmadığının kontroluumlnuumln yapılmasıgerekir Yada externalShowMessage(lsquoSelamrsquo) ccedilağrısında olduğu gibi bir metod ccedilağrımınınDelphi tarafında bulunabiliyor olması gerekir Gerek metod gerekse de property ccedilağrımlarınınbulunamaması bir hata ile sonuccedillanacaktır
TWebBrowserrsquoın GetExternal metoduna parametre olarak geccediltiğimiz TApplicationWrapperisimli sınıfın kodlarının iccedilinde TObjectDispatchrsquoin metod ve property aramak iccedilin gerekli olanmetodlarının yazılması gerekmektedir Bu metodlar yazılsın ki JavaScript tarafında ccedilağrımıyapılan property yada metodların Delphi tarafında karşılıkları bulunabilsin ve işletilebilsinBunun iccedilin TObjectDispatch sınıfından tuumlreyen ve bu karmaşık ccedilağrımları bizden gizleyen birbaşka unit daha var Daha oumlnce dediğim gibi o unitrsquoi de sizinle paylaşacağım
Bu noktaya kadar oumlzetlememiz gerekirse eğer Delphirsquoden JavaScriptrsquoe ulaşmak ve gerek sınıfgerekse de herhangi bir metodu ccedilalıştırmak bizim iccedilin son derece kolay olmuştu AncakJavaScriptrsquoin Delphi sınıflarına erişmesi bir o kadar da zor goumlruumlnduuml Aslında kodu indiripincelediğinizde pek de zor olmadığını goumlreceksiniz lacirckin COM programlamanın karmaşıkyapısından muumltevellit anlatabilmek ve anlayabilmek haliyle biraz zor oluyor
Son kod oumlrneğimizi de verip makalemizi burada neticelendirelim
152153154155156157158159160161
function TApplicationWrapperGetCaption stringbegin
Result = frmJavaScriptCaptionend procedure TApplicationWrapperSetCaption(S string)begin
frmJavaScriptCaption = Send
010203
constJScriptShowMessage =
function ShowMessage(Message) + Enter
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
2 Comments
sadettinpolat on Haziran 2nd 2009 tugrul hocam hizina yetismek mumkun degil
biz bi makaleyi hazmedemeden sen bir digerini yayinliyorsun bu
Bu oumlrneğimizdeki tek fark JScriptShowMessage sabitinin iccedilinde externalCaption atamasınınyapılmasıdır Bu atama ile TWebBrowser nesnemiz kendi uumlzerinde tanımladığımızGetExternal metodunu ccedilalıştıracak boumlylece TApplicationWrapper sınıfına erişebilecek veformumuzun caption bilgisi guumlncellenecektir
Oumlrnek uygulamamızı buradan indirebilirsiniz
Not Oumlrneğimiz Delphi 2009 ile geliştirilmiştir
Saygılar sevgiler
[Translate]
040506
07080910111213141516
17
+ + Enter +
alert(Message) + Enter +externalCaption = + 39 + Selam
Delphi nasılsın ben JavaScriptltimgsrc=httpwwwtugrulhelvacicomwp-includesimagessmiliesicon_winkgif alt=) class=wp-smileygt +39 + + Enter +
procedure TfrmJavaScriptButton2Click(Sender TObject)var
Doc IHTMLDocument2Win IHTMLWindow2
beginDoc = wBrowserDocument as IHTMLDocument2Win = DocparentWindowWinexecScript(ShowMessage( + 39+ TimeToStr(Time) + 39
+ ) JavaScript)end
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
teknikle biz google mapse programimiz icinden takla bile attiririz
valla tesekkurlerhellip
Tuğrul HELVACI on Haziran 2nd 2009 Rica ederim uumlstadım vazifemiz Google Maps konusunda
haklısın yakın bir zamanda onunla ilgili de makale yazmayıduumlşuumlnuumlyordum O yuumlzden JavaScript Delphi entegrasyonuna
girmiştim
Senden de bir şey kaccedilmıyor maaşallah
Name (required)
Mail (required)
Website
Share your comment
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom
Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI
Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk
Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI
Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet
Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI
Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben
Teşekkuumlrler ) by Tuğrul HELVACI
Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading
Interface Nedir Nerelerde ve Neden Kullanırız
Derinlemesine Threading(3)
SQLrsquode Benzerlik Algoritmalarıhellip
Full Text Searchinghellip
Delphi 2010 (Weaver) ve TValue
Derinlemesine Threading(2)
LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM
Delphi Tuumlrkiye Forum
Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK
MFatih KUumlCcedilUumlKKELEPCcedilE
Memik YANIK Kişisel
Memik YANIKrsquoın Guumlnluumlğuuml
Nick Hodges
Sinan BARAN
Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl
PDFmyURLcom