当前位置:主页>delphi7/进销存和数据库> 文章内容

有关HINT的问题

发布时间:2010-01-20 | QQ免费站
1楼: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form2:=TForm2.Create(Self); Windows.SetParent(Form2.Handle,self.Handle); Form2.Show; end; procedure TForm1.FormCreate(Sender: TObject); begin Form2.Free; end; end. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Edit1: TEdit; private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} end. //****************************************************** 为什么我的第二个窗体的Edit1的Hint不能显示出来,把Form2的Parent设成Form1,为何Form2失去焦点时Form2上的控件的HINT就可以显示出来,Form2得到焦点时Form2上的控件的HINT就显示不出来 //******************************************************
字串1

2楼: 请大家帮帮忙
字串7

3楼: http://www.delphibbs.com/keylife/iblog_show.asp?xid=2438 也许对你有用 字串6

4楼: 用这个试试吧: Form1.Parent := Self.Panel1; 字串6

5楼: 谢谢hongxing_dl的热心,正在看
字串3

6楼: Hint的问题(未解决),还是没有解决的问题 字串6

7楼: 我觉得实现起来很困难。 1、操作系统要求当前只能有一个真正意义上Active窗口。 2、Form1和Form2不可能同时激活。 3、Delphi程序有一个毛病是:只有激活窗口下的控件的Hint才能被激活显示。 4、ShowHint属性的强迫继承性。 当Form1作为Form2的父时,就形成了一个非常矛盾的局面: FORM2激活时,作为父的FORM1必然成了不激活窗口(尽管有方法可以使Form1标题栏看上去也像是处于激活状态),这样FORM2下的子控件都变成不显示HINT了;如果FORM1激活,但FORM2又不激活了,虽然这样FORM2内的控件的Hint能显示出来,但EDIT类的控件却不能得到焦点,如果EDit控件得到了焦点,FORM1又变成不激活了。。。。。 字串1

8楼: TO YuZi 果真没有办法了吗? 字串1

9楼: 我很菜的, 请高手帮你吧。。。。 1、Form2和Form1是MDIChild/MDIForm的关系就不会现这种情况了。 2、自己写Hint窗口控件,修改或不要继承THintWindow类,像QQ一样窗口没被激活,只要鼠标停留也能显示Hint; 字串5

10楼: showModal试试

字串1

11楼: 我都说了,你还不信, 真是笨的够可以的啊 你以为我骗你的啊?

字串2

12楼: YuZi,分析的很有道理,可惜不对啊, 试试我的方法吧
字串4

13楼: ShowHint設置沒有

字串1

14楼: lich 大侠果然说得没错! 加在Panel,Form2的Edit能得到焦点,但Form2却处于不激活状态,这样Form1永远处于激活状态,其内的Hint就可以显示了,真有些想不通这是为什么。。。 顺便借贴问一下lich, SpeedButton建在偶数层的Panel里,字体会变成系统某一粗体(设置无效)。而在奇数层里却不会。也就是说在Panel1里再放一个Panel2,然后在Panel2里放一个SpeedButton,这个SpeedButton设置Font属性无效,即便ParentFont设置为True或False都一样,SpeedButton一到运行期就不理会我们的设置了。而如果在Panel2里再放一个Panel3,然后再放一个SpeedButton就不会发生这种情况了,不知道为什么呀? 谢谢! 字串2

15楼: 一个Form嵌入其它窗体后,本身是作为一个TWinControl的, 你不要再把它看作是一个Form了,倒可以看作是一个Frame 你问的第二个问题,我并没有发现过,我试了一下,也没有出现, 可能是你的操作系统的问题,你换台机子试一下看看 也可能是你使用的什么控件更改了一些对象的字体属性了 你可以跟踪一下,看是什么时候,那个过程导致字体变化了 字串6

16楼: 谢谢lich的热心,但这样FORM2得不到焦点 字串1

17楼: 谢谢lich! 忘了说了,我有加了TXPManifest 控件,没加不会, 可以肯定问题就出在这个XP风格控件上,你可以试试,但不知道怎么解决? 昨天给自己的问题忙晕头了,lich的的确可以,但要这样实现: Form2 := TForm2.Create(Self); Form2.Parent := Self.Panel1; Form2.Show; Form2.Edit1.SetFocus Edit1可以得到焦点,但失去焦点后,就无法正常得到了,可以在Edit1的OnClick中加入 Edit1.SetFocus; 间接得到; ;
字串4

18楼: 老大,又在胡说了, 我的form2很好啊,可以正常得到焦点,tab跳转顺序都正常 字串9

19楼: 是指EDIT,BUTTON当然是可以直接点的, 新发现: EDIT点左键不能得到焦点,但奇怪点右键却可以,真是莫名其妙? ps:我向来感觉自己做事中规中矩,怎么会胡说 呢?
字串4

20楼: 但是,我这里一切正常啊, 要不,发个程序给你看看? unit xForms; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TCustFrm = class(TForm) private FInitPos: TPosition; { Private declarations } protected procedure CreateParams(var Params: TCreateParams); override; public { Public declarations } property InitPos: TPosition read FInitPos write FInitPos; constructor Create(AOwner: TComponent); override; end; var CustFrm: TCustFrm; implementation { TAboutFrm } constructor TCustFrm.Create(AOwner: TComponent); begin // 不能用这个类直接创建窗口,只能使用其基类 if not ClassParent.InheritsFrom(TCustFrm) then begin CreateNew(AOwner); end else begin inherited; FInitPos := Position; end; end; procedure TCustFrm.CreateParams(var Params: TCreateParams); const Bds: array[TFormBorderStyle] of Integer = ( 0, 0, 0, WS_BORDER or WS_CAPTION, WS_BORDER or WS_CAPTION, WS_BORDER or WS_CAPTION); Mins: array[Boolean] of Integer = (0, WS_MINIMIZEBOX); Maxs: array[Boolean] of Integer = (0, WS_MAXIMIZEBOX); Mnus: array[Boolean] of Integer = (0, WS_SYSMENU); begin inherited; if Params.Style and WS_CHILD <> 0 then begin Params.Style := WS_CHILD or Bds[BorderStyle] or Mnus[biSystemMenu in BorderIcons] or Mins[biMinimize in BorderIcons] or Maxs[biMaximize in BorderIcons]; end; end; end. 字串9

21楼: 我的系统是Xp+Delphi7,有两个Form, 窗体上只有楼主说的那几个控件 我的Mail: biout@126.com 你也给个mail,麻烦看看我的是怎么回事。

字串9

22楼: m a s t e r cn @ 163 . c o m

字串7

23楼: to Lich: 已经发过去了。 字串3

24楼: 把子窗口设置为无边框的就可以了, 有边框和标题栏就不行了 字串5

25楼: 总算得到结果了,不过有点遗憾,BordeyStyle要设置为bsNone,没有边框。。。 唉,我怎么没想到这样去试一试呢?看来人聪明跟笨的区别真的只是一念之隔啊。。。 谢谢lich,楼主应该可以结贴了。。。 字串6

26楼: 的确比较奇怪,如果真的需要边框,就没有办法了
字串5

27楼: 我的FORM2确实没有得到焦点呀,虽然是得到焦点,但FORM2的标题条没有变蓝,有没有办法解决,当FORM2得到焦点后,让FORM2的标题条变蓝,先给你分,希望能帮我解决这个问题,谢谢你的热心, 字串8

28楼: 子窗口是不会变蓝的,除非自己作个假的
字串1