delphi 窗口跳转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 窗口跳转相关的知识,希望对你有一定的参考价值。

有3个Form,Form1和Form2都可以跳转到Form3,窗口跳转后隐藏,我想在Form3上知道是哪个Form跳转过来的,要怎么做?
不想用全局变量的这种方法,还有什么别的方法吗

参考技术A 窗体有个属性Tag 这个是用来自定义标记的
比如说 Form1 跳到 Form3 就在跳转之前设定Form3.Tag := 1;
如果不用这个属性你也在Form3自定义一个属性进行赋值
参考技术B 在form3里面写个方法用于转跳,form1和form2通过这个方法来转,这个方法有参数,这样你就知道了追问

Form3里面已经有个方法用于跳转了,这个方法还有别的Form用,修改后还要修改很多东西,还有什么方法?

参考技术C 设置一个全局变量
Form1跳转过去之前赋值为1
Form2跳转过去之前赋值为2

在跳转之后取出这个变量判断 不就知道了吗追问

不想用全局变量的这种方法,还有什么别的方法吗

本回答被提问者和网友采纳
参考技术D

请看附件 demo

追问

不想用全局变量的这种方法,还有什么别的方法吗

关于窗口跳转的一些总结

  在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。

1、window.self

  功能:是对当前窗口自身的引用。它和window属性是等价的。

  语法:window.self

  注:window、self、window.self是等价的

2、window.top

  功能:返回顶层窗口,即浏览器窗口。

  语法:window.top

  注:如果窗口本身就是顶层窗口,top属性返回的是对自身的引用

3、window.parent

  功能:返回父窗口

  语法:window.parent

  注:如果窗口本身就是顶层窗口,parent属性返回的是对自身的引用

  在框架网页中,一般父窗口就是顶层窗口,但如果框架中还有框架,父窗口和顶层窗口就不一定相同了。

  总结:你应该当将框架视为窗口中的不同区域,框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架,一个单个的框架也可以分成其它多个框架,即所谓的嵌套框架。

  注:parent与opener的区别:

     parent指父窗口,在frameset中,frame的parent就是frameset窗口。
  opener指用window.open方式创建的新窗口对应的原窗口。
  parent是相对于框架来说父窗口对象。
  opener是针对于用window.open打开的窗口来说的父窗口,前提是window.open打开的才有。

 

跳转总结:

  1、"window.location.href"、"location.href"——是本页面跳转

  2、"parent.location.href"——是上一层页面跳转

  3、"top.location.href"——是最外层的页面跳转

 

一、js方式的页面跳转

  1、window.location.href方式

  <script language="JavaScript" type="text/javascript">
           window.location.href="top.jsp";
    </script>

  注意:如果top.jsp中有iframe标签,则top.jsp页面将会在iframe中被打开。 

  2、window.loction.replace方式实现页面跳转,注意跟第一种方式的区别

  <script language="javascript">
       window.location.replace("http://www.dayanmei.com");
  </script>

  window.location.href和window.loction.replace的区别:

  有3个jsp页面(a.jsp, b.jsp, c.jsp),进系统默认的是a.jsp ,当我进入b.jsp的时候, b.jsp里面用window.location.replace("c.jsp");与用window.location.href ="c.jsp";从用户界面来看是没有什么区别的,但是当c.jsp页面有一个"返回"按钮,调用window.history.go(-1); wondow.history.back();方法的时候,一点这个返回按钮就要返回b.jsp页面的话,区别就出来了,当用 window.location.replace("c.jsp");连到c.jsp页面的话,c.jsp页面中的调用 window.history.go(-1);wondow.history.back();方法是不好用的,会返回到a.jsp 。

  3、self.location方式实现页面跳转,和下面的top.location有小小区别

  <script language="JavaScript">
          self.location=‘top.htm‘;
   </script>

  4、top.location 

  <script language="javascript">
          top.location=‘xx.jsp‘;
   </script>

  5、不推荐这种方式跳转

  <script language="javascript">
       window.history.back(-1);
   </script>

  6、页面自动刷新:把如下代码加入<head>区域中

