📄 unit_main.pas
字号:
finally
regRunself.Free;
// inherited;
end;
end
else
begin
try
regRunself.RootKey := HKEY_LOCAL_MACHINE;
If regRunself.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',true) then
begin
if regRunself.ValueExists('DesktopPic') then
begin
regRunself.DeleteValue('DesktopPic'); //取消自动运行
end;
regRunself.CloseKey;
end;
finally
regRunself.Free;
// inherited;
end;
end;
//载入图像列表
PicList.ListFolder(ImgLocalFolder);
//DidChange;
end;
procedure TFrm_Main.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND,$f012,0);
case ImgLockPoint of //0左上角,1右上角,2左下角,3右下角,4正中间
0:
begin
ImgLocalLeft:=frm_main.Left;
ImgLocaltop:=frm_main.top;
end;
1:
begin
ImgLocalLeft:=frm_main.Left+frm_main.ClientWidth;
ImgLocaltop:=frm_main.top;
end;
2:
begin
ImgLocalLeft:=frm_main.Left;
ImgLocaltop:=frm_main.top+frm_main.Height;
end;
3:
begin
ImgLocalLeft:=frm_main.Left+frm_main.Width;
ImgLocaltop:=frm_main.top+frm_main.Height;
end;
4:
begin
ImgLocalLeft:=frm_main.Left+(frm_main.Width div 2);
ImgLocaltop:=frm_main.top+(frm_main.Height div 2);
end;
else ;
end;
end;
procedure TFrm_Main.N1Click(Sender: TObject);
begin
Frm_State.show;
end;
procedure TFrm_Main.N2Click(Sender: TObject);
begin
if Image2.Visible then
Image2.Visible:=False
else
Image2.Visible:=true;
//Sleep(100);
//Image2.Visible:=false;
end;
procedure TFrm_Main.N3Click(Sender: TObject);
begin
Frm_Main.Close;
end;
procedure TFrm_Main.redraw;
var
rgn: HRGN;
begin
rgn := CreateRectRgn(0,0,0,0);
GetWindowRgn(Self.Handle, rgn);
Brush.Color := ImgWindowcolor; //先是黑色边框吧~
windows.FrameRgn(Handle, rgn, Brush.Handle, 0, 0);
DeleteObject(rgn);
Frm_Main.Height:=image1.Height+2;
Frm_Main.Width:=image1.Width+2;
case ImgLockPoint of //0左上角,1右上角,2左下角,3右下角,4正中间
//为什么必须加这点值?
0:
begin
frm_main.Left:=ImgLocalLeft;
frm_main.top:=ImgLocaltop;
end;
1:
begin
frm_main.Left:=ImgLocalLeft-frm_main.Width;
frm_main.top:=ImgLocaltop;
end;
2:
begin
frm_main.Left:=ImgLocalLeft;
frm_main.top:=ImgLocaltop-frm_main.ClientHeight;
end;
3:
begin
frm_main.Left:=ImgLocalLeft-frm_main.ClientWidth;
frm_main.top:=ImgLocaltop-frm_main.ClientHeight;
end;
4:
begin
frm_main.Left:=ImgLocalLeft-(frm_main.ClientWidth div 2);
frm_main.top:=ImgLocaltop-(frm_main.ClientHeight div 2);
end;
else ;
end;
end;
{****************************************************************}
//托盘管理
procedure TFrm_Main.TrayShow(Sender: TObject);
//当点击托盘图标时显示或隐含主窗体
begin
//设定 TNotifyIconData 的记录长度
MyTrayIcon.cbSize :=SizeOf(tnotifyicondata);
//确定调用程序的窗体句柄
MyTrayIcon.Wnd :=Handle;
//确定图标的 uID
MyTrayIcon.uID :=1;
//设定显示标记
MyTrayIcon.uFlags :=NIF_ICON or NIF_TIP or NIF_MESSAGE;
//用户自定义消息
MyTrayIcon.uCallbackMessage := WM_MYTRAYICONCALLBACK;
//托盘图标的句柄
MyTrayIcon.hIcon := Application.Icon.Handle;
//托盘图标的提示信息
MyTrayIcon.szTip :='金管家桌面画廊';
//向托盘中添加图标
Shell_NotifyIcon(NIM_ADD,@mytrayicon);
end;
procedure TFrm_Main.WMMyTrayIconCallBack(var Msg: TMessage);
//处理点击托盘图标的事件,根据 WM_MOUSEMOVE 消息的不同情况产生不同的回应
var
CursorPos : TPoint;
begin
case Msg.lParam of
//左键按下
{WM_LBUTTONDOWN :
begin
BringToFront; //窗体置前
end;
//左键双击
WM_LBUTTONDBLCLK :
//窗体隐含或显示
begin
Visible := not Visible ;
Application.ShowMainForm := Visible ;
SetForegroundWindow(Application.Handle);
end ;
}
//右键按下
WM_RBUTTONDOWN : begin //显示弹出菜单
GetCursorPos(CursorPos);
//TrayBarPopMenu.Popup(CursorPos.x,CursorPos.y);
PopupMenu1.Popup(CursorPos.x,CursorPos.y);
end;
end//case
end;
procedure TFrm_Main.ReadIni;
var
iniF:TiniFile;
tmpstr:string;
begin
try
tmpstr:=extractFilePath(ParamStr(0)); //取目录
iniF:=TiniFile.create(tmpstr+'gallery.ini');
Alphafrm:=StrToInt(iniF.ReadString('桌面画廊','主窗体透明度','0'));
ImgChangeTime:=StrToInt(iniF.ReadString('桌面画廊','图片切换时间','30'));
//ImgWhere:=StrToInt(iniF.ReadString('桌面画廊','图片来源','1')); //图片来源(0金管家,1本地)
ImgLocalFolder:=iniF.ReadString('桌面画廊','图像所在文件夹','c:\');
ImgViewType:=StrToInt(iniF.ReadString('桌面画廊','播放方式','0'));
ImgFrmlayer:=StrToInt(iniF.ReadString('桌面画廊','窗口位置','1'));
ImgLockPoint:=StrToInt(iniF.ReadString('桌面画廊','图像调整基准点','0'));
ImgMouseIn:=StrToBool(iniF.ReadString('桌面画廊','鼠标穿透','false'));
ImgLarge:=StrToInt(iniF.ReadString('桌面画廊','最大图片长度','640'));
ImgAutoRun:=StrToBool(iniF.ReadString('桌面画廊','开机是否自动运行','false'));
ImgLocalLeft:=StrToInt(iniF.ReadString('桌面画廊','默认基准点X坐标','1'));
ImgLocaltop:=StrToInt(iniF.ReadString('桌面画廊','默认基准点Y坐标','1'));
finally
iniF.free;
end;
end;
procedure TFrm_main.WriteIni;
var
iniF:TiniFile;
tmpstr:string;
begin
try
tmpstr:=extractFilePath(ParamStr(0)); //取目录
iniF:=TiniFile.create(tmpstr+'gallery.ini');
iniF.WriteString('桌面画廊','主窗体透明度',IntToStr(Alphafrm));
iniF.WriteString('桌面画廊','图片切换时间',IntToStr(ImgChangeTime));
//iniF.WriteString('桌面画廊','图片来源',IntToStr(ImgWhere));
iniF.WriteString('桌面画廊','图像所在文件夹',ImgLocalFolder);
iniF.WriteString('桌面画廊','播放方式',IntToStr(ImgViewType));
iniF.WriteString('桌面画廊','窗口位置',IntToStr(ImgFrmlayer));
iniF.WriteString('桌面画廊','图像调整基准点',IntToStr(ImgLockPoint));
iniF.WriteString('桌面画廊','鼠标穿透',BoolToStr(ImgMouseIn));
iniF.WriteString('桌面画廊','最大图片长度',IntToStr(ImgLarge));
iniF.WriteString('桌面画廊','开机是否自动运行',BoolToStr(ImgAutoRun));
iniF.WriteString('桌面画廊','默认基准点X坐标',IntToStr(ImgLocalLeft));
iniF.WriteString('桌面画廊','默认基准点Y坐标',IntToStr(ImgLocaltop));
finally
iniF.free;
end;
end;
procedure TFrm_Main.FormDestroy(Sender: TObject);
begin
WriteIni;
delIcon;
end;
procedure TFrm_Main.delIcon;
var {程序被关闭时通知Windows去掉小图标}
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := 1; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
end;
procedure TFrm_Main.FormShow(Sender: TObject);
begin
redraw;
TrayShow(Application.MainForm);//显示图标;
end;
procedure TFrm_Main.FormPaint(Sender: TObject);
begin
//Frm_Main.Canvas.Draw(1,1,Image1.Picture.Graphic);
end;
procedure TFrm_Main.WMDROPFILES(var Msg: TMessage);
var
//FilesCount: Integer; // 文件总数
//i: Integer;
FileName: array[0..255] of Char;
tmpname:string;
begin
{Memo1.Clear;
// 获取文件总数
FilesCount := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
Memo1.Lines.Add('文件总数为:' + IntToStr(FilesCount));
// 获取文件名
for i := 0 to FilesCount - 1 do
begin
DragQueryFile(Msg.WParam, i, FileName, 256);
Memo1.Lines.Add(FileName)
end;
// 释放
DragFinish(Msg.WParam); }
//只对第一个文件操作
DragQueryFile(Msg.WParam, 0, FileName, 256);
tmpname:=string(FileName);
if Unit_Listpic.ispicture(FileName) then
FnLoadImage(tmpname);
DragFinish(Msg.WParam);
end;
//
{问题:
--1、我的电脑选择时应该是没有图像的,或者是不允许选图像
哈哈~~实现了学YAHOO,不是文件夹就不能选
--2、图像的边框应该是绘制,而且可选择多种风格 先藏起来,用一黑框代替
--3、应该采用INI支持,使软件能保存其属性 解决~
--4、图像应每次更替时确定一个定位点
--5、图像的最大大小应该确定,若超过的话应按比例缩小显示
--6、好像有时右下脚图标显示有问题~
7、要支持更换图像上一张、下一张 暂停
--8、支持拖动 临时显示
9、点击显示文件名
--10、切换要用ALPHA,以挡住现在的两次晃
//控制按钮,应该是个透明下拉的面板,点时处理
//有一个LIST,里面纪录了图片的地址,每次从里面读取
//三个缓存MEMORYSTREAM,现在图片,下一图片,上一图片,当读取下一图片时就进行再读取
}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -