Canvas.StretchDraw在窗体改变大小后,画出的图片不正常--并没有拉申;而用Alt+Tab切换一次后(或者在任务栏中点击两次),窗体中画出的才是正确拉申后的图片。怎样才可以在FormResize中也模拟出这种拉申效果呢?大致代码如下:
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.FormResize(Sender: TObject);
begin
Invalidate
end;
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.FormResize(Sender: TObject);
begin
Invalidate
end;
解决方案 »
- 这是什么病毒,害死我了
- 哪里有现成的自动建立数据库表的控件或小应用?
- 如何隐藏掉窗体在任务栏的图标,注意,是任务栏上的,不是托盘上的图标
- 高份请教*用类库创建函数不能调用
- 看看如下的Spcomm的代码如何实现
- 用Inno Setup如何做有启动画面的安装?怎样改变安装窗口中左边的图片为自己的图片?
- 为什么我用Delphi7编写的发邮件程序总是出错?
- delphi 6.0 连接 oracle 出现问题?救救我把!!!
- 急急!!!在DELPHI5+SQL2000中,用BDE+TABLE+DBGRIG控件,为什么在修改或者删除时提示“RECORD/KEY DELETE错误”
- 求idpop收取邮件后,对=?gbk?b?。解码的代码。。。。
- windows拨号上网触发了什么事件,回答就给分
- 有高手跟我探讨一下SocketConnection里面的IDataIntercept接口问题,或Socket连接用户认证吗?
Form1.AutoCroll:=False ;
AutoScroll :=False
主窗体是一个MDI窗体,上面pnlTop是工具栏,左边还有一个导航条,客户区就是用Canvas画的一个背景图(当然打开的子窗体也是在该区域显示)。比如我现在要做一个隐藏左边导航条的功能,因为这时候改变了客户区的大小,这时候我希望背景图能被拉申,在新的客户区显示出来。目前我调用FormPaint()或者是Invalidate()方法都没有达到需要效果。代码如下:
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;
试过了,不行,AutoSize设置为True的话,窗体大小就不能发生改变了。而AutoScroll也好像没什么作用。我看帮助中对这两个属性的描述,好像与我的问题关系不大
谢谢,你的方法不错,可是系统要求是MDI窗口,如果用Image控件的话,子窗体就看不到了,所以只能在form的canvas上画背景图了:-(