偶是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?谢谢。
解决方案 »
- 请大家看下invalid floating point operation原因
- Delphi对象模型这个Create,再次开个贴来讨论,非想搞清楚不可
- 在32位操作系统下,如何改变Windows的默认打印机??
- 北京的那家网站最有名气?????
- 请教:想写个检查日期格式的函数
- 火急---替换字符串的函数
- 关于在ListBox中列出所有进程的问题?请各位大哥帮忙回一下!!!谢谢。
- 初学者:怎样使用delphi的help
- 老鱼,newyj,千两狂死郎,以及其他大虾,请看看这个问题。我的问题是不是太难了?越来越少人能够回答。
- 如何获取当前系统中所有可用的驱动器的盘符???急,谢谢。
- 为什么在TComponent的派生类中无Create方法?
- 关于多线程的一个问题,在线等,十万火急!!!
太多了?好象不多啊,只有一个参数啊