show 非法 (高手)(50分)

  • 主题发起人 主题发起人 zdy0155
  • 开始时间 开始时间
Z

zdy0155

Unregistered / Unconfirmed
GUEST, unregistred user!
我放的就是这里,可是我在另一个程序中没有发生这种问题
Form 的 OnCreate 事件中:
SetWindowPos(handle,HWND_TOPMOST ,Left,Top,Width,Height,SWP_SHOWWINDOW);
SetWindowLong( Handle, GWL_EXSTYLE,GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);


 
你的Form是什么样的Form?如果你新建一个Form,放入这段代码,似乎没问题。
 
有几个窗口!要注意引用顺序。
 
这两不应该有问题。你可能改了其它地方。
 
你查下你窗体的属性设置,有关系的。仔细点。
 
可能是你的窗体大小(长、宽)改变了
 
有没有人会啊
 
放在Create中此时窗口还没有创建呢,handle为nil吧!
把这两行放到OnShow中试试
 
同意pcsHP
 
这两句没有什么问题.
如果你怀疑, 你可以屏蔽这两句扣再调试. 这两句是没有什么问题的。
我刚才已帮你试过了. 可能是其它地方. 另外你最好贴出错误提示.

 
预练次功必先自宫,
即使自宫未必成功,
若不自宫也可成功。
哈哈.............
http://www.3rcn.com
不想讨论这些问题:有时间请关注:
http://expert.csdn.net/Expert/topic/1613/1613419.xml?temp=.5817682
一个Borland中国北京、广州、上海公司都解决不了的问题呀!
中国还有高手吗???????????????
 
上下两句调个位置
 
应该是这句有问题
SetWindowPos(handle,HWND_TOPMOST ,Left,Top,Width,Height,SWP_SHOWWINDOW);
这一句可以放在OnShow里面做就没有事了。因为在这个时候窗体还不可见,我也碰到这个问题,我也碰到类似的问题。
 
就是,与显示的事件,最好放在onshow中处理
oncreate 事件中会不会窗体的内存尚未分配好?还没有获得句柄
 
guojundeng 的解释是对的
 
:)
Inherited;
SetWindowLong( Handle, GWL_EXSTYLE,GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
SetWindowPos(handle,HWND_TOPMOST ,Left,Top,Width,Height,SWP_SHOWWINDOW);
 
既然是show非法,那就改为
SetWindowPos(handle,HWND_TOPMOST ,Left,Top,Width,Height,0);
//
 
两句程序没有什么问题,不过可以改改:

SetWindowPos(handle,HWND_TOPMOST ,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_SHOWWINDOW);
SetWindowLong(Handle, GWL_EXSTYLE,GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);

不过最建议的写法是:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams);
override;
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
with Paramsdo
ExStyle:=ExStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
FormStyle:=fsStayOnTop;
// SetWindowPos(handle,HWND_TOPMOST ,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_SHOWWINDOW);
// SetWindowLong(Handle, GWL_EXSTYLE,GetWindowLong(Handle, GWL_EXSTYLE) or
// WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
end;

end.
 

Similar threads

后退
顶部