TWebBrowser ile ilgili EOleException hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

TWebBrowser ile ilgili EOleException hatası

Mesaj gönderen name »

Merhaba
Neredeyse 1 tam gündür uğraştığım ancak çözemediğim bir sorunumu yazmak istiyorum. Cevap verecek arkadaşlara şimdiden teşekkürler.

Basit 2 satırlık bir kod var. Kod ile ClipBoard'da bulunan içeriği, RunTime oluşturduğum WebBrowser nesnesine yapıştırıyorum. Kod bloğu aşağıda İlk verdiğim kod bloğunda problem yok. Ancak ikinci verdiğim kod bloğu paste satırında "EOleException : Belirtilmeyen Hata" hatası veriyor. İkinci kod bloğundaki değişiklik görüldüğü gibi basit. Bende mi sorun var :)

Bu kod bloğu çalışıyor.

Kod: Tümünü seç

  if SaveDialog1.Execute then
    begin
      WebBrowser1.OleObject.document.selection.createRange().execCommand('Paste');
      sHtml.Add(WebBrowser1.OleObject.document.body.innerHTML);
      sHtml.SaveToFile(SaveDialog.FileName);
    end;
Bu kod bloğu hata veriyor.

Kod: Tümünü seç

  //if SaveDialog1.Execute then
    //begin
      WebBrowser1.OleObject.document.selection.createRange().execCommand('Paste');
      sHtml.Add(WebBrowser1.OleObject.document.body.innerHTML);
      sHtml.SaveToFile('C:\deneme.htm');
    //end;
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

debug ettiginizde tam olarak hangi satirda hata veriyor?

sHtml.SaveToFile('C:\deneme.htm'); Bu satir mi?
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

İlk mesajda belirttiğim gibi aşağıdaki satırda hata veriyor. Sizin belirttiğiniz satır süs :)

Kod: Tümünü seç

  WebBrowser1.OleObject.document.selection.createRange().execCommand('Paste');
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Evet gercekten cok ilginc, yanlis anlamadiysam eger if SaveDialog.... kismini devre disi birakinca kodunuz hata veriyor. Peki bunlarn disinda tanimladiginiz nesneler, yazdiginiz kodlar vs. nedir yazabilirmisiniz cunku alakasiz bir hata.

Umarim yanlis anlamamisimdir,

Kolay gelsin.
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Merhaba

Öncelikle ilginiz için teşekkürler. Kodlar hazırladığım uygulamadan alıntıdır. Aşağıda çok basit bir uygulama hazırladım. Eğer sizde denerseniz hatayı görebilirsiniz.

Yeni proje oluşturup form üzerine sadece bir Button ve SaveDialog eklemeniz yeterli. Aşağıdaki kodu Button'un OnClick olayına ekleyin. Kod bloğunun çalıştığını göreceksiniz. Daha sonra sadece if bloğunu kaldırıp tekrar deneyin. Hata aldığınızı göreceksiniz.

Nedense böyle ilginç durumlarda hep beni bulur :).

Kod: Tümünü seç

Uses SHDocVw, Classes;

procedure TForm1.Button1Click(Sender: TObject);
var
  WebBrowser1: TWebBrowser;
  sHtml:TStringList;
begin
  WebBrowser1:=TWebBrowser.Create(Form1);
  WebBrowser1.Navigate('about:blank');
  sHtml:=TStringList.Create;
  try
    if SaveDialog1.Execute then
      begin
        WebBrowser1.OleObject.document.selection.createRange().execCommand('Paste');
        sHtml.Add(WebBrowser1.OleObject.document.body.innerHTML);
        sHtml.SaveToFile(SaveDialog1.FileName);
      end;
  finally
    WebBrowser1.free;
    sHtml.free;
  end;
end;


Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bir arama yaparken karşılaştım bu başlığa. Zaman aşımı olmuş belki de çözmüşsündür ancak çözmüşseniz de bu başlığı görenler için bir çözüm yazmalıydınız. Aksi ise sorun yok, yazıyorum..

Kod: Tümünü seç

Uses SHDocVw;

procedure TForm1.Button1Click(Sender: TObject);
var
  WebBrowser1: TWebBrowser;
  sHtml:TStringList;
begin
  WebBrowser1:=TWebBrowser.Create(Form1);
  // Bunu eklemezsen navigasyon yapmaz...
  WebBrowser1.ParentWindow := Form1.Handle;
  WebBrowser1.Navigate('about:blank');
  // Bunu eklemezsen navigasyonu beklemez...
  While WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
  sHtml:=TStringList.Create;
  // Bunu eklemezsen dosya adını bilemez...
  SaveDialog1.FileName := 'C:\Deneme.TXT';
  try
      //if SaveDialog1.Execute then
      begin
        WebBrowser1.OleObject.document.selection.createRange().execCommand('Paste');
        sHtml.Add(WebBrowser1.OleObject.document.body.innerHTML);
        sHtml.SaveToFile(SaveDialog1.FileName);
      end;
  finally
    WebBrowser1.free;
    sHtml.free;
  end;
end;
Resim
Resim ....Resim
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Merhaba

Cevabınız için teşekkürler Muharrem bey. Amacım bu kodları kullanarak rtf>html çevrimi yapabilmek idi. Çok sayıdaki belgeyi çevirmem gerektiği için SaveDialog kullanamazdım. SaveDialog kullanmayıncada ilk mesajda belirttiğim hatayı alıyordum. Sizin düzeltme kodlarınızda yer alan aşağıdaki satır problemi çözdü. Navigasyon tamamen bitmediği için create edilmemiş bileşene erişilmek istendiğinde hata veriyordu yani.

Kod: Tümünü seç

While WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
Yapamayınca başka bir yöntem ile halletmiştim. Yinede bilgilendirmeniz için teşekkürler.
Cevapla