如何实现金山词霸2002启动时的效果?(50分)

  • 主题发起人 happyjoe
  • 开始时间
H

happyjoe

Unregistered / Unconfirmed
GUEST, unregistred user!
金山词霸启动时只显示 Splash 窗体,主窗体不出现而直接在SysTray上显示一图标。
我试了一下将 Application.ShowMainForm := False 实现不了他的效果。
 
你需要学会托盘区编程。

去找一个托盘图标控件就可以了。
下载地址:http://www.playicq.com/dispdoc.php?t=&id=1451
 
我已经知道怎么实现托盘了
只是想问如何不使主窗体在启动时不显示出来!!!
 
用Application.ShowMainForm := False 完全可以,你可能是少加了什么东西。

unit TrayIcon;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus,shellapi;

type
//----------------------------------------------------------------------
PNotifyIconData = ^TNotifyIconDataA;
TNotifyIconDataA = record
cbSize : DWORD;
Wnd : HWND;
uID : UINT;
uFlags : UINT;
uCallbackMessage : UINT;
hIcon : HICON;
szTip : array [0..63] of AnsiChar;
end;
//----------------------------------------------------------------------
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
open1: TMenuItem;
close1: TMenuItem;
N1: TMenuItem;
about1: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure open1Click(Sender: TObject);
procedure close1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
//-------------------------------------------------------------
IconData: TNotifyIconData;
procedure ShowIcon;
procedure IconOnClick(var message:TMessage); message WM_USER+1;
Procedure WMSysCommand(Var message : TMessage) ; Message WM_SYSCOMMAND ;
//-------------------------------------------------------------
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.IconOnClick( var message: Tmessage);
var p : TPoint;
begin
if (message.lParam = WM_LBUTTONDOWN) then
begin
ShowWindow(Handle, SW_SHOW );
end;

if (message.lParam = WM_RBUTTONDOWN) then
begin
GetCursorPos(p);
popupmenu1.Popup( p.x ,p.y );
end;
end;

Procedure TForm1.WMSysCommand(Var Message : TMessage) ;
begin

if (Message.WParam = SC_MINIMIZE) then
begin
ShowIcon;
end
else
Inherited;

end;

procedure TForm1.ShowIcon;
begin
IconData.cbSize := SizeOf( IconData );
IconData.Wnd := Handle;
IconData.uID := 1;
IconData.uFlags := NIF_ICON
or NIF_MESSAGE or NIF_TIP;
IconData.uCallBackMessage := WM_USER+1;
IconData.hIcon := application.Icon.Handle;
IconData.szTip := 'LANChat';
Shell_NotifyIcon( NIM_ADD, @IconData );
ShowWindow(Handle, SW_HIDE);
hide;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon( NIM_DELETE, @IconData );
end;

procedure TForm1.open1Click(Sender: TObject);
begin
Form1.Show;
end;

procedure TForm1.close1Click(Sender: TObject);
begin
Form1.close;
end;

procedure TForm1.FormShow(Sender: TObject);
begin

showwindow(application.handle,sw_hide);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
showicon;
end;

end.

============================
dpr文件:
program Project1;

uses
Forms,
TrayIcon in 'TrayIcon.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;

Application.CreateForm(TForm1, Form1);
Application.ShowMainForm := false;
Application.Run;
end.
 
做一个Splash 窗体。

在工程文件的Application.Initialize;
之后加入启动窗体。
 
http://xuhao23.myetang.com/ym/jiemian/

这里面有很多例子,去下吧。
 
我有一个笨办法,非常的笨,但是很有效。

去下载一个雨痕的XP界面的控件,delphi盒子就有下载,放上去后再删除。

你看怎么着?那个窗体没有了。嗬嗬,我就是这么做splash的。

笨不笨?笨就回复。嗬嗬
 
to: zw84611
应该是我把
Application.ShowMainForm := False
放错位置了。
我放在了
Application.CreateForm(TForm1, Form1);
前面
 
// 放错位置了。我放在了 Application.CreateForm(TForm1, Form1); 前面
那才对了!

Application.Initilize;
Application.ShowMainForm := False;
SplashForm := TSplashForm.Create(Application);
SplashForm.Show; // 显示 Splash 窗口
SplashForm.Update;
Sleep(2000); // 停留 2 秒
SplashForm.Close;
SplashForm.Free;
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TSplashForm, SplashForm); // 记得删除这一行(若有)
Application.Run;
...
 
学习来了
 
多人接受答案了。
 
顶部