intraweb中控件的重定位问题(100分)

  • 主题发起人 主题发起人 ebxca
  • 开始时间 开始时间
E

ebxca

Unregistered / Unconfirmed
GUEST, unregistred user!
在 IntraWeb学习笔记(四) bnPYSse(原创) http://202.117.210.31/delphi/
中提到 "控制Input中的光标"的问题,

原文:
这种情况只发生在IE当中,当页面刷新时,输入盒中的光标会重新回到开始位置
上去。下面的方法则可以解决刷新页面时的光标重定位问题。
首先,要为控件的ScriptEvents.OnFocus增加一点代码:
var range = this.createTextRange();
range.moveStart('character', this.value.length);
range.select();
然后,打开窗体的onRender事件,并加入:
ComponentName.setFocus;

按他说的做,但在编译时提示: ComponentName 没定义.
但帮助中找不到应该引用哪个单元.

另外,怎样灵活地控制哪个控件发生事件,返回时就显示在该控件上,并非象初始化
时显在网顶.

还有,对于一些没有ScriptEvents 属性的控件(如IWGrid),而我又在这些控件中动态
加入了一些东东,如:IWcheckbox等,又如何让页面处理返回时显示在iwgrid或
iwcheckbox上.




 
从iw5.1以后的版本就不用这么复杂啦?
IWEdit1
IWEdit2
如果在IWEdit1上按回车,很方便可以将焦点设置到IWEdit2.
请查看我的笔记。
 
我用d7自带的intraweb的,怎么就没有你说的这种功能.
 
同时,你误会我的意思了,
我是指服务器端处理完后返回的页面.
能保留在提交时的位置(输入焦点)而并非页顶.
 
调用某个控件的事件之前, 设置form的activecontrol属性, 写入控件名,
返回时焦点就可以在这个控件上了
比如, iwbutton4打开另一页,
procedure TformMain.IWButton4Click(Sender: TObject);
begin
self.ActiveControl := iwbutton4;
TformMain1.Create(webapplication).Show;
end;

D7是5.0 版的.


 
to xiao78:
5.0 ???? 我的天,让我还以为用了7.0就什么都是新的.
真是孤陋寡闻.

你的办法还好,可行. 就是把要定位的控件显示在ie的最后一行这一点不好.
还有,那个iwedit控件,就算你设成长、宽都是0, 但它依然我行我素,弹
出来显给你看,真拿它没办法。

还有如果想在iwgrid控件下面显示别的控件,如iwedit等,如果iwgrid的长
度不可预知的情况下,iwedit很有可能被iwgrid覆盖掉,有什么办法呢?
(因有些场合不想把iwgrid的长度固定)。

最后,有人说intraweb用在小型(只有十来个用户)的场合比较合试。是否这样?
为什么? 哪位大侠知道?
 
还有:
intraweb能运行java脚本吗? d7中有个运行JavaApplet的例子,但好象也是要服务器
做的.什么都要服务器做不是b/w模式下的好办法.
例如上述定位iwedit控件或客户端数据有效性验证等的功能,在intraweb中能否用脚
本在浏览器端做???

题外:不知道 那个有点软的 点 net 又是否行呢?
 
>>> 5.0 ???? 我的天,让我还以为用了7.0就什么都是新的.
>>> 真是孤陋寡闻.
它的版本有很多, 最新是6.0, 需要license key, 有点麻烦. 用D7自带的比较好,

>>就是把要定位的控件显示在ie的最后一行这一点不好.
不太明白

>> 还有,那个iwedit控件,就算你设成长、宽都是0, 但它依然我行我素,弹
>>出来显给你看,真拿它没办法。
visible设成false就不可见了,

>>> 还有如果想在iwgrid控件下面显示别的控件,如iwedit等,如果iwgrid的长
>>>度不可预知的情况下,iwedit很有可能被iwgrid覆盖掉,有什么办法呢?
>>>(因有些场合不想把iwgrid的长度固定)。
是叠在一起吗? 我不明白你要做什么?

 
>>>visible设成false就不可见了,
但同时控件也不能用了.

