一个较为棘手的难题,望高手们帮忙 (200分)

  • 主题发起人 主题发起人 rrstpit
  • 开始时间 开始时间
R

rrstpit

Unregistered / Unconfirmed
GUEST, unregistred user!
自己设计一个EDIT控件,当焦点进入EDIT时,自动在该控件的下方弹出一个窗体Form1,然后焦点转入这个窗体。

现要求:

1,该EDIT 是自己设计的控件,Form1是包含在该控件中。
2,弹出的窗体的位置是在该控件EDIT的下方(紧挨着EDIT的下方)。
3,该EDIT初始化一些变量,比如 string1, 此string1能够传入弹出的窗体Form1。
4,在弹出的窗体Form1中进行操作时,比如按下回车时能够把在Form1中的数据传入 Edit 中。

这几天想这个问题想得连连想睡觉为止,痛苦之中,手中资料又少。特别是1,参数的传递最为头痛。2,怎么样在EDIT的下方。

知道的兄弟麻烦帮帮我,或者发个资料到我的邮箱 rrstpit@163.com 。分数不算多,帮忙的都有分
 
传递参数有什么难的? 重写一个Form1.create不就行了?
 
是 Auto-Suggest吧?
 
Form的构造函数可以这样写
constructor CreateEx(AOwner: TComponent;AString: string;var AEdit: TEdit);
......
inherited Create(AOwner);
FString := AString;
FEdit := AEdit;
 
要在Edit下方显示
给Edit添加一个方法
procedure ShowForm;
var
thePoint: TPoint;
begin
if not Assigned(FForm) then
FForm := TForm1.CreateEx(nil,Text,Self);
thePoint.x := Left;
thePoint.y := Top+Height+5;
thePoint := ClientToScreen(thePoint);
FForm.Left := thePoint.x;
FForm.Top ;= thePoint.y;
FForm.Show;
end;

对于第四个要求,在给Form的事件处理中直接对Form的变量FEdit赋值就行了
 
jlutt-sadan,首先非常感谢你的正确解答,帮了我非常大的忙,在按照你的解答下,进行了测试,大部分可行,就是 thePoint := ClientToScreen(thePoint); 这里要改成thePoint := Edit.Parent.ClientToScreen(thePoint);
现在出了个新的问题是,按照你的解答,Form1 显示后,焦点并不是落在 Form1 上,而还是落在原来的Edit上,我测试了好多方法都不行,包括在 Form1.OnShow 事件中强行SetFocus也还是不行,请问怎么解决?
 
好了,问题我已经知道是怎么回事了,已经用一种方法解决掉了,多谢jlutt-sadan
 
多人接受答案了。
 
后退
顶部