Timage控件的问题

喝口水 2009-10-22 09:31:47
procedure TForm1.FormResize(Sender: TObject);
var
d,k:integer;
i:integer;
begin
image1.Top:=20;
image1.Height:=self.ClientHeight-40;
d:=image1.Height*9 div 10;
image1.Width:=d; //注:上面这部分省略可以看到下面画的线,但加上就不行了
with image1.Picture.Bitmap.Canvas do
begin
pen.Width:=2;
pen.Color:=clblack;
MoveTo(image1.Width-10,20);
lineto(image1.Width-10,100);//这儿画的线,为啥看不到呢,帮忙给看一下
end;
end;
...全文
297 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
喝口水 2009-11-14
  • 打赏
  • 举报
回复
谢谢楼上的,接贴
不得闲 2009-11-14
  • 打赏
  • 举报
回复
晕撒的,干啥子用TImage来搞!
TImage处理了一票消息,我挺楼上的 毛老大的说法
建议,楼主直接从TGraphicControl写一个自己处理绘制,会比TImage单纯许多
phyf_Anlymi 2009-11-14
  • 打赏
  • 举报
回复
检查image1的autosize属性和strech属性
ITlover 2009-11-12
  • 打赏
  • 举报
回复
procedure TForm1.FormResize(Sender: TObject);
var
d,k:integer;
i:integer;
begin
//以下两种,你挑一种

{ image1.Top:=20; //第一种,OK
image1.Height:=self.ClientHeight-40;
d:=image1.Height*9 div 10;
image1.Width:=d;
with image1.Canvas do
begin
pen.Width:=2;
pen.Color:=clblack;
MoveTo(image1.Width-10,20);
lineto(image1.Width-10,100);
end;
}

image1.Top:=20; //第二种,OK
image1.Height:=self.ClientHeight-40;
d:=image1.Height*9 div 10;
image1.Width:=d;
image1.Picture.Bitmap.Width:=image1.Width;
image1.Picture.Bitmap.Height:=image1.Height;
with image1.Picture.Bitmap.Canvas do
begin
brush.Color:=clwhite;
fillrect(rect(0,0,image1.Width,image1.Height));
pen.Width:=2;
pen.Color:=clblack;
MoveTo(image1.Width-10,20);
lineto(image1.Width-10,100);
end;
end;
wliaoc 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 hys_427 的回复:]
procedure TForm1.FormResize(Sender: TObject);
var
  d,k:integer;
  i:integer;
begin
  image1.Top:=20;
  image1.Height:=self.ClientHeight-40;
  d:=image1.Height*9 div 10;
  image1.Width:=d;      //注:上面这部分省略可以看到下面画的线,但加上就不行了
  with image1.Picture.Bitmap.Canvas do
  begin
    pen.Width:=2;
    pen.Color:=clblack;
    MoveTo(image1.Width-10,20);
    lineto(image1.Width-10,100);//这儿画的线,为啥看不到呢,帮忙给看一下
  end;
end;
[/Quote]
image1是否改变了?
MoveTo(image1.Width-10,20);
lineto(image1.Width-10,100);//这儿画的线,为啥看不到呢,帮忙给看一下
这两行直接改成从左上角画到右下角的线,看看画线功能是否正常再说
画线能正常显示了,再考虑是否是因为画的线不在画布上导致不能显示。
xzhifei 2009-11-03
  • 打赏
  • 举报
回复
加一行:
Image1.Update;
ZyxIp 2009-11-03
  • 打赏
  • 举报
回复
象棋棋盘这种软件,应该不需要进行缩放的,一个固定大小的棋盘,棋子就可以了。
喝口水 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 maozefa 的回复:]
TImage大小改变后,与之对应的的Picture.Bitmap必须缩放到TImage一样的大小,再画线才能看到线条,否则,先画线条,因为TImage自动缩放图像,在“缩”的时候,就有可能把线条“缩”没了。
[/Quote]
谢谢你的提醒,我试一下
喝口水 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mwy654321 的回复:]
可以说,你这段代码写得非常冗余,乱写一气。

image1.Picture.Bitmap.Height:=image1.Height;
image1.Picture.Bitmap.Width:=image1.Width;
这种写法很不好。

你描述下你要的功能,代码我可以给你写出来。
[/Quote]
先谢谢你了,我要的是当窗口改变大小时,image1控件纵横比按10比9缩放
image1.Top:=20;
image1.Height:=self.ClientHeight-40;
d:=image1.Height*9 div 10;
image1.Width:=d;
//上面代码便是实现这个目的,呵呵,我是想在image1控件里一个象棋棋盘的
当然棋盘要有一个好看的背景了,所以导入了一张图片,所以便有下面的代码
image1.Picture.Bitmap.Height:=image1.Height;
image1.Picture.Bitmap.Width:=image1.Width; //当然这两句也可以不写,有病乱投医加上的
Image1.Picture.Bitmap.LoadFromFile('board2.bmp');
//因为要锁定纵横比,所以在onResize事件中加了代码,别见笑,纵横比调整好后,画线的时候出现问题了,便是上面的问题,请帮忙解决一下

喝口水 2009-10-23
  • 打赏
  • 举报
回复
上面的都没有给把问题解决掉,继续顶
sandok 2009-10-23
  • 打赏
  • 举报
回复
初学者学习一下
无条件为你 2009-10-23
  • 打赏
  • 举报
回复
可以说,你这段代码写得非常冗余,乱写一气。

image1.Picture.Bitmap.Height:=image1.Height;
image1.Picture.Bitmap.Width:=image1.Width;
这种写法很不好。

你描述下你要的功能,代码我可以给你写出来。
ZyxIp 2009-10-23
  • 打赏
  • 举报
回复
with image1.Picture.Bitmap.Canvas do

改为 image1.Canvas

在仔细分析你的业务,不要在 onresize 中写这样的代码。
阿发伯 2009-10-23
  • 打赏
  • 举报
回复
TImage大小改变后,与之对应的的Picture.Bitmap必须缩放到TImage一样的大小,再画线才能看到线条,否则,先画线条,因为TImage自动缩放图像,在“缩”的时候,就有可能把线条“缩”没了。
hzg134679hzg 2009-10-23
  • 打赏
  • 举报
回复
检查image1的autosize属性和strech属性
阿发伯 2009-10-23
  • 打赏
  • 举报
回复
image1.Picture.Bitmap.Height:=image1.Height;
image1.Picture.Bitmap.Width:=image1.Width;
Image1.Picture.Bitmap.LoadFromFile('board2.bmp');
改变一下顺序试试看:
Image1.Picture.Bitmap.LoadFromFile('board2.bmp');
image1.Picture.Bitmap.Height:=image1.Height;
image1.Picture.Bitmap.Width:=image1.Width;
mdejtod 2009-10-22
  • 打赏
  • 举报
回复
如果将窗体拉伸
MoveTo(image1.Width-10,20);
lineto(image1.Width-10,100);//这儿画的线,为啥看不到呢,帮忙给看一下
前面的X肯定是超出控件的宽度,你只要在改变时看一下这两个值就知道了
喝口水 2009-10-22
  • 打赏
  • 举报
回复
帮忙给看一下,顶
喝口水 2009-10-22
  • 打赏
  • 举报
回复
onresize有它的好处,主要是当改变大小时用的,我的目的也正是这样
haitao 2009-10-22
  • 打赏
  • 举报
回复
onresize好像是会触发很多次的,这个时机可能不太好
我一般在onactive的第一次触发里设置
加载更多回复(4)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