Delphi Chromiumda Daha İstikrarlı Bir Readystate ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
nevzataksoy
Üye
Mesajlar: 7
Kayıt: 20 Ara 2013 03:45

Delphi Chromiumda Daha İstikrarlı Bir Readystate ?

Mesaj gönderen nevzataksoy »

Merhabalar,

Webbrowser İşlemleri İçin Chromium Embedded Framework Kullanıyorum. Browserdaki Sayfanın Tamamen Açılıp Açılmadığını Kontrol Etmek İstiyorum.Sayfanın Açılıp Açılmadığını Webbrowser Componentinde Aşağıdaki Kod İle Kontrol Edebiliyorduk;

Kod: Tümünü seç

  While WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;
Readystate Özelliği Chromium da Yok Yada Henüz Ben Keşfedemedim. Bunun Yerine Kendim Bi Fonksiyon Oluşturdum;

Kod: Tümünü seç

// Fonksiyon
function isLoadEnd(veri1, veri2: string; Chromium:TChromium): Boolean;
  var
    havuzT : WideString;
    bDurum : Boolean;
begin
  bDurum := False;
  while bDurum<>true do
    begin
      havuzT := Chromium.Browser.GetMainFrame.GetSource;
      if (AnsiPos(veri1, havuzT)<>0) AND (AnsiPos(veri2, havuzT)<>0) then
        begin
           bDurum := True;
        end;
        Application.ProcessMessages;

    end;
  Result := bDurum;
end;

// Kullanımı
procedure TForm1.actGoToExecute(Sender: TObject);
  var
    source : ustring;
begin
    if crm.Browser <> nil then
    crm.Browser.GetMainFrame.loadUrl(urlText.Text);
    if isLoadEnd('kaynak koddaki veri 1','kaynak koddaki veri 2',crm) then
    ShowMessage('Sayfa Açıldı');
end;
Bu Kullanımda Açılan Sayfanın Kaynak Kodundan o Sayfaya Özel 2 Tane Değeri Kontrol Ettiriyoruz. Eğer Bu Değerler Varsa Sayfa Açılmıştır Demektir.

Bunun Yerine Readystate Gibi Chromiumun Kendi Kodu Var mıdır?

İyi Çalışmalar...[/color]
ismailkocacan
Üye
Mesajlar: 88
Kayıt: 25 Eyl 2011 06:11
Konum: İstanbul
İletişim:

Re: Delphi Chromiumda Daha İstikrarlı Bir Readystate ?

Mesaj gönderen ismailkocacan »

global bir boolean değişken tanımlayıp,
browser'ın OnDocumentComplete eventinde bu değişkenin değerini set edip,
bu global değişkeni kontrol edebilirsiniz. :idea:
nevzataksoy
Üye
Mesajlar: 7
Kayıt: 20 Ara 2013 03:45

Re: Delphi Chromiumda Daha İstikrarlı Bir Readystate ?

Mesaj gönderen nevzataksoy »

Chromium Eventlerinde Dediğiniz OnDocumentComplete Yok Onun Yerine OnLoadStart Ve OnLoadEnd Var. Bende Bu Özelliği Kullandım Ve Aşağıdaki Gibi Bir Kod Yazdım;

Kod: Tümünü seç

// Global Değişken Tanımlıyorum
var
   cLoading : Boolean;


// onLoadEnd Eventinde cLoading := False; Kodunu Ekledim
procedure TForm1.crmLoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
  if (browser <> nil) and (browser.GetWindowHandle = crm.BrowserHandle) and ((frame = nil) or (frame.IsMain)) then
    cLoading := False;
end;


// Her url Açtığımda cLoadingi kontrol ediyorum.
if crm.Browser <> nil then
  crm.Browser.GetMainFrame.loadUrl(urlText.Text);
  cLoading := True;

while cLoading<>False do begin
   Application.ProcessMessages;
end;
Şimdilik Bu Kodu Yaptım ve İşimi Görüyor Ama Başka Türlü Bir Öneriniz Varsa Buraya Ekleyiniz...

İyi Çalışmalar...[/color]
Cevapla