当前位置:主页>销售管理软件> 列表

请教一个关于图形控件上面图像变换的问题

财务软件版1楼: 在D7中将image控件的picture属性留空,然后在其click过程中添加进去一个图片,例如
c:\pp02.bmp;然后再次单击该控件的时候,将其改为c:\pp03.bmp。于是我在程序里面放置如下代码:
if(image1.Picture=ppic1) then //ppic1装载图片pp02
image1.Picture:=ppic //ppic装载图片pp03
else
image1.Picture:=ppic11;
结果运行后发现图片变化一次后不能变回来了,执行的时候发现image1.picture=ppic1总是为非。于是我添加一个整型变量inpp,并写了如下语句:
if inpp<>3 then
inpp:=3
else
inpp:=2;
结果发现后面的inpp:=3以及inpp:=2的赋值语句并不会执行?不知道这里面究竟是怎么回事。
小弟是菜鸟,还请大家多多指教,有丰厚分数送上,呵呵。

2楼: 是变不回来的,因为Picture是对象,不是一般的变量,ppic和ppic11只是对象的指针而已,不会记录对象的内容,下面是简单的例子,最简单的就是用两个TImage先读好图片,
var
ppc:TPicture;

ppc:=TPicture.Create;

ppc.Assign(Image2.Picture);
Image1.Picture.Assign(ppc); 如家庭记账软件下载

3楼: 你的image1.Picture:=ppic不是一个好写法,因为实际上将两个指针同时指向了一个内存
空间,即image1.Picture和ppic都指向原来ppic指向的空间,这样因为两个变量共享一个
空间,在后继操作时候可能会出错,而且,因为image1.Picture和ppic实际上都为指针,
不可能进行比较。换过另外的方法进行。图片无非是从一个文件Load来的,你在布置好图片
文件夹后,程序运行时可以通过比较两个文件名进行图片对象的间接比较,如果文件名相
同,则进行一些操作。同样,两个对象间拷贝,可以先记录ppic的文件路径(比如赋值给
一个临时变量Path :string),然后image1.Picture.LoadFromFile(Path),或者用Assign
进行拷贝。

4楼: 谢谢两位的热心回答,关于图片的问题我弄懂了,但是我问题的后半段还没有得到解答啊,就是在一个click事件里面为什么
if inpp<>3 then
inpp:=3
else
inpp:=2;
不能正确得到运行呢?

5楼: 你可以在这样写:
if Tag = 0 then
begin
Image1.Picture.LoadFromFile(''e:\pics\1.bmp'');;
Tag := 1;
end
else
begin
Image1.Picture.LoadFromFile(''e:\pics\2.bmp'');
Tag := 0;
end;
关于第二个问题:
if inpp<>3 then
begin
inpp:=3;
ShowMessage(inttostr(inpp));


end
else
begin
inpp:=2;
ShowMessage(inttostr(inpp));
end
你运行试试

6楼: 你在哪个控件的Click事件里进行
if inpp<>3 then
inpp:=3
else
inpp:=2;
操作?能给些更详细的代码吗?比如你的inpp在哪声明?初始化了没有?怎么检测到赋值
语句并没有执行?
可以像shine007说的,写个代码测测。

财务软件版7楼: 当然是TImage的OnClick事件了

8楼: unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

const
ImageFile1=''Image1.JPG'';
ImageFile2=''Image2.JPG'';

type
TForm1 = class(TForm)
Image1: TImage;
procedure FormShow(Sender: TObject);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
Image1.Tag:=0;
Image1.Picture.LoadFromFile(ImageFile1);


end;

procedure TForm1.Image1Click(Sender: TObject);
begin
if Image1.Tag=0 then
begin
Image1.Picture.LoadFromFile(ImageFile2);
Image1.Tag:=1;
end
else
begin
Image1.Picture.LoadFromFile(ImageFile1);
Image1.Tag:=0;
end;
end;

end.

9楼: object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = ''Form1''
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = ''MS Sans Serif''
Font.Style = []
OldCreateOrder = False
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 112
Top = 32
Width = 337
Height = 297
OnClick = Image1Click
end
end

10楼: 谢谢各位耐心的解答。

11楼: N原来我每次运行click的时候将inpp重新定义了一遍。