>>>是叠在一起吗? 我不明白你要做什么?
是的. iwgrid会覆盖了其下的控件.
是这样的,如果我想在显示完iwgrid后出现一个按钮(在iwgrid下方),
这时按钮的位置就不能确定,视乎iwgrid的长度,但iwgrid的长度又是未知的.
如果就在设计时在窗口上放控件,前提是不把iwgrid的长度固定的情况.
就会:
如果数据很少,或许iwgrid和button之间会有一大段距离,
如果太多数据,iwgrid会把button覆盖掉.
大概就是这样. 怎样解决呢?
 
1. 你在改小iwedit的size时, 也要改font的size

2. 要使用模板
1).在你当前的项目文件目录中建一个Templates的目录,所有模板文件(.html)都放在里面;
2).假如项目中有一个IWForm叫frmLogin(有两个控件, iwdbgrid1, iwedit1),则用FrontPage或DW建一个frmLogin.html放在Templates;
3).美化模板:在frmLogin.html对应位置上加上frmLogin中的控件标识,
先在html上建立一个Table(如两行单列), (border size可设为零), 第一行写 {%iwdbgrid%}, 第二行 {%iwedit1%}
4).在frmLogin中加入一个IWTemplateProcessorHTML1;
5).设置frmLogin的LayoutMgr为IWTemplateProcessorHTML

这样不管iwdbgrid有多长, 都不会覆盖iwedit. (可看demo和Intraweb Manual)

 
>>例如上述定位iwedit控件或客户端数据有效性验证等的功能,在intraweb中能否用脚
>>本在浏览器端做???

如判断iwedit2是否为空,
form 的 javascript写入
function test()
{
if (document.all.IWEDIT2.value == "")
alert('iwedit2 is empty');
}

iwedit2的scriptevents的onBlur,
test()>0;
就可以了.
 
>>如判断iwedit2是否为空,
>>form 的 javascript写入
>>function test()
>>{
>>if (document.all.IWEDIT2.value == "")
>> alert('iwedit2 is empty');
>>}

>>iwedit2的scriptevents的onBlur,
>>test()>0;
>>就可以了.

再请问;
其中:document.all 是何解?
还有,test()>0 又是何解.
你的这些资料是哪弄的呢? delphi自带的吗?

我是用d7自带的intraweb功能的,demo和Intraweb Manual在哪?请你告诉我好吗?
如果有中文手册(完整详尽的)就好了,因我的e文不好. 嘿!

 
document.all表示整个HTML文档,通过它可以访问/设置HTML文档中的每个元素!
ie专有的属性. (你可以搜一下www.csdn.net论坛的javascipt栏)

这是几个月前碰到的问题, 没有仔细研究, 现在重新看help, 发现原来有错误.
应该是

如判断iwedit2是否为空,
form 的 javascript写入
function test()
{
if (document.all.IWEDIT2.value == "")
alert('iwedit2 is empty');
return true;
}

iwedit2的scriptevents的onBlur,
test()


Intraweb 5.0 help 关于scriptevent描述:
ScriptEvents is used to add Javascript to control events to be processed on the client side. Scripts must be a boolean evaluation or a function that reutrns a boolan. If it evaluates to true, IntraWeb will continue processing the event itself if it uses the particular event. If it returns false, IntraWeb will not process the event further.

通过scriptevents可以将客户端脚本Javascipt写入控件中, 脚本必须是boolean值或是返回boolean值的函数. 如为True, 处理完客户端事件继续执行服务端相应事件(如有的话). False, 就不处理服务端事件.

 
比如, iwbutton有服务端(intraweb)和客户端(javascript)onclick事件, 先做客户端onclick,成功就做服务端onclick.

你可以试试
form 的 javascript写入
function test()
{
alert('nuhph');
return true;
}

iwbutton/scriptevents/onclick,
test()

iwbutton/onclick
webapplication.showmessage('noiughuih');


我对javascript一知半解的, 要用它来控制客户端数据有效性验证, 太难了,
还是对特定的栏位作输入说明, 以减少用户出错, 在服务端控制也好维护.


 
多人接受答案了。
 
后退
顶部