<meta http-equiv="refresh" content="20">

  其中20指每隔20秒刷新一次页面.

  7、<a href="javascript:history.go(-1)">返回上一步</a>

  8、<a href="<%=Request.ServerVariables("HTTP_REFERER")%>">返回上一步</a>

  9、<a href="javascript:" onClick="window.open(‘http://hi.baidu.com/630270730‘,‘‘,‘height=500,width=611,scrollbars=yes,status=yes‘)">打开新窗口</a>

  10、window.history.forward()返回下一页

  11、window.history.go(返回第几页,也可以使用访问过的URL)

 

二、iframe中页面跳转

  1、iframe页面跳转:

  "window.location.href"、"location.href"是本页面跳转

  "parent.location.href"是上一层页面跳转

  "top.location.href"是最外层的页面跳转

  例:如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js这样写

  "window.location.href"、"location.href":D页面跳转

  "parent.location.href":C页面跳转

  "top.location.href":A页面跳转 

  2.iframe中的target

  如果D页面中有form的话,  form提交后D页面跳转

  <form target="_blank">:  form提交后弹出新页面

  <form target="_parent">:  form提交后C页面跳转

  <form target="_top"> :  form提交后A页面跳转

 

三、iframe页面刷新

  D 页面中这样写:"parent.location.reload();": C页面刷新  

(当然,也可以使用子窗口的 opener 对象来获得父窗口的对象:window.opener.document.location.reload(); )

  "top.location.reload();": A页面刷新
  注:window.location.href = window.location.href 也可以实现页面刷新,它与reload的区别是:如果在reload之前向服务器提交过数据,那么执行reload会重新执行这个提交操作。 而window.location.href = window.location.href 则不会,因为它是重新进入页面。

 

 

举个例子:如果A,B,C,D都是html,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js这样写

  1、window.open("Url地址","_blank") = window.open("Url地址");//在新窗口打开 

  2、location = window.location = location.href = window.location.href =self.location.href = "Url地址";//在D页面实现展现

  3、window.open("Url地址","_self");//在D页面实现展现

  4、parent.location.href = window.parent.location.href ="Url地址";//在C页面实现展现

  5、window.open("Url地址","_parent");//在C页面实现展现

  6、top.location.href = window.top.location.href ="Url地址";//在A页面实现展现

  7、window.open("Url地址","_top");//在A页面实现展现

  8、parent.parent.location = "Url地址";//在B页面实现展现

  9、parent.open("Url地址","_parent") = parent.parent.open("Url地址","_self");//在B页面实现展现

如果D页面中有form的话:

  1、<form>: form提交后D页面跳转 

  2、<form target="_blank">: form提交后弹出新页面 

  3、<form target="_parent">: form提交后C页面跳转 

  4、<form target="_top"> : form提交后A页面跳转 

关于页面刷新,D 页面中这样写:   

  1、"parent.location.reload();": C页面刷新 (当然,也可以使用子窗口的 opener 对象来获得父窗口的对象:window.opener.document.location.reload(); ) 

  2、"top.location.reload();": A页面刷新

 

其他应用:

  1、js判断窗口或页面是不是在框架中打开的

<script type="text/javascript">
    var b = window.parent==window.self;
    document.write( "当前窗口是否是底层窗口:"+b );
</script>

  2、如果当前窗体不是顶级窗体,就把自己变成最顶层。从而防止别人iframe使用(防止iframe嵌套,常用在登录界面

 if (window.top !== window.self) {
      window.top.location = window.location;
 }

  3、子窗口刷新父窗口

<script language=JavaScript>
     self.opener.location.reload();
</script>
(或<a href="javascript:opener.location.reload()">刷新</a>   )

  4、如何刷新另一个框架的页面用

<script language=JavaScript>
    parent.另一FrameID.location.reload();
</script>




以上是关于delphi 窗口跳转的主要内容,如果未能解决你的问题,请参考以下文章

用delphi移动窗口~

delphi怎样从一个界面跳转到另一界面

delphi 怎么控制窗口大小

delphi 怎么控制窗口大小

delphi 窗口透明

delphi 有关父窗口的问题