Delphi Programming There are only 10 types of people in the world: Those who understand binary, and those who don’t. Search Keywords Home TObject.Create Hakkında Ziyaretçi Defteri Delphi Posted by Tuğrul HELVACI - Haziran 1, 2009 Comments 2 Delphi & JavaScript Kardeşliği Son zamanlarda bir raporlama aracının Delphi’ye adaptasyonu ile uğraşıyorum. Bu aracın adı Fusion Charts. Son derece şık ve yetenekli bir araç. Arka planında Flash animasyonları kullanan, kendisine veriyi XML üzerinden alabilen , HTML & JavaScript kullanarak flash nesnelerinin erişimine müsaade eden bir raporlama aracı. Bu hali ile Fusion Charts aracı; Delphi üzerinde TWebBrowser nesnesi vasıtası ile rahatlıkla kullanılabiliyor. Yeterki uygulamanızın çalıştığı klasörde ihtiyaç duyduğu dosyalar olsun. Benim ileride yazacağım Fusion Charts & Delphi entegrasyonunda XML, HTML ve JavaScript dosyalarına gerek olmayacak. Ama bu raporlama aracı üzerinde çalışırken, JavaScript’e amiyane tabir ile biraz bulaşmak durumunda kaldım. Meraklı bir mizacım olduğu için, Delphi üzerinde TWebBrowser nesnesi vasıtası ile bir JavaScript sınıfını yada metodunu kullanıp kullanamayacağımı araştırdım. Ve gördüm ki, bizim sevgili Delphi’mizin yapamayacağı şey yok Delphi üzerinden TWebBrowser nesnesi vasıtası ile(daha doğru bir ifade ile COM vasıtası ile) JavaScript’e ulaşmak ve JavaScript kodları çalıştırmak mümkün. Öncelikle söylemek isterim ki; JavaScript konusunda pek bilgili Plugin WP FlashTime by horoscop 2009.org requires Flash Player 8 or better currency converter calculator.Plugin 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 CreateMutex CreateProcess CreateRemoteThread CreateSemaphore CreateToolHelp32SnapShot CreateWaitableTimer DeleteCriticalSection delphi 2010 DTS EnterCriticalSection Contact Me | Subscribe PDFmyURL.com
15
Embed
Delphi & JavaScript Kardeşliği | Delphi Programming · 2010. 7. 1. · Delphi Programming There are only 10 types of people in the world: Those who understand binary, and those
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
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
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
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)
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
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
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ığı
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 +
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
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
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 +
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
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
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)
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
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
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ığı
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 +
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
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
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 +
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)
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
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
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ığı
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 +
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
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
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 +
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
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
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ığı
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 +
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
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
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 +
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
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ığı
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 +
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
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
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 +
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ığı
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 +
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
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
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 +
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
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
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 +
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
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 +
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 +
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 +
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 +
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 +
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 +