Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
WebBrowserda yeni eklenen nesnenin Click eventini çalıştırma
#1
Selamlar

DocumentComplete içerisinde bir table'a yeni bir kolon eklemek ve kolon içeriğinede bir button eklemek istiyorum
Ekleme sırasında butona bir deger atanacak ve butona tıklandığında ise bu değere göre yeni delphi tarafında bir form açılıp bazı bilgiler gösterilecek.

bazı örneklere bakarak aşağıdaki gibi butona basılınca script ile işlem yapabildim.
Fakat script değilde Browserın "WBBeforeNavigate" özelliğinden yararlanarak basılan butonu bulmaya kalkınca event hiç bir şekilde tetiklenmiyor
Acaba bu işi nasıl çözebilirim.

Teşekkürler


procedure TfrmWeb.WBDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
 ovTable, ovTableDty: OleVariant;
 I, R, C : Integer;
begin
   Table := nil;
   Table := fn_HtmlFindTable( WebBrowser, 'TableX');
   ovTable := Table;
   if Table <> nil then
   begin
       for R := 1 to (ovTable.Rows.Length - 1) do
       begin
           ovTable.Rows.Item ( R ).InsertCell(10);
           ovTable.Rows.Item ( R ).Cells.Item(10).InnerHTML := '<TD><SPAN id=Button_' + IntToStr ( R ) + '</SPAN>'+
                                                                           '<input type="button" onmouseover="myFunction()" ' +
                                                                                 ' onclick="alert(' + #39 + 'clicked' + #39 + ')">'+
                                                                           '<script>'+
                                                                               'function myFunction() {document.getElementById("Button_' + XXXXXXXX + '").click();}'+
                                                                           '</script>'+
                                                                        '</TD>';
       end;
   end;
end;

Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
Çalışmama sebebi duruma göre değişir. Referans vermediğiniz için test edemeyiz belki ama ;

Aşağıda DelphiCan sitesine navigate edip, her tablo ilk stünuna bir ekleme yaparak buraya button kodu inject eden bir örnek yazıyorum. Site üzerinde eklenen butonlara basınca da görev yaptığını göreceksiniz.

Örnekte göreceğiniz gibi buton tıklamasını talebinizdeki gibi OnDocumentComplete'e koydum ki, tıklama otomatik gerçekleşsin. Bildiğiniz üzere bu kodu butona değil de direkt OnDocumentComplete de veya BitBtn değil de bir procedure / function olarak yazabilirsiniz ama tetiklendiği zamanı yakalayın diye bunu ayırdım. Gerektiğinde bir While döngüsü ile sayfanın tamamlandığını bekleyip öyle çalıştırırsanız sorun çözülecektir diye değerlendiriyorum. TABİ SORUYU DOĞRU ALGILAYABİLMİŞ İSEM..   Huh


Sorununuz aslında kod ekleyememe değil de henüz tablolar olgunlaşmadan eklemeye çalışmak olabilir ( dinamik web tabloları OnDocumentComplete'den biraz daha geç tamamlanır ).

procedure TForm1.BitBtn_DelphiCanClick(Sender: TObject);
begin
 WebBrowser1.Navigate( 'http://www.delphican.com/index.php');
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
begin
 BitBtn_ButtonSutunEkleClick( BitBtn_ButtonSutunEkle );
end;

procedure TForm1.BitBtn_ButtonSutunEkleClick(Sender: TObject);
var
 ovTable,
 ovTableDty : OleVariant;
 j, R : Integer;
begin
 for j := 1 to WebBrowser1.OleObject.Document.all.tags('table').length-1 do
 begin
   ovTable   := WebBrowser1.OleObject.Document.all.tags('table').item(j);
   for R := 1 to (ovTable.Rows.Length - 1) do
   begin
     ovTable.Rows.Item ( R ).InsertCell(0);
     ovTable.Rows.Item ( R ).Cells.Item(0).InnerHTML := '<TD><SPAN id=Button_' + IntToStr ( R ) + '</SPAN>'+
                                                       '<input type="button" value="TIKLAYINIZ" onmouseover="myFunction()" ' +
                                                       ' onclick="alert(' + #39 + 'Butona Tıklandı!' + #39 + ')">'+
                                                       '<script>'+
                                                       'function myFunction() {document.getElementById("Button_' + 'ARMAN' + '").click();}'+
                                                       '</script>'+
                                                       '</TD>';
   end;
 end;
end;

Ekran_Al_nt_s_Delphi_Can.png
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
Mrmarman hocam emeğine sağlık, sizi tekrar görmek ne güzel . Pazar günüme ayrıca bir keyif kattıSmile)))
Cevapla
#4
Mrmarman hocam teşekkürler,
Bir kaç gündür projeden uzak kalmıştım, hafta sonu yeniden uğraşıyorum,
Sormak istediğim OnClick işleminde benim delphi içerisinde tanımladığım bir procedure'ü nasıl çağırabiliirm.
Click yapılan satırı bulup procedure parametre gönderip içinde bazı şeyler yapmaya çalışıyorum.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#5
Merhaba.

