确定元素位置(100分)

R

RickLee

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用微软的DHTMLED.OCX。但在确定元素的位置时,我有了问题。比如:在元素很多时,DHTMLED.OCX会自动出现滚动条。但我的要求是:当我选择某个元素时,我希望在这个元素的下面弹出一个提示框。如果控件中的元素不多,没有出现滚动条时,所有的元素
都可以显示出来,这个情况下,是没有问题的。但当元素很多,有滚动条时,滚动条以下的元素的位置就有了偏差。(我现在是用元素的OFFSETTOP值来确定弹出框的位置的。但这OFFSETTOP是以控件中的第一个元素以起点的。但我要显示的位置却是需要以控件的可见项端为起点
 
没有人可以帮我吗?我太惨了。
 
1、 去掉IE的滚动条
有时候做好的网页明明没有超出窗口,可IE却偏偏给加上滚动条,这样看上去很不舒服,其实这也是可以通过一些小技巧避免的。具体如下:

<body style=”overflow-x:hidden”>…</body> //去掉X轴方向的滚动条
<body style=”overflow-y:hidden”>…</body> //去掉Y轴方向的滚动条
<body style=”overflow:hidden”>…</body> //去掉全部的滚动条

现在你看到的和你想像中的网页应该一样了吧,如果其中有什么不明白的地方可以参照注释中的说明。
 
看看此贴:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1445738
 
你可能没有真正明白我的意思。我把我的示例程序贴在上面。我的意思是:当你选择一个元素时,
可以把Panel1定位到你所选择的元素的正确位置。比如:你所选择的是“测试7”这个元素时,
可以把Panel1定位到“测试7”这个地方。现在我的问题是:当元素很少时,我的控件不会出现
滚动条,这时候用你现在的方法,可以做到我所要求的功能。但如果元素互很多,出现了滚动条时,
用现在的方法定位的话,定位会出现偏差。
//-----------------------------------------------------------------------------
示例源码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, DHTMLEDLib_TLB,MSHTML_TLB, ExtCtrls;

type
TForm1 = class(TForm)
DH: TDHTMLEdit;
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
sString,s:string;
doc:IHTMLdocument2;
R:IHTMLTxtRange;
v:variant;
begin
sString :='测试6';
try
// doc :=IHTMLdocument2(webbrowser1.Document) ;
R :=(DH.DOM.selection.createRange) as IHTMLTxtRange;
R.findText(sString,1,0);
R.select;
v:=r;
panel1.Top :=Integer(v.boundingTop);
panel1.Left :=Integer(v.boundingLeft)+100;
s:=format('Left:%d Top:%d Width:%d Height:%d',
[integer(v.boundingLeft),integer(v.boundingTop),integer(v.boundingWidth),integer(v.boundingHeight)]);
showmessage(s);
except
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Dh.DocumentHTML :='<head>TEST SAMPLE</head>'
+'<body>'
+'问题分类<p>'
+'测试1<p>'
+'测试2<p>'
+'测试3<p>'
+'测试4<p>'
+'测试5<p>'
+'测试6<p>'
+'测试7<p>'
+'</body>';
end;

end.




 
顶部