偶是DELPHI的菜鸟,修改一大型游戏程序中的一段代码。
最后出了这样一个问题。偶实在是才开始动DELPHI,还希望大家帮我看看,谢谢了!procedure TWMImages.LoadDxImage (position: integer; pdximg: PTDxImage);
var
imginfo: TWMImageInfo;
ddsd: DDSURFACEDESC;
SBits, PSrc, DBits: PByte;
n, slen, dlen: integer;
begin
Stream.Seek (position, 0);
Stream.Read (imginfo, sizeof(TWMImageInfo)-4);
if UseDIBSurface then begin //DIB»ç¿ë ¹ö±× ÀÖÀ½
try
lsDib.Clear;
lsDib.Width := imginfo.Width;
lsDib.Height := imginfo.Height;
except
end;
lsDib.ColorTable := MainPalette;
lsDib.UpdatePalette;
DBits := lsDib.PBits;
Stream.Read (DBits^, imginfo.Width * imgInfo.Height); pdximg.px := imginfo.px;
pdximg.py := imginfo.py;
pdximg.surface := TDirectDrawSurface.Create (FDDraw);
pdximg.surface.SystemMemory := TRUE;
pdximg.surface.SetSize (imginfo.Width, imginfo.Height);
pdximg.surface.Canvas.Draw (0, 0, lsDib);
pdximg.surface.Canvas.Release; pdximg.surface.TransparentColor := 0; end else begin slen := WidthBytes(imginfo.Width);
GetMem (PSrc, slen * imgInfo.Height);
SBits := PSrc;
Stream.Read (PSrc^, slen * imgInfo.Height);
try
pdximg.surface := TDirectDrawSurface.Create (FDDraw);
pdximg.surface.SystemMemory := TRUE;
pdximg.surface.SetSize (slen, imginfo.Height);
//pdximg.surface.Palette := MainSurfacePalette; pdximg.px := imginfo.px;
pdximg.py := imginfo.py; ddsd.dwSize := SizeOf(ddsd);
pdximg.surface.Lock (TRect(nil^), ddsd);
DBits := ddsd.lpSurface;
for n:=imginfo.Height-1 downto 0 do begin
SBits := PByte (Integer(PSrc) + slen * n);
Move(SBits^, DBits^, slen);
Inc (integer(DBits), ddsd.lPitch);
end;
pdximg.surface.TransparentColor := 0;
finally
pdximg.surface.UnLock (ddsd.lpSurface);//此处为出错的一行!!!!!!!
FreeMem (PSrc);
end;
end;
end;错误提示:too many actual parameters.
麻烦大家解释下这句话的意思,然后告诉我怎样修改,OK?谢谢。
最后出了这样一个问题。偶实在是才开始动DELPHI,还希望大家帮我看看,谢谢了!procedure TWMImages.LoadDxImage (position: integer; pdximg: PTDxImage);
var
imginfo: TWMImageInfo;
ddsd: DDSURFACEDESC;
SBits, PSrc, DBits: PByte;
n, slen, dlen: integer;
begin
Stream.Seek (position, 0);
Stream.Read (imginfo, sizeof(TWMImageInfo)-4);
if UseDIBSurface then begin //DIB»ç¿ë ¹ö±× ÀÖÀ½
try
lsDib.Clear;
lsDib.Width := imginfo.Width;
lsDib.Height := imginfo.Height;
except
end;
lsDib.ColorTable := MainPalette;
lsDib.UpdatePalette;
DBits := lsDib.PBits;
Stream.Read (DBits^, imginfo.Width * imgInfo.Height); pdximg.px := imginfo.px;
pdximg.py := imginfo.py;
pdximg.surface := TDirectDrawSurface.Create (FDDraw);
pdximg.surface.SystemMemory := TRUE;
pdximg.surface.SetSize (imginfo.Width, imginfo.Height);
pdximg.surface.Canvas.Draw (0, 0, lsDib);
pdximg.surface.Canvas.Release; pdximg.surface.TransparentColor := 0; end else begin slen := WidthBytes(imginfo.Width);
GetMem (PSrc, slen * imgInfo.Height);
SBits := PSrc;
Stream.Read (PSrc^, slen * imgInfo.Height);
try
pdximg.surface := TDirectDrawSurface.Create (FDDraw);
pdximg.surface.SystemMemory := TRUE;
pdximg.surface.SetSize (slen, imginfo.Height);
//pdximg.surface.Palette := MainSurfacePalette; pdximg.px := imginfo.px;
pdximg.py := imginfo.py; ddsd.dwSize := SizeOf(ddsd);
pdximg.surface.Lock (TRect(nil^), ddsd);
DBits := ddsd.lpSurface;
for n:=imginfo.Height-1 downto 0 do begin
SBits := PByte (Integer(PSrc) + slen * n);
Move(SBits^, DBits^, slen);
Inc (integer(DBits), ddsd.lPitch);
end;
pdximg.surface.TransparentColor := 0;
finally
pdximg.surface.UnLock (ddsd.lpSurface);//此处为出错的一行!!!!!!!
FreeMem (PSrc);
end;
end;
end;错误提示:too many actual parameters.
麻烦大家解释下这句话的意思,然后告诉我怎样修改,OK?谢谢。
太多了?好象不多啊,只有一个参数啊