如何控制窗口最小化后的位置(100分相送) (100分)

  • 主题发起人 主题发起人 liyue_sun
  • 开始时间 开始时间
L

liyue_sun

Unregistered / Unconfirmed
GUEST, unregistred user!
一个简单窗体程序,在其FormCreate事件中写入如下代码(主要就是使其图标不出现在任务栏上):
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,
GetWindowLong(Application.Handle,GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
运行后,按最小化按钮,它缩小到左下角。请问有没有办法使其向右下角缩小,或者缩小到下部中间位置,也就是说,在这种情况下是否有办法可以随意控制窗体最小化时停泊的位置。
 

比如MDI子窗口,它们最小化时,它们就知道它们应停泊在哪个位置。
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
procedure WMSysCommand(var message: TMessage); message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand(var Message: TMessage);
var
pos : TWindowPlacement;
begin
if Message.WParam = SC_MINIMIZE then //最小化了
begin
Randomize;
AnimateWindow(handle, 800, AW_HIDE or Random(16) + 1); //AW_BLEND or
end
else
inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if CanClose then
begin
Randomize;
AnimateWindow(handle, 800, AW_HIDE or Random(16) + 1); //AW_BLEND or
end;
end;
end.
试试看?
 
这不是我想要的效果,我的意思是指,当窗口最小化时,其缩小的动画过程与正常情况时完全相同,只是因其最后停泊的位置不同,而表示为一个是向左动画缩小,一个是向右动画缩小。不知你装了MSN没有,如果你装了,你可以打开看看,当你关闭MSN主窗口,它会表现为向系统托盘区域缩小,如果系统托盘区域在右下角,它向右下角缩小,如果在右上角,它就向右上角缩小,我要的就是这个效果,意思就是告诉用户程序已进入托盘了。
另奉送幸劳分20分。
 
如果你是要MSN的那种效果,就直接做成最小化后缩小至托盘就中了,我在刚才的窗体上放了个托盘控件,去除掉刚才最小化的那段过程,其余不变,然后将控件设成最小化在托盘,就可以了。
 
我不是要把程序变成托盘图标,那个很容易,我是想知道程序最小化时,如何实现缩小到托盘区域的那段动画效果。
 
后退
顶部