Y
ybxiao577
Unregistered / Unconfirmed
GUEST, unregistred user!
主窗体是一个MDI窗体,上面pnlTop是工具栏,左边还有一个导航条,客户区就是用Canvas画的一个背景图(当然打开的子窗体也是在该区域显示)。
比如我现在要做一个隐藏左边导航条的功能,因为这时候改变了客户区的大小,这时候我希望背景图能被拉申,在新的客户区显示出来。目前我调用FormPaint()或者是Invalidate()方法都没有达到需要效果。
大致代码如下:
procedure TMainForm.FormPaint(Sender: TObject);
var
rect: TRect;
begin
rect := GetClientRect;
rect.Right := rect.Right - tvTJFL.Width ;
rect.Bottom := rect.Bottom - pnlTop.Height - StatusBar.Height ;
if Assigned(bmp) then
Canvas.StretchDraw(rect, bmp) ;//bmp是一个类变量,有定义也有赋值
end;
procedure TMainForm.HideNavigatorClick(Sender: TObject);
begin
TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
if TMenuItem(Sender).Checked then
begin
oldWidth := pnlLeft.Width;
pnlLeft.Width := 0;
end
else
pnlLeft.Width := oldWidth;
Invalidate;
end;
procedure TMainForm.FormResize(Sender: TObject);
begin
Invalidate
end;
比如我现在要做一个隐藏左边导航条的功能,因为这时候改变了客户区的大小,这时候我希望背景图能被拉申,在新的客户区显示出来。目前我调用FormPaint()或者是Invalidate()方法都没有达到需要效果。
大致代码如下:
procedure TMainForm.FormPaint(Sender: TObject);
var
rect: TRect;
begin
rect := GetClientRect;
rect.Right := rect.Right - tvTJFL.Width ;
rect.Bottom := rect.Bottom - pnlTop.Height - StatusBar.Height ;
if Assigned(bmp) then
Canvas.StretchDraw(rect, bmp) ;//bmp是一个类变量,有定义也有赋值
end;
procedure TMainForm.HideNavigatorClick(Sender: TObject);
begin
TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
if TMenuItem(Sender).Checked then
begin
oldWidth := pnlLeft.Width;
pnlLeft.Width := 0;
end
else
pnlLeft.Width := oldWidth;
Invalidate;
end;
procedure TMainForm.FormResize(Sender: TObject);
begin
Invalidate
end;