Merhaba.
- PDF gösterimini ADOBE firmasının ürünü ele aldığından bunun kısa yoldan mümkün olduğunu sanmıyorum.
-
Direkt indirmeyle ilgilenirsen ben çalıştığım kurum portalındaki Bordro bilgilerimi indirmek için kullandığım metodu anlatayım.
- Download işlemi sırasında yeni bir pencere açıyor ama LOGIN bilgilerim bu yeni pencerede olmadığından (
çünkü proje dışında sessionID/cookiler vs. 0'lanır) download işlemine geçemiyordum.
- Ben de ne yaptım, WebBrowser'in OnNewWindow eventine bir bypass kodu ekledim. Nasıl ?!
- Her download işlemi için yeni bir TWebBrowser nesnesi tanımladım. Tabi her tanımladığımı hatırlamak için Dinamik bir ARRAY içinde tuttum.
- FormClose edilirken download işleminin bittiğini varsayıp tümünü FREE ediyorum. MemoryLeak kırıntı vs. bırakmıyorum.
- Daha detaylı bir kontrol ile, atıyorum 5 dakikada bir işi biteni bulur free ederim ama attığım taş ürküttüğüm kurbağa hesabı yaparak buna gerek duymadım.
- Göreceğin üzere her WebBrowser ekranın sınırları dışında bulunduğundan görüntü kirliliği yaratmadığı gibi, aynı proje içinde olduğundan Session ve Cookie paylaşımı doğal oluştu. Çünkü her defasında OnNewWindow2 eventinde ppdisp üzerinden tüm iletişimi bu yeni create edilen WebBrowser'a transfer ediyoruz.
Kod: Tümünü seç
Var
SilinecekBrowser : Array of TWebBrowser;
procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
Var
i : Integer;
begin
i := High(SilinecekBrowser) - Low(SilinecekBrowser)+1;
if i <= 0 then i := 0;
SetLength( SilinecekBrowser, i+1 );
SilinecekBrowser[i] := TWebBrowser.Create(nil);
With SilinecekBrowser[i] do begin
Width := 100;
Height := 100;
Left := -150;
Top := -150;
Visible := True;
ppDisp := DefaultInterface;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
i : Integer;
begin
if ( High(SilinecekBrowser) - Low(SilinecekBrowser) +1) > 0 then
for i := Low(SilinecekBrowser) to High(SilinecekBrowser) do begin
SilinecekBrowser[i].Free;
end;
end;
Dene ve sonucu bildir.