怎样生成一个在任务栏上有两个标题的程序?(100分)

  • 主题发起人 主题发起人 无血野人
  • 开始时间 开始时间

无血野人

Unregistered / Unconfirmed
GUEST, unregistred user!

我用Delphi 5.0摸拟超级解除霸写了个播放器程序,有一个播放器主界面FormMain
(相当于VCD播放机),一个显示视频信息的窗体FormVideo(相当于电视机),其中FormMa
in为主窗口,即第一个生成的主窗口,也即Application.MainForm所返回的窗口,为了
达到类似超级解霸的效果,即在播放影音文件时任务条上有两个标题(可能也是窗口,
比较特别的窗口吧),一个与桌面上的主播放器对应,一个与桌面上的显示视频信息的窗
体对应,而且相互毫无瓜葛,主播放器窗体最小化时并不影响显示视频信息的窗体,反过
也是这样,就像有两个Windows应用程序一样(我发现Dreameweaver也是这种程序,而且
不只两个),我用SetWindowLong给FormVideo添加了WS_EX_APPWINDOW属性,这样在任
务条上也有一个标题和FormVideo窗体相对应,但令我苦恼的是:当我把FormMain最小化
时,FormVideo也要跟着最小化,反过来则不是,好像是FormMain总是要控制FormVideo,
因此也就不能像解超级除霸那样两个窗口各自独立。我尝尽各种手段如修改FormVideo
的ParentWindow等属性,都无济于事,我想可能是VCL处理主窗口的最小化消息时强制
性地也要把其它窗口也一起处理掉,我觉得VCL这样做太霸道了,因此我不知道该怎么办
,特向大侠们请教.
如能给小生一点溥面,小生当不胜感激。
 
你可以做两个EXE程序,一个为主程序,调用另一个,就一切OK了!
 
好象楼上的是对的
 
用“编程不懂”的的方法是不是他麻烦了一点点,我的一个播放器是这样用的
我觉得好象还可以达到你的要求
。。。
private

procedure CreateParams(var Params: TCreateParams);override;
。。。
。。
procedure Timageform.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams( Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
 
加上下面的就可以了,我的程序中就是这样实现的.主窗口关闭,副窗口继续显示.当然,要出
现两个标题栏,你试试?
procedure CreateParams(var Params: TCreateParams);Override;

procedure TFrmShow.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := 0;
end;
补充一下,这个写在副窗口中.
 
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure createparams(var params:tcreateparams);override;
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

procedure tform2.createparams(var params:tcreateparams);
begin
inherited createparams(params);
params.WndParent :=getdesktopwindow;
end;


end.
 
在运行期设计生成一个父亲是桌面的窗体,试一下行不行
 
thedream 的方法可行,但我發現底下方法也可以,那此行的意義何在?
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;


procedure Timageform.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams( Params);
Params.WndParent := GetDesktopWindow;
end;

 
只不过就是通过重载窗体的CreateParams过程来实现。
上面那句是关于窗体的左上角位置的。
 
刚刚看到这一点,只要新生成的窗体的父窗体是桌面(通常用0表示父窗体的句柄)就可以了
 
多人接受答案了。
 
后退
顶部