📄 mainform.pas
字号:
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure FormResize(Sender: TObject);
private
protected
procedure setFOCUS1(var msg:TMESSAGE);message WM_SETFOCUS;
{ Private declarations }
public
BTBround:TBITMAP;
userPurview:purview;
dir:string;
resource:Thandle;
{ Public declarations }
end;
var
Main: TMain;
maskbmp,TEXTBmp,TitleBmp,SmallBtnbmp,quessbtnbmp,closebtnbmp,menubmp,pagebmp,pagebmp2,toolbarbmp:Tbitmap;
SmallBtn,CloseBtn,quessbtn:TRect;
mbinfo:Buttoninfo;
smallbtnDown,closebtndown,quessbtndown:Boolean;
format:TFormatSettings;
charwidth:integer;
mainsetini:TINIFILe;
implementation
uses DataModule;
{$R *.dfm}
function MyShowmessage(text:Pchar):boolean; external 'resource.dll';
procedure Tmain.sizing(var msg:TMEssage);
var
rectp:^Prect;
begin
rectp:=@(msg.LParam);
if rectp^.Bottom-rectp^.Top <= 100 then
begin
rectp^.Bottom:=rectp^.top+100;//getsystemmetrics(sm_cycaption)+getsystemmetrics(sm_cyframe)*4+toolbar1.Height;
end;
if rectp^.Right-rectp^.Left <= 520 then
begin
rectp^.Right:=rectp^.left+520;//getsystemmetrics(sm_cycaption)+getsystemmetrics(sm_cyframe)*4+toolbar1.Height;
end;
self.Repaint;
end;
procedure Tmain.WMQUERYOPEN(var msg:TMEssage);
begin
showwindow(main.Handle,sw_ShowNormal);
end;
procedure Tmain.WMNCLBUTTONUP(var msg:TWMNCLBUTTONDown);
var
pt:Tpoint;
begin
getcursorpos(pt);
pt:=screentoclient(pt);
pt.y:=pt.y+getsystemmetrics(sm_cycaption);
if ptinrect(smallBtn,pt)and smallbtndown then
begin
showwindow(application.Handle,SW_MINIMIZE);
smallbtndown:=false;
end;
if ptinrect(closebtn,pt) and closebtndown then
begin
sendmessage(self.Handle,wm_Close,0,0);
closebtndown:=false;
end;
if ptinrect(quessbtn,pt) and quessbtndown then
begin
WinHelp(self.Handle,pchar(dir+'\help.hlp'),HELP_CONTENTS ,0);
quessbtndown:=false;
end;
inherited;
end;
procedure Tmain.WMNCLBUTTONDown(var msg:TWMNCLBUTTonDown);
var
pt:Tpoint;
begin
getcursorpos(pt);
pt:=screentoclient(pt);
pt.y:=pt.y+getsystemmetrics(sm_cycaption);
if ptinrect(smallBtn,pt) then //smallbtn down test
Begin //small true
mbinfo.HowButton:=1;
mbinfo.Status:=Mybuttondown;
drawbtn(mbinfo);
msg.HitTest:=HTCLIENT;
smallbtndown:=true;
End //small true
Else
if ptinrect(closebtn,pt) then //closebtn down test
Begin //close true
mbinfo.HowButton:=2;
mbinfo.Status:=Mybuttondown;
drawbtn(mbinfo);
msg.HitTest:=HTCLIENT;
closebtndown:=true;
End //close true
Else
if ptinrect(quessbtn,pt) then //quessbtn down test
Begin //quess true
mbinfo.HowButton:=3;
mbinfo.Status:=Mybuttondown;
drawbtn(mbinfo);
msg.HitTest:=HTCLIENT;
quessbtndown:=true;
End; //quess true
inherited;
end;
procedure Tmain.DrawBtn(var btinfo:buttonInfo);
var
xFrame,yFrame,captiony:Integer;
Whdc:HDC;
begin
whdc:=getwindowdc(self.Handle);
Xframe:=getsystemMetrics(SM_CXFRAME);
yframe:=getsystemMetrics(SM_CYFRAME);
captiony:=getsystemMetrics(SM_CYcaption);
case btinfo.HowButton of
1:
begin //最小化按钮
smallbtn:=bounds(Width-xFrame-2*(captiony-yframe-5)-6,yframe,captiony-yframe-5,captiony-yframe-5); //设置按钮区域
if screen.ActiveForm = self then
stretchblt(whdc,smallbtn.Left,smallbtn.Top,smallbtn.Right-smallbtn.Left,smallbtn.Bottom-smallbtn.Top,Whdc,Width-xFrame-3*(captiony-yframe-5)-9,smallbtn.Top,smallbtn.Right-smallbtn.Left-32,smallbtn.Bottom-smallbtn.Top,srccopy);
stretchblt(whdc,smallbtn.Left,smallbtn.Top,smallbtn.Right-smallbtn.Left,smallbtn.Bottom-smallbtn.Top,maskbmp.canvas.Handle,btinfo.Status*32,0,32,32,srccopy);
stretchblt(whdc,smallbtn.Left,smallbtn.Top,smallbtn.Right-smallbtn.Left,smallbtn.Bottom-smallbtn.Top,smallbtnbmp.canvas.Handle,btinfo.Status*32,0,32,32,srcand);
end;
2:
begin //关闭按钮
closebtn:=bounds(Width-xFrame-(captiony-yframe-5)-3,yframe,captiony-yframe-5,captiony-yframe-5); //设置按钮区域
if screen.ActiveForm = self then
stretchblt(whdc,closebtn.Left,closebtn.Top,closebtn.Right-closebtn.Left,closebtn.Bottom-closebtn.Top,Whdc,Width-xFrame-3*(captiony-yframe-5)-9,closebtn.Top,closebtn.Right-closebtn.Left-32,closebtn.Bottom-closebtn.Top,srccopy);
stretchblt(whdc,closebtn.Left,closebtn.Top,closebtn.Right-closebtn.Left,closebtn.Bottom-closebtn.Top,Maskbmp.canvas.Handle,btinfo.Status*32,0,32,32,srccopy);
stretchblt(whdc,closebtn.Left,closebtn.Top,closebtn.Right-closebtn.Left,closebtn.Bottom-closebtn.Top,closebtnbmp.canvas.Handle,btinfo.Status*32,0,32,32,srcand);
end;
3: // 问号按钮
begin
quessbtn:=bounds(Width-xFrame-3*(captiony-yframe-5)-9,yframe,captiony-yframe-5,captiony-yframe-5); //设置按钮区域
if screen.ActiveForm = self then
stretchblt(whdc,quessbtn.Left,quessbtn.Top,quessbtn.Right-quessbtn.Left,quessbtn.Bottom-quessbtn.Top,Whdc,Width-xFrame-3*(captiony-yframe-5)-9,quessbtn.Top,quessbtn.Right-quessbtn.Left-32,quessbtn.Bottom-quessbtn.Top,srccopy);
stretchblt(whdc,quessbtn.Left,quessbtn.Top,quessbtn.Right-quessbtn.Left,quessbtn.Bottom-quessbtn.Top,Maskbmp.canvas.Handle,btinfo.Status*32,0,32,32,srccopy);
stretchblt(whdc,quessbtn.Left,quessbtn.Top,quessbtn.Right-quessbtn.Left,quessbtn.Bottom-quessbtn.Top,quessbtnbmp.canvas.Handle,btinfo.Status*32,0,32,32,srcand);
end;
end;
releasedc(self.Handle,whdc);
end;
procedure Tmain.NCmouseMove(var msg: Tmessage);
var
pt:tPoint;
begin
getcursorpos(pt);
pt:=screentoclient(pt);
pt.y:=pt.y+getsystemmetrics(sm_cycaption);
if ptinrect(smallBtn,pt) then //最小化按钮判断
begin //smallbtn down
if smallbtndown then
begin
mbinfo.HowButton:=1;
mbinfo.Status:=Mybuttondown;
drawbtn(mbinfo);
end
else
begin
mbinfo.HowButton:=1;
mbinfo.Status:=Mybuttonmove;
drawbtn(mbinfo);
end;
end //smallbtn down
else
begin
begin //smallbtn not down
mbinfo.HowButton:=1;
mbinfo.Status:=Mybuttonnormal;
drawbtn(mbinfo);
smallbtndown:=false;
end; //smallbtn not down
if ptinrect(closebtn,pt) then //关闭按钮判断
begin // close down
if closebtndown then
begin
mbinfo.HowButton:=2;
mbinfo.Status:=Mybuttondown; //按下状态
drawbtn(mbinfo);
end
else
begin
mbinfo.HowButton:=2;
mbinfo.Status:=Mybuttonmove; //移动状态
drawbtn(mbinfo);
end;
end //close down
else
begin
begin //close not down
mbinfo.HowButton:=2;
mbinfo.Status:=Mybuttonnormal; //一般状态
drawbtn(mbinfo);
closebtndown:=false;
end; //close not down
if ptinrect(quessbtn,pt) then //问号按钮判断
begin // quess down
if quessbtndown then
begin
mbinfo.HowButton:=3;
mbinfo.Status:=Mybuttondown; //按下状态
drawbtn(mbinfo);
end
else
begin
mbinfo.HowButton:=3;
mbinfo.Status:=Mybuttonmove; //移动
drawbtn(mbinfo);
end;
end //quess down
else
begin //quess not down
mbinfo.HowButton:=3;
mbinfo.Status:=Mybuttonnormal; //一般
drawbtn(mbinfo);
quessbtndown:=false;
end; //quess not down
end;
end;
end;
procedure Tmain.Active(var msg:Tmessage);
begin
sendmessage(main.Handle,WM_Paint,0,0);
main.Broadcast(msg);
end;
procedure Tmain.setFOCUS1(var msg:Tmessage);
begin
//
end;
procedure Tmain.CreateParams(var Params: TCreateParams);
begin
inherited;
params.Style:=params.Style-WS_SYSMENU;
end;
procedure Tmain.WMPAINT(var msg:TWMPAINT);
begin
inherited;
sendmessage(self.Handle,WM_NCPAINT,0,0);
if not N42.Checked then
begin
canvas.StretchDraw(clientrect,BTBround);
end;
end;
procedure Tmain.WMdbclick(var msg:Tmessage);
begin
inherited;
if splitter1.Left < self.Left+pagecontrol1.TabWidth then
begin
panel3.Width:= self.Width-pagecontrol1.TabWidth-splitter1.Width;
end;
sendmessage(self.Handle,WM_PAINT,0,0);
end;
procedure Tmain.WMNCPAINT(var msg:TWMNCPAINT);
var
dc1:HDC;
y,frame:integer;
oldbrush:HBrush;
oldpen,pen:HPEN;
i:integer;
msgs:Tmessage;
oldfont,newfont:HFont;
logfonts:taglogfonta;
rect1:Trect;
begin
// inherited;
dc1:=getwindowdc(main.Handle);
y:=GetSystemMetrics(SM_CYSIZE);
frame:=GetSystemMetrics(SM_CYSIZEFRAME);
//setup charfont
logfonts.lfHeight:=GetSystemMetrics(SM_CYcaption);
logfonts.lfWidth:=GetSystemMetrics(SM_CYcaption)div 5*3;
logfonts.lfWeight:=0;
logfonts.lfUnderline:=0;
logfonts.lfStrikeOut:=0;
logfonts.lfItalic:=0;
logfonts.lfEscapement:=0;
logfonts.lfOrientation:=0;
logfonts.lfFaceName:='楷体_GB2312';
logfonts.lfCharSet:=gb2312_charset;
//setup charfont end
oldbrush:=selectobject(dc1,getstockobject(null_brush));
pen:=createpen(PS_SOLID,frame*2,rgb(255,255,255));
oldpen:=selectobject(dc1,pen);
//rectangle(dc1,0,0,main.Width,main.Height);
//framerect(dc1,rect(0,0,self.Width,self.Height) ,createsolidbrush(rgb(150,150,150)));
oldbrush:=selectobject(dc1,getstockobject(null_brush));
pen:=createpen(PS_SOLID,1,rgb(155,155,155));
oldpen:=selectobject(dc1,pen);
RoundRect(dc1,0,0,Width,Height,12,12);
pen:=createpen(PS_SOLID,frame*2-5,rgb(255,255,255));
selectobject(dc1,pen);
RoundRect(dc1,2,2,Width-2,Height-2,8,10);
StretchBlt(dc1,frame,frame,main.Width-2*frame,y+frame div 2,titlebmp.Canvas.Handle,0,0,titlebmp.Width,titlebmp.Height,srccopy);
newfont:=createfontindirect(logfonts);
oldfont:=selectobject(dc1,newfont);
rect1:=rect(frame,frame,main.Width-2*frame,y+frame div 2);
setbkmode(dc1,TRANSPARENT);
drawtext(dc1,pchar(self.Caption),length(self.Caption),rect1,DT_CENTER+DT_VCENTER);
imagelist1.GetBitmap(0,textbmp);
StretchBlt(dc1,frame*2, GetSystemMetrics(SM_CYcaption)div 2-8,GetSystemMetrics(SM_CYcaption)-frame*2,GetSystemMetrics(SM_CYcaption)-frame*2,maskbmp.Canvas.Handle,0,0,maskbmp.Width,maskbmp.Height,srccopy);
StretchBlt(dc1,frame*2, GetSystemMetrics(SM_CYcaption)div 2-8,GetSystemMetrics(SM_CYcaption)-frame*2,GetSystemMetrics(SM_CYcaption)-frame*2,textbmp.Canvas.Handle,0,0,textbmp.Width,textbmp.Height,srcand);
pen:=createpen(PS_SOLID,1,rgb(155,155,155));
selectobject(dc1,pen);
movetoex(dc1,frame,y+frame,nil);
lineto(dc1,Width-frame,y+frame);
selectobject(dc1,oldbrush);
selectobject(dc1,oldpen);
selectobject(dc1,oldfont);
deleteObject(pen);
deleteobject(newfont);
releasedc(main.Handle,dc1);
msgs.Msg:=WM_PAint;
self.Broadcast(msgs);
for i:=0 to 3 do
begin
mbinfo.HowButton:=i;
mbinfo.Status:=Mybuttonnormal;
DrawBtn(mbinfo);
end;
toolbar1.Repaint;
end;
procedure TMain.FormCreate(Sender: TObject);
begin
setwindowrgn(self.Handle,CreateRoundRectRgn(0,0,Width+1,Height+1,8,10),true);
imagelist1.GetIcon(0,application.Icon);
getdir(0,dir);
resource:=Loadlibrary(PCHAR(dir+'\resource.dll'));
if not (resource > 32) then
begin
showmessage('对不起!所需要文件不存在,请重新安装本系统!');
application.Terminate;
end;
TitleBmp:=Tbitmap.Create;
textbmp:=Tbitmap.Create;
maskbmp:=Tbitmap.Create;
maskbmp.Mask(rgb(0,0,0));
SmallBtnbmp:=tbitmap.Create;
closeBtnbmp:=tbitmap.Create;
quessbtnbmp:=Tbitmap.Create;
pagebmp:=Tbitmap.Create;
pagebmp2:=Tbitmap.Create;
menubmp:=Tbitmap.create;
menubmp.LoadFromResourceName(resource,'menu');
pagebmp.LoadFromResourceName(resource,'page');
pagebmp2.LoadFromResourceName(resource,'page2');
Titlebmp.LoadFromResourceName(resource,'title');
SmallBtnbmp.LoadFromResourceName(resource,'smallbtn');;
closebtnbmp.LoadFromResourceName(resource,'closebtn');
quessbtnbmp.LoadFromResourceName(resource,'quessbtn');
statictext22.loadMyresource(resource,'Buttontext');
statictext24.loadMyresource(resource,'Buttontext');
statictext30.loadMyresource(resource,'Buttontext');
statictext32.loadMyresource(resource,'Buttontext');
statictext31.loadMyresource(resource,'Buttontext');
statictext33.loadMyresource(resource,'Buttontext');
toolbarbmp:=Tbitmap.Create;
toolbarbmp.LoadFromResourceName(resource,'toolbar');
format.TimePMString:='下午';
format.TimeAMString:='上午';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -