Webbrowser Kapanınca Form'da Kapansın

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen erdem55 »

Aşağıda vermiş olduğum web sayfasında "Oda Numarasını Guncelle" butonuna tıkladığımda normal web sayfasında olduğu gibi sayfayı kapatmaya çalışıyor. Buda Twebbrowser ın kapanmasına yol açıyor.
Yapmak istediğim butona tıkladıktan sonra işlemler bittiğinde normal web sayfasında olduğu gibi açmış olduğum formu kapatmak. Böylece web sayfasında olduğu gibi ana forma geri dönmüş olacağım. Yardımlarınız için teşekkür ederim.

Kod: Tümünü seç

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
	///
</title><link href="../css/bootstrap.min2.css" rel="stylesheet" /><link href="../css/font-awesome.min2.css" rel="stylesheet" /><link href="../css/sb-admin-2.css" rel="stylesheet" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Pragma" content="no-cache" /><meta name="description" /><meta name="keywords" /><meta http-equiv="keywords" /><meta name="robots" content="noindex,nofollow" /><meta http-equiv="X-UA-Compatible" content="IE=11" /><meta http-equiv="X-UA-Compatible" content="IE=10" /><meta http-equiv="X-UA-Compatible" content="IE=9" /><meta http-equiv="X-UA-Compatible" content="IE=8" />
    <script type="text/javascript" src="https://ff.kis.v2.scr.kaspersky-labs.com/11111111-1111-1111-1111-111111111111/main.js" charset="UTF-8"></script><script>
        $(window).load(function () {
            $().UItoTop({ easingType: 'easeOutQuart' });
            $('#stuck_container').tmStickUp({});
        });

        function sedeceSayi(evt) {
            evt = (evt) ? evt : window.event
            var charCode = (evt.which) ? evt.which : evt.keyCode
            if (charCode > 31 && (charCode < 48 || charCode > 57)) {
                return false
            }
            return true
        }
    </script>
    <script lang="javascript" type="text/javascript">
        function AppClose() {
            self.close();
            window.opener.location.reload();
        }
    </script>
    <script type="text/javascript">
        function alpha(e) {
            var k;
            document.all ? k = e.keyCode : k = e.which;
            return ((k > 64 && k < 91) || (k > 96 && k < 123) || k == 8 || k == 32 || k == 231 ||
                k == 305 || k == 287 || k == 246 || k == 351 || k == 252 || k == 199 || k == 304 || k == 208
                || k == 214 || k == 350 || k == 220
                );
        }
    </script>  
</head>
<body>
    <div class="container3">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-primary">
                    <div class="panel-heading">
                        <h3 class="panel-title">ODA NUMARASI DEĞİŞTİRME</h3>
                    </div>
                    <div class="panel-body">
                        <form name="form1" method="post" action="./odaduzenle.aspx?Id=111111-1111-1111-1111-111111111111" onsubmit="javascript:return WebForm_OnSubmit();" id="form1" role="form">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMzcwNTE5MDQzD2QWAgIDD2QWDgIFDw8WAh4EVGV4dAULMTIzODYwOTE4ODZkZAIJDw8WAh8AZWRkAg0PDxYCHwAFBkZBVMSwSGRkAhEPDxYCHwAFCUtPQ0FCSVlJS2RkAhUPDxYCHwAFAzQwNGRkAhwPDxYCHgdWaXNpYmxlaGRkAh4PDxYCHwFoZGRkFMKyhlUmvDSXewp0RG/+byKUWKJjingPrLWRRIly/DA=" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<script src="/WebResource.axd?d=_TUVu3GAz0L0yBlj9OEaJEgTKfNTMRJHKj4dwhNpbtni7DriGW5uHscWDB50BYb9hznr1bo668RWUd-d554tWzy6ix60tCE9_x2rbhOdKfg1&amp;t=636284192160000000" type="text/javascript"></script>


<script src="/WebResource.axd?d=nVn13JWJi1ibS7JugCD6TupZzObT5R_MEXATDHPC4UF9OM8xv3ac28LzkCM9O1Byn7t1fpJL7TmgBrzsnwHAf9iAeE-a-ysP_NEIHBCGpSE1&amp;t=636284192160000000" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script>

<div>

	<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="9E9593CD" />
</div>
                            <input type="hidden" name="AntiForgeryToken" id="AntiForgeryToken" />
                            <fieldset>
                                <div class="form-group">
                                    <span id="Label1" class="form-control" style="background-color:#E1E1E1;">T.C. Kimlik Numarası</span>
                                    <span id="lbltcno" class="form-control">11111111111</span>
                                </div>
                                <div class="form-group">
                                    <span id="Label2" class="form-control" style="background-color:#E1E1E1;">Geçerli Belge No</span>
                                    <span id="lblgecerlibelge" class="form-control"></span>
                                </div>
                                <div class="form-group">
                                    <span id="Label3" class="form-control" style="background-color:#E1E1E1;">Adı</span>
                                    <span id="lbladi" class="form-control">Kamil</span>
                                </div>
                                <div class="form-group">
                                    <span id="Label4" class="form-control" style="background-color:#E1E1E1;">Soyadı</span>
                                    <span id="lblsoyadi" class="form-control">Şenlik</span>
                                </div>
                                <div class="form-group">
                                    <span id="Label5" class="form-control" style="background-color:#E1E1E1;">Şuanki Odo Numarası</span>
                                    <span id="lblsuankioda" class="form-control">404</span>
                                </div>
                                <div class="form-group">
                                    <span id="Label11" class="form-control" style="background-color:#E1E1E1;">Yeni Odo Numarası</span>
                                    <input name="txtoda" type="text" maxlength="7" id="txtoda" class="form-control" onpaste="return false" placeholder="Yeni Oda Numarası" onKeyPress="return sedeceSayi(event)" /><span id="RequiredFieldValidator2" style="color:#CC3300;font-size:Larger;display:none;">*</span>
                                </div>
                                <div class="form-group">
                                    
                                    
                                </div>
                                <span id="lblbilgi" style="color:#CC3300;font-family:Arial Rounded MT Bold;font-size:Large;font-weight:bold;"></span>
                                <div id="ValidationSummary1" class="form-group" style="color:#CC3300;font-family:Arial Rounded MT Bold;font-size:Large;font-weight:bold;display:none;">

</div>
                               
                                <input type="submit" name="btnOdaDuzenle" value="Oda Numarasını Guncelle" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnOdaDuzenle&quot;, &quot;&quot;, true, &quot;login&quot;, &quot;&quot;, false, false))" id="btnOdaDuzenle" class="btn btn-lg btn-success btn-block" />
                            </fieldset>
                            <span id="lbl_refresh"></span>                           
                        
<script type="text/javascript">
//<![CDATA[
var Page_ValidationSummaries =  new Array(document.getElementById("ValidationSummary1"));
var Page_Validators =  new Array(document.getElementById("RequiredFieldValidator2"));
//]]>
</script>

<script type="text/javascript">
//<![CDATA[
var RequiredFieldValidator2 = document.all ? document.all["RequiredFieldValidator2"] : document.getElementById("RequiredFieldValidator2");
RequiredFieldValidator2.controltovalidate = "txtoda";
RequiredFieldValidator2.errormessage = "Oda Numarasını Giriniz!";
RequiredFieldValidator2.display = "Dynamic";
RequiredFieldValidator2.validationGroup = "login";
RequiredFieldValidator2.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
RequiredFieldValidator2.initialvalue = "";
var ValidationSummary1 = document.all ? document.all["ValidationSummary1"] : document.getElementById("ValidationSummary1");
ValidationSummary1.validationGroup = "login";
//]]>
</script>


<script type="text/javascript">
//<![CDATA[

var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
    ValidatorOnLoad();
}

function ValidatorOnSubmit() {
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else {
        return true;
    }
}
        //]]>
</script>
</form>
                    </div>
                </div>
            </div>
        </div>
    </div>   
</body>
</html>
me_turan@mynet.com
Üye
Mesajlar: 29
Kayıt: 09 Eyl 2017 02:53

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen me_turan@mynet.com »

Merhaba şu an kullandığım bilgisayrda delphi olmadığı icin kod yazıp deneme yapamıyorum. ancak twebbrowserin onexit olayı var. yani odak (focus) bir başka deyişle imlec başka bir nesneye geçtiğinde calısan bir olay. bu eventin altına webbrowserin hala olup olmadıgını kontrol eden bir kod yazarak kapanıp kapanmadıgını anlayabilirsin.

try
webbrowser1.tag = 1; // eger olmayan bir şeye erişmeye calışırsan acces viloation hatası verecektir ancak try icinde yazdığımız icin hata vemeyecek
except
exit; // yukardaki kod calısmadığında hata vermek yerine exit komutu calıştırılacaktır.
end ;
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen erdem55 »

me_turan@mynet.com yazdı: 11 Eyl 2017 10:41 Merhaba şu an kullandığım bilgisayrda delphi olmadığı icin kod yazıp deneme yapamıyorum. ancak twebbrowserin onexit olayı var. yani odak (focus) bir başka deyişle imlec başka bir nesneye geçtiğinde calısan bir olay. bu eventin altına webbrowserin hala olup olmadıgını kontrol eden bir kod yazarak kapanıp kapanmadıgını anlayabilirsin.

try
webbrowser1.tag = 1; // eger olmayan bir şeye erişmeye calışırsan acces viloation hatası verecektir ancak try icinde yazdığımız icin hata vemeyecek
except
exit; // yukardaki kod calısmadığında hata vermek yerine exit komutu calıştırılacaktır.
end ;
Maalesef Neden bilmiyorum ama onExit tetiklenmiyor. Nasıl bir java kodudur anlamadım. Sadece webbrowser ı kapatıyor. Onexit onquit filan tetiklenmiyor.
WebBrowser1ProgressChange olayında bile denedim. Webbrowser kapandığı için buradan da webbrowser ın kontrolü mümkün olmuyor.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen ertank »

erdem55 yazdı: 07 Eyl 2017 12:58 Aşağıda vermiş olduğum web sayfasında "Oda Numarasını Guncelle" butonuna tıkladığımda normal web sayfasında olduğu gibi sayfayı kapatmaya çalışıyor. Buda Twebbrowser ın kapanmasına yol açıyor.
Merhaba,

Örnek verdiğiniz html kodu direk olarak test için kullanılamıyor. WeBrowser kapatıyor diye bahsettiğiniz java script (sanırım WebForm_DoPostBackWithOptions) html içinde mevcut değil. Browser üzerinden test amaçlı çalıştırmakta mümkün olmuyor. Ayrıca Delphi tarafındaki kod örneğiniz de yok.

Eğer sadece size özel kullanım değil ise; sorunu gösteren kullanılabilir bir örnek proje paylaşmanız mümkün mü?
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen erdem55 »

Sayfa Devlete ait ve sadece şifre ve belirli bir ip ile girilebilen bir sayfa. Örnek proje paylaşsam bile belirttiğim sebep ile örnek proje çalışmayacaktır.
Ama form kısmına ait bir örnek isterseniz. onu yollayabilirim. Lakin dediğim gibi sayfaya giriş yapamayacağınız için faydası olmayacaktır.
Ben sayfa yapısını açıklasam daha kolay olacak sanırım. Ana sayfadaki 2. sayfayı açan kod.

Kod: Tümünü seç

<a onclick="window.open(this.href,'targetWindow','toolbar=no,scrollbars=yes,resizable=yes,width=775,height=750'); return false;" href="../ProjeDosya/odaduzenle.aspx?&amp;Id=2339a71a-1985-4c51-b301-7fa4797c848b" class="btn btn-info" style="height:30px; width:auto; line-height:initial; text-align:center;">Oda Değiştir</a>
Ana sayfada butona tıklandığında yeni bir sayfa açılıyor.
Bunu Webbrowser üzrinde

Kod: Tümünü seç

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
NewWindow: TForm2;
begin
  NewWindow := TForm2.Create(self);
  NewWindow.Show;
  ppDisp := NewWindow.Webbrowser1.DefaultDispatch;
end;
Bende ikinci bir form ve 2.bir webbrowser'a aktarıyorum. Açılan bu form'da işlem bitip butona tıklayınca işlemi yapıp sanırım son olarak

