isapi dll twebbrowser ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
azur
Üye
Mesajlar: 7
Kayıt: 05 Eki 2010 07:59

isapi dll twebbrowser ?

Mesaj gönderen azur »

merhaba arkadaşlar ben isapi ile bir dll üzerinden twebbrowser oluşturup sonucu response etmek istiyorum ama bir türlü çalıştıramadım.
webdede bulamadım kimse uğraşmamış heralde.bu konuda bilgisi olan arkadaşlar varsa help please...
twm isimli bir webmodule create edip
TWM = class(TWebModule)

deneme isimli bir action tanımlayp
/deneme

dll yi derleyip webserverda script içine kopyalayıp
<LI><A HREF="./scripts/deneme.dll/deneme">deneme</A></LI>
htmlden çağrıyorum.normalde diğer bütün işlemler çalışıyor.metin yada text bastırıyorum.yada başka bir şey ama.
webbrowser ile okuyup bir yeri html kodu istediğimde çalışmıyor.

Kod: Tümünü seç


procedure TWM.WMdenemeAction(Sender: TObject; Request: TWebRequest;
  Response: TWebResponse; var Handled: Boolean);
var
 WebB: TWebBrowser;
 document: variant;
  s: string;
begin
    WebB :=TWebBrowser.Create(self);
   WebB.Navigate('http://localhost/');
 
   repeat
     if WebB.ReadyState = READYSTATE_COMPLETE then break;
     sleep(10);
   until false;
  
  document := WebB.Document;
   s := Document.Body.innerHTML;
  Response.Content := Format('<html><head><title>Html kodu</title></head><body>%s</body></html>', [S]);
  WebB.Free;
end;

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

Re: isapi dll twebbrowser ?

Mesaj gönderen mrmarman »

WebBrowser görüntülenebileceği bir pencere ister. Sebebi bu. Create ederken (self) demişsiniz ya, bu self görüntülenebilen bir form üzerinde olmalı. Siz bu WebBrowser'i bir panelin arkasına gizleyebilirsiniz buna müsade var. :idea:
Resim
Resim ....Resim
azur
Üye
Mesajlar: 7
Kayıt: 05 Eki 2010 07:59

Re: isapi dll twebbrowser ?

Mesaj gönderen azur »

@mrmarman
söylediğinizi daha önce denedim visible form oluşturup üstündede twebbrowser oluşturmayı.ama form oluşturmaya kalkınca program crash oluyor.çalışmıyor dediğiniz gibi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: isapi dll twebbrowser ?

Mesaj gönderen mrmarman »

Skin vs. mı kullanıyorsunuz da program crash oluyor anlamadım. DLL içinden form oluşturma imkanı vardır.
Sizin için bir örnek hazırladım.

Ana Proje sadece bir Edit kutusundan yani aranacak kelime girişinden ibaret. DLL çağrısı yapılıyor.
Ana Proje.rar
Ana Proje ( Kelime Girişi )
(174.98 KiB) 125 kere indirildi

Kod: Tümünü seç

Function Sorgula( Param:ShortString; VAR Sonuc : String):Boolean; stdcall;
External 'GoogleArama.dll';

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Sonuc : String;
begin
  if Sorgula( Edit1.Text, Sonuc )
    then ShowMessage(Sonuc)
    else ShowMEssage('Sonuç Yok');
  
end;
DLL Projesi ise parametre olarak gelen kelimeyi Google'dan arayıp, sonuçları parse ederek geriye döndüren ve bir form üzerinde WebBrowser barındıran DLL 'den oluşuyor.
DLL.rar
DLL Kaynak Kodu (Google Arama Yapan)
(187.03 KiB) 108 kere indirildi
Koddaki

Kod: Tümünü seç

    Form1.WebBrowser1.Navigate( Format(AraFormat, [ Param ]) );
    Form1.Left := - Form1.Width;
    Form1.Top  := - Form1.Height;
    Form1.Show;