WEB programcılığı hakkında yeterli bilgiye sahip olduğunuzu değerlendirerek :  Idea
Bir PHP hazırlayın, dilediğiniz ekstra fonksiyonları barındırsın. Bunu bir WEB server ortamına yerleştirin. 
VEYA  Delphi ile yazacağınız bir Win32 uygulamasını bir WEBServer haline dönüştürün, cevap direkt projenizden dönsün. (Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

WebBrowser ile navigate işleminizi yaptığınız sitenin HTML kodlarına bu başlıktaki gibi INJECT işlemini yaparken 
(a) Daha önce hazırladığını fonksiyonları barındıran PHP'yi gerekli parametreler ile değerlendirin.
(b) WebServer olarak çalışan EXE projenizin olduğu IP adresini referans alacak parametrleri barındıran şekilde değerlendirin.

şeklinde bir çözüm işinizi fazlasıyla görecek, baş vurduğunuz HTML sayfanın içeriği kullanıcılarınızın kendi verileriyle zenginleşecektir.

Başarılar.

Örnek :
procedure TForm1.BitBtn_DelphiCanClick(Sender: TObject);
var
 ovTable,
 ovTableDty : OleVariant;
 j, R : Integer;
begin
 WebBrowser1.Navigate( 'http://www.delphican.com/index.php');
 while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do begin
   Sleep(10);
   Application.ProcessMessages;
 end;

 j :=1;
 //for j := 1 to WebBrowser1.OleObject.Document.all.tags('table').length-1 do
 begin
   ovTable   := WebBrowser1.OleObject.Document.all.tags('table').item(j);
   r := 1;
   //for R := 1 to (ovTable.Rows.Length - 1) do
   begin
     ovTable.Rows.Item ( R ).InsertCell(0);
     ovTable.Rows.Item ( R ).Cells.Item(0).InnerHTML := '<iframe id="frame" src="http://armanlab.com/delphican/ip.php" scrolling="no"></iframe>';
   end;
 end;
end;

PHP Dosyası 
PHP Kod:
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
 
   $ip $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR'])) {
 
   $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
 
   $ip $_SERVER['REMOTE_ADDR'];
}
 
 echo "IP Adresiniz :" $ip "<br />";
?>

rwbgeomewn1cel7aew5t.png
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Lookupcombobox ile yeni kayıt ekleme canbir 2 83 21-06-2018, Saat: 10:01
Son Yorum: adelphiforumz
  Yeni nesil ÖKC entegrasyonu mcuyan 17 986 20-06-2018, Saat: 17:33
Son Yorum: mcuyan
  MAC cihazlarda çalıştırma andromeda 2 140 15-04-2018, Saat: 10:12
Son Yorum: andromeda
  Resim üzerindeki nesnenin alanını hesaplama beklentili 4 257 31-03-2018, Saat: 16:23
Son Yorum: beklentili
  RAD Studio Tokyo 10.2.3 yeni güncelleme gjamesbond 10 733 15-03-2018, Saat: 10:42
Son Yorum: nguzeller



Konuyu Okuyanlar: 1 Ziyaretçi