Kod: Tümünü seç

    <script lang="javascript" type="text/javascript">
        function AppClose() {
            self.close();
            window.opener.location.reload();
bu script'i çalıştırıp 2. sayfayı kapatıp ana sayfayı yeniliyor. Benim sorun burada başlıyor. bende işlem bitince 2. formu kapatıp Ana forma dönmek istiyorum ama java kodu devreye girdiğinde formu değil webbrowser'ı kapatıyor. Form sanki webbrowser hiç olmamış gibi bom boş kalıyor.
Onexit - Onquit webbrowser kapandığı halde tetiklenmiyor. Yardımlarınız için tekrar teşekkürler.
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen erdem55 »

Sanırım bir çözümü yok. yardımlarınız için teşekkürler.
me_turan@mynet.com
Üye
Mesajlar: 29
Kayıt: 09 Eyl 2017 02:53

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen me_turan@mynet.com »

siz sanırım delphi 7 kullanıyorsunuz. delphi 7 de baktım windowclosing eventi yok. bende rad xe7 var. xe7 de window closing eventi var be bu eventla kontrol etmek cok kolay.

Kod: Tümünü seç

procedure TForm1.WebBrowser1WindowClosing(ASender: TObject;
  IsChildWindow: WordBool; var Cancel: WordBool);
begin
if MessageDlg('Pencere kapansın mı?', mtConfirmation , [mbyesno],1)=mryes then
 form1.Close // formuda kapatıyorum
 else
 cancel := true; // webbrowseri kapatmaya calısan java kodunu iptal ediyorum
end;
me_turan@mynet.com
Üye
Mesajlar: 29
Kayıt: 09 Eyl 2017 02:53

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen me_turan@mynet.com »

Şimdi delphi 7 de baktım nasıl yaparım diye. bir timer koydum. interval özelliğini 500 yaptim. enabled mutlaka false olacak. yoksa timer form acılır acılmaz webbrowswerdaki sayfanın title 'ini almaya calısır ve formu kapatır. Wwebbrowserrin document complate altına yazacagız timerin aktive edilmesini.
timer in altına yani timer eventi altına aşağıdaki kodu yaz.

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
var
s:string;
begin
try
s:= WebBrowser1.OleObject.Document.title;
except
 form1.Close;
 end;
end;
ve webbrowswerin document complete eventi altınada aşağıdaki kodu yazın. bu kodun amacıda timer i aktive etmek.

Kod: Tümünü seç

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
timer1.Enabled := true;
end;
ve tamamdır. sayfa kapandığında formda kapanacaktır.
erdem55
Üye
Mesajlar: 32
Kayıt: 18 Mar 2014 06:54

Re: Webbrowser Kapanınca Form'da Kapansın

Mesaj gönderen erdem55 »

me_turan@mynet.com yazdı: 27 Eyl 2017 11:54 Şimdi delphi 7 de baktım nasıl yaparım diye. bir timer koydum. interval özelliğini 500 yaptim. enabled mutlaka false olacak. yoksa timer form acılır acılmaz webbrowswerdaki sayfanın title 'ini almaya calısır ve formu kapatır. Wwebbrowserrin document complate altına yazacagız timerin aktive edilmesini.
timer in altına yani timer eventi altına aşağıdaki kodu yaz.

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
var
s:string;
begin
try
s:= WebBrowser1.OleObject.Document.title;
except
 form1.Close;
 end;
end;
ve webbrowswerin document complete eventi altınada aşağıdaki kodu yazın. bu kodun amacıda timer i aktive etmek.

Kod: Tümünü seç

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
timer1.Enabled := true;
end;
ve tamamdır. sayfa kapandığında formda kapanacaktır.
Öncelikle yanıtınız için teşekkür ederim. Fakat forumda çözüm bulamayacağıma karar verince başka yollar denerken başka bir arkadaşın webbrowser denemelerinden yararlanıp aşağıdaki kodlar ile hallettim.

Kod: Tümünü seç

procedure TForm3.Timer1Timer(Sender: TObject);
const
  Messagefromwebpage = 'Web sayfasından ileti';
var
  wnd: hWnd;
Begin
  wnd := FindWindow(nil, Messagefromwebpage);
  if wnd <> 0 then
  begin
    Timer1.Enabled := False;
        PostMessage (Wnd, WM_CLOSE, 0, 0);
        anaform.WebBrowser1.Navigate('gidilecek web sayfası');
        close;
  End;
End;
Herkese tekrar teşekkürler...
Cevapla