A
arychen
Unregistered / Unconfirmed
GUEST, unregistred user!
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
hDibopen:HDIB;
hSrcFile:HFILE;
hPal:HPALETTE;
lpDibChar;
SrcRect:TRect;
DstRect:TRect;
public
{ Public declarations }
end;
在这个类里,在执行方法:
procedure TForm1.Button1Click(Sender: TObject);
var
OFS: OFSTRUCT;
begin
//打开图象文件
OpenDialog1.Execute;
if OpenDialog1.FileName <> '' then
begin
FillChar(OFS,Sizeof(OFS),0)
//填充OFSTRUCT结构
OFS.cBytes := Sizeof(OFS);
hSrcFile := OpenFile(PChar(OpenDialog1.FileName),OFS,OF_READ);
hDibopen := ReadDIBFile(hSrcFile);
lpDib := PChar(GlobalLock(HGLOBAL(hDibopen)));
//检测图象大小
if ((DibWidth(lpDib)>INT_MAX) or (DIBHeight(lpDib)>INT_MAX)) then
begin
ShowMessage('BMP图象太大!');
end;
//创建调色板,如没有指定调色板,hPal为空,则使用系统默认调色板
CreateDIBPalette(hDibopen,hPal);
if (hPal = 0 ) then
begin
hPal := 0;
end;
//指定图象源和绘画目标设备的RECT
SrcRect.Left:=0;
SrcRect.Top:=0;
SrcRect.Right:=DibWidth(lpDib);
SrcRect.Bottom:=DibHeight(lpDib);
DstRect := SrcRect;
//在指定设备上绘图
PaintDib(GetDC(Panel1.Handle),SrcRect,hDibOpen,DstRect,hPal);
end;
end;
其中调用的函数在一个DLL中定义,而且调用正常。
但是在另一个方法里,在用到类中的一些变量如已定义的lpDibChar;时一直有异常出现。
为什么在不同的方法里不能用? 是哪里出的问题导致变量在第一个函数执行后不能用?
在第二个函数里只要从头开始打开文件等操作都执行,那得到的lpDib都是可用的,正常的。为什么用第一个方法里已经定义得到数值的变量不行??
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
hDibopen:HDIB;
hSrcFile:HFILE;
hPal:HPALETTE;
lpDibChar;
SrcRect:TRect;
DstRect:TRect;
public
{ Public declarations }
end;
在这个类里,在执行方法:
procedure TForm1.Button1Click(Sender: TObject);
var
OFS: OFSTRUCT;
begin
//打开图象文件
OpenDialog1.Execute;
if OpenDialog1.FileName <> '' then
begin
FillChar(OFS,Sizeof(OFS),0)
//填充OFSTRUCT结构
OFS.cBytes := Sizeof(OFS);
hSrcFile := OpenFile(PChar(OpenDialog1.FileName),OFS,OF_READ);
hDibopen := ReadDIBFile(hSrcFile);
lpDib := PChar(GlobalLock(HGLOBAL(hDibopen)));
//检测图象大小
if ((DibWidth(lpDib)>INT_MAX) or (DIBHeight(lpDib)>INT_MAX)) then
begin
ShowMessage('BMP图象太大!');
end;
//创建调色板,如没有指定调色板,hPal为空,则使用系统默认调色板
CreateDIBPalette(hDibopen,hPal);
if (hPal = 0 ) then
begin
hPal := 0;
end;
//指定图象源和绘画目标设备的RECT
SrcRect.Left:=0;
SrcRect.Top:=0;
SrcRect.Right:=DibWidth(lpDib);
SrcRect.Bottom:=DibHeight(lpDib);
DstRect := SrcRect;
//在指定设备上绘图
PaintDib(GetDC(Panel1.Handle),SrcRect,hDibOpen,DstRect,hPal);
end;
end;
其中调用的函数在一个DLL中定义,而且调用正常。
但是在另一个方法里,在用到类中的一些变量如已定义的lpDibChar;时一直有异常出现。
为什么在不同的方法里不能用? 是哪里出的问题导致变量在第一个函数执行后不能用?
在第二个函数里只要从头开始打开文件等操作都执行,那得到的lpDib都是可用的,正常的。为什么用第一个方法里已经定义得到数值的变量不行??