kısmına dikkatinizi çekmek isterim.

Burada DLL içindeki form ekranda gösteriliyor, dolayısı ile WebBrowser da gösterimde. Ancak (-) değerler vererek ekran sınırlarının dışına taşıyarak kullanıcının bu formu ve içeriğini görmesini engellediğimiz gibi, herhangi bir sorun çıkarmadan sonuçları WebBrowser ile okuyabiliyor ve işleme alabiliyoruz.

Kod: Tümünü seç

uses
  ShareMem,
  Forms,
  SysUtils,
  Classes,
  SHDocVw,
  Dialogs,
  Unit1 in 'Units\Unit1.pas' {Form1};

{$R *.res}

  const
    AraFormat = 'http://www.google.com.tr/search?as_q=%s&hl=tr&num=100&btnG=Google''da Ara&as_epq=&as_oq=&as_eq=&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images';

  procedure GoogleParse( WebBrowser:TWebBrowser; Liste:TStringList );
    Type tLink = Record
      Baslik,
      URL,
      icerik : String;
    End;

    function TaglariTemizle(Gelen: string): string;
    var
      Gecici: string;
      Basla, Bitis: Integer;
    begin
      Gecici := Gelen;
      If Trim(Gelen) <> '' then
      begin
        Gecici := StringReplace( Gecici, '&nbsp;', '', [rfReplaceAll, rfIgnoreCase]);
        Gecici := StringReplace( Gecici, '&',  '', [rfReplaceAll, rfIgnoreCase]);

        Basla := Pos('<', Gecici);
        Bitis := Pos('>', Gecici);
        While (Basla > 0) and (Bitis > 0) and (Bitis > Basla) do
        begin
          Delete(Gecici, Basla, Bitis - Basla + 1);
          Basla := Pos('<', Gecici);
          Bitis := Pos('>', Gecici);
          Application.ProcessMessages;
        end; // While
      end; // If
      Result := Gecici;
    end;
  var
    Gelen,
    Link,
    Ara   : String;
    L     : tLink;
  begin
    Liste.Clear;
    Gelen := WebBrowser.OleObject.Document.Body.InnerHTML;
    Link := '<H3 class=';
    while ( Pos(Link, Gelen) > 0 ) do begin
      Delete(Gelen, 1, Pos(Link, Gelen) + Length(Link)-1 );

      Ara := 'href="';
      Delete(Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1 );
      l.URL := Copy(Gelen, 1, Pos('"', Gelen)-1);

      Ara := '>';
      Delete(Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1 );
      l.Baslik := TaglariTemizle( Copy(Gelen, 1, Pos('</H3>', Gelen)-1) );

      Ara := '</H3>';
      Delete(Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1 );
      l.icerik := TaglariTemizle( copy(Gelen, 1, Pos('<CITE>', Gelen)-1) );

      Liste.Add( Format('%s|%s|%s|', [l.Baslik, l.icerik, l.URL]) );
    end;
  end;

  Function Sorgula( Param:ShortString; VAR Sonuc : String):Boolean; StdCall;
  Var
    Liste : TStringList;
  begin
    if NOT Assigned(Form1) then
      Application.CreateForm( TForm1, Form1 );

    Form1.WebBrowser1.Navigate( Format(AraFormat, [ Param ]) );
    Form1.Left := - Form1.Width;
    Form1.Top  := - Form1.Height;
    Form1.Show;
    while Form1.WebBrowser1.ReadyState <> READYSTATE_COMPLETE
      do Application.ProcessMessages;
    Liste := TstringList.Create;
    GoogleParse( Form1.WebBrowser1, Liste );
    Sonuc := Liste.Text;
    Liste.Free;
    Result := Sonuc <> '';
    Form1.Free;
    Form1 := Nil;
  end;

  Exports
   Sorgula;
Resim
Resim ....Resim
azur
Üye
Mesajlar: 7
Kayıt: 05 Eki 2010 07:59

Re: isapi dll twebbrowser ?

Mesaj gönderen azur »

yok skin kullanmıyorum.isapi yapısındanmıdır anlamadım form create etmek istedimi memory taşması yapıp sonsuz döngüye giriyor.
projeye form ekleyip ek olarak yükledim.bakabilirsiniz.derlenen dll i iss in local directorysi içinde scripts e atıp.html yi de wwwroot a atıp.localhost olarak bağlanıp deneyebilirsiniz.yardımlarınız için teşekkür ederim.
Dosya ekleri
rem.rar
(198.08 KiB) 78 kere indirildi
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: isapi dll twebbrowser ?

Mesaj gönderen mrmarman »

IIS kurulu değil, deneme imkanım yok ancak Formu Show etmediğinizden olduğuna kanaatim var.

MainModule.PAS içindeki satrları aşağıdaki şekilde (örnekte verdiğimin aynısını yazıyorum) ekleyerek kullanmayı dener misiniz ?

Kod: Tümünü seç

    WebBr.Left := - WebBr.Width;
    WebBr.Top  := - WebBr.Height;
    WebBr.Show;  
    WebBr.WebBrowser1.Navigate('www.google.com');
Resim
Resim ....Resim
azur
Üye
Mesajlar: 7
Kayıt: 05 Eki 2010 07:59

Re: isapi dll twebbrowser ?

Mesaj gönderen azur »

sizin söylediğinizi de yaptım sonuç aynı.isapi ile dll yazarken form create ettirilemiyor heralde.
ama bu twebbrowser ın bir şekilde çalışması lazım.anlayamadım.

Kod: Tümünü seç

 ---------------------------
dllhost.exe - Uygulama Hatası
---------------------------
bilinmeyen yazılım uzantısı (0x0eedfade) özel durumu, 0x7c812aeb konumundaki uygulamada oluştu.

---------------------------
Tamam   İptal   
---------------------------


---------------------------
dllhost.exe - Uygulama Hatası
---------------------------
unknown software exception (0xc0000025) özel durumu, 0x7c93e36e konumundaki uygulamada oluştu.

Programı sonlandırmak için Tamam'a basın
---------------------------
Tamam   
---------------------------
azur
Üye
Mesajlar: 7
Kayıt: 05 Eki 2010 07:59

Re: isapi dll twebbrowser ?

Mesaj gönderen azur »

ne yaptıysam sonuç alamadım çalışmıyor.formu runtime create ediyorum hata almıyorum ama yine sonuç yok.

Kod: Tümünü seç

procedure TWM.WMdenemeAction(Sender: TObject; Request: TWebRequest;
  Response: TWebResponse; var Handled: Boolean);
var
  webfrm: TForm;
  WebB: TWebBrowser;
  document: variant;
  s: string;
begin
    webfrm := TForm.Create(Self);
    with webfrm do
    try
      Width := Screen.Width;
      Height := Screen.Height;
      Position := poScreenCenter;
      AlphaBlend := True;
      AlphaBlendValue := 0;
      WebB :=TWebBrowser.Create(webfrm);
      WebB.Left := Width;
      WebB.Top := Height;
      Show;
   
   WebB.Navigate('http://www.google.com');
   while (WebB.ReadyState <>  READYSTATE_COMPLETE) do Application.ProcessMessages;
   document := WebB.Document;
   s := document.Body.innerHTML;
   Response.Content := Format('<html><head><title>Html kodu</title></head><body>%s</body></html>', [S]);
  finally
    Free;
  end;
end;
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: isapi dll twebbrowser ?

Mesaj gönderen quadr »

isapi ile veriler web server tarafından yorumlanır.sizin create etmek istediğiniz form memory de create olur ama işletilmeye kalktımı işletilemez.twebbrowser eğerki show olup screen e nesneleri çizdirmek istiyorsa bu işi gerçekleştiremiyeceği için çalışmayacaktır.

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
Cevapla