Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

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: (Select All)
<?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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi Yeni Sürümlerde Fonksiyon Tanımlama Hayati 4 239 30-09-2019, Saat: 10:05
Son Yorum: Fesih ARSLAN
  Mouse click quiet1day 1 340 13-05-2019, Saat: 15:13
Son Yorum: Tuğrul HELVACI
  Delphi içerisinden SQL çalıştırma problemi (Heterogeneous queries hatası) adelphiforumz 4 581 20-03-2019, Saat: 20:25
Son Yorum: adelphiforumz
  DBGrid Click Sorunu Emrah Karagöz 5 818 02-01-2019, Saat: 17:48
Son Yorum: Emrah Karagöz
  JSON Bilgi Talebi, RAD 10 Seattle Yeni JSON Özellikleri Hakkında eroniko 4 953 13-10-2018, Saat: 21:59
Son Yorum: eroniko



Konuyu Okuyanlar: 1 Ziyaretçi