- Bir de DNS kayıtlarında değişiklik olmuşsa Başlat / Çalıştır 'dan
Kod: Tümünü seç
IPConfig /flushdns
Kod: Tümünü seç
IPConfig /flushdns
mrmarman yazdı:
- Burada arka fonda çalışan bir WebBrowser var. Özel bir tane değil, forumdaki yazılarımdan da hatırlayacak olanlar vadır, sürekli Delphi'nin standart bileşenlerini kullanmaktan yana tercih kullanıyorum. Böylece geriye dönük uyum elde ediyorum. Yani kısaca TWebBrowser kullanılıyor.
- Indy'ye nazaran TWebBrowser'da iki türlü engelle karşılaştık.
2. Sorgu aşamasında kullanılan Java Script fonksiyonu çalıştırıldığında TWebBrowser'in readystate'inin daha sorgu sürüyorken dahi READYSTATE_COMPLETE halinde olması. Bu arada ekleyim, ne olursa olsun TWebBrowser.Busy durumu da hep TRUE halde kalıyor. Aslında bunun bir bug olduğunu değerlendiriyorum. İşlem yapılıyorken state değişikliği beklerdim.
- Arama işlemlerinde il/ilçe seçiminde bekleme yaşanmasını engellemek için Türkiye'nin İl ve İlçe kodlarını bir INI dosyasına yazdırdım. Bunun için küçük bir döngü sayesinde tüm illeri aynı sitede sorgulayarak klasik WEB HTML PARSE tekniği ile elde ettik.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,mshtml, StdCtrls, OleCtrls, SHDocVw, ExtCtrls,ActiveX;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Panel1: TPanel;
Button1: TButton;
Edit1: TEdit;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure IterateFrames(const AWB: IWebBrowser2);
var
Doc: IHTMLDocument2;
Container: IOleContainer;
Enumerator: ActiveX.IEnumUnknown;
Unknown: IUnknown;
Browser: IWebBrowser2;
Fetched: Longint;
begin
if (Assigned(AWB.Document))
and (Supports(AWB.Document, IHTMLDocument2, Doc))
then begin
if (Supports(Doc, IOleContainer, Container))
and (Container.EnumObjects(OLECONTF_EMBEDDINGS, Enumerator) = S_OK)
then begin
while Enumerator.Next(1, Unknown, @Fetched) = S_OK do
if (Supports(Unknown, IWebBrowser2, Browser))
then begin
showmessage(doc.body.outerhtml);
IterateFrames(browser);
end;
end;
end;
end;
procedure WBLocateHighlight(WB: TWebBrowser; Text: string) ;
const
prefix = '<span style="color:white; background-color: red;">';
suffix = '</span>';
var
tr: IHTMLTxtRange;
begin
if Assigned(WB.Document) then
begin
tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
while tr.findText(Text, 1, 0) do
begin
tr.pasteHTML(prefix + tr.htmlText + suffix) ;
tr.scrollIntoView(True) ;
end;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
webbrowser1.Navigate('http://www.google.com.tr/');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
WBLocateHighlight(WebBrowser1,Edit1.Text) ;
IterateFrames(WebBrowser1.DefaultInterface);
end;
end.
Kod: Tümünü seç
procedure WBLocateHighlight(WB: TWebBrowser; Text: string) ;
const
prefix = '<span style="color:white; background-color: red;">';
suffix = '</span>';
var
tr : Variant; // IHTMLTxtRange;
i : Integer;
begin
if Assigned(WB.Document) then
begin
If WB.OleObject.Document.Frames.length > 0
then begin // Frame var demektir. Her Frame için ayrı ayrı değerlendirmek lazım...
For i := 0 to WB.OleObject.Document.Frames.length-1 do begin
tr := WB.OleObject.Document.Frames.item(i).Document.Body.createTextRange;
while tr.findText(Text, 1, 0) do
begin
tr.pasteHTML(prefix + tr.htmlText + suffix) ;
tr.scrollIntoView(True) ;
end;
end;
end else begin // Frame yoksa ana body işleme alınır...
tr := ((wb.Document AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange;
while tr.findText(Text, 1, 0) do
begin
tr.pasteHTML(prefix + tr.htmlText + suffix) ;
tr.scrollIntoView(True) ;
end;
end;
end;
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
WBLocateHighlight(WebBrowser1, Edit1.Text) ;
end;
@Muharrem hocam burada bahsedilen 2. sorunu halletmek için nasıl bir yol izlememizi tavsiye edersiniz...mrmarman yazdı: - Indy'ye nazaran TWebBrowser'da iki türlü engelle karşılaştık.
1. Navigasyon yapıldığında, ekranın tümüyle yüklenmesini beklemek için TWebBrowser'in readystate durumunu ele alarak bekleme yapmak gerekliliği.
2. Sorgu aşamasında kullanılan Java Script fonksiyonu çalıştırıldığında TWebBrowser'in readystate'inin daha sorgu sürüyorken dahi READYSTATE_COMPLETE halinde olması. Bu arada ekleyim, ne olursa olsun TWebBrowser.Busy durumu da hep TRUE halde kalıyor. Aslında bunun bir bug olduğunu değerlendiriyorum. İşlem yapılıyorken state değişikliği beklerdim.
dilekdurgun yazdı:mrmarman yazdı:
fakat bu kodu cok frame li bir sayfa da kullanmaya kalktigimda [ interface not supported] hatasi ile karsilasiyorum. forum daki butun parse ve html+parse ile ilgili olan tum sayfalari gezdim ama bir cozum bulamadim..Kod: Tümünü seç
unit Unit1; interface [/quote][/quote] "interface not supported" hatasıyla, çektiğimiz datayı EXCEL'e aktarırken yaşadık. Proğramı yapan oda arkadaşımla adım adım incelediğimizde ise EXCEL'e aktarma sorununu farkedince, OFİS programını sorunlu bilgisayardan kaldırıp, yeniden kurmaya karar verdik. Çünkü aynı proğram sadece benim bilgisayarımda sorun yaşıyor ve ben Pc de OfisXp varken, Ofis2007 kurdum, beğenmeyip kaldırdım ama çakışmalar oluştu, temizleyemedim. Sorun Ofis'in düzgün kurululmayışından/iki sürümünün kalıntılarının kalmasından kaynaklandı.