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) 126 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, ' ', '', [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;