📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ToolWin, ImgList, jpeg, Menus,ShellAPI,
Buttons;
type
TForm1 = class(TForm)
tmr1: TTimer;
tmr2: TTimer;
pnl1: TPanel;
btn1: TBitBtn;
btn2: TBitBtn;
btn3: TBitBtn;
procedure tmr1Timer(Sender: TObject);
procedure tmr2Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
procedure img2Click(Sender: TObject);
procedure UE1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
t : Integer;
message : MY_MESSAGE;
function GetFormNameAt(const Pos: TPoint): string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetFormNameAt(const Pos: TPoint): string;
var
w: TWinControl;
begin
//得到鼠标指针下的VCL可视组件
w:= FindVclWindow(Pos);
if (w <> nil) then
begin
//当W的上级Parent不为空时就继续往上找
while w.Parent <> nil do
w:= w.Parent;
//最后返回窗体的名称Name
Result:= w.Name;
end
else
Result:= '';
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
// 当 top 距屏幕上侧 20 像素时,自动隐藏
if Form1.Top <= 20 then
begin
//将frmMain向上移,在屏幕上方露出3像素
Form1.Top:= -(Form1.Height - 3);
if (Form1.Left + Form1.Width > Screen.Width) then
Form1.Left:= Screen.Width - Form1.Width;
end
// 当 left 距屏幕下侧 20 像素时,自动隐藏
else if Form1.Left + Form1.Width - Screen.Width >= -20 then
//将frmMain向右移,在屏幕右方露出4像素
Form1.Left:= Screen.Width - 4;
end;
procedure TForm1.tmr2Timer(Sender: TObject);
var
winPos: TPoint;
bflag : Boolean;
begin
//
bflag := False;
if Form1.Top <=3 then
begin
bflag := True;
t := 0;
end
else if Form1.Left + Form1.Width - Screen.Width >=0 then
begin
bflag := True;
t := Form1.Top;
end
else
t := Form1.Top;
if bflag then
begin
Form1.SetFocus;
//得到当前鼠标指针的在屏幕上的坐标
GetCursorPos(winPos);
//当鼠标指针下的窗体的Name等于frmMain.name时
if Form1.Name = GetFormNameAt(winPos) then
{在此我们可以为frmMain取一个特别的名称,以防有别的窗体名称与它相同}
begin
//停用tmr1
Form1.tmr1.Enabled:= false;
//frmMain的Top与屏幕对齐
Form1.Top:= t;
if t <> 0 then
Form1.Left:= Screen.Width - Form1.Width;
end
else begin
Form1.tmr1.Enabled:= true;
end;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.Top := - Form1.Height +3;
end;
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
NewWidth := Form1.Width;
NewHeight := Form1.Height;
end;
procedure TForm1.img2Click(Sender: TObject);
begin
Winexec('D:\PLSQL Developer\PlSqlDev.exe',SW_SHOW);
end;
procedure TForm1.UE1Click(Sender: TObject);
begin
Winexec('D:\UltraEdit-32\Uedit32.exe',SW_SHOW);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.Wnd := Handle; // 主窗口句柄
nid.uID := 0; // 内部标识,可设为任意数
nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指定
nid.szTip := 'This is a test application'; // 提示字符串
nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息
nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有效
if not Shell_NotifyIcon(NIM_ADD, @nid) then begin
ShowMessage('Failed!');
Application.Terminate;
end;
{将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
Winexec('C:\Program Files\Sybase\PowerBuilder 9.0\pb90.exe',SW_SHOW);
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
Winexec('D:\PLSQL Developer\PlSqlDev.exe',SW_SHOW);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := 0; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -