我正在使用delphi创建一个游戏,并希望将我的一些代码移到一个单独的单元中,但是此代码使用表单中的属性。这个是可能的吗?
我正在使用VCL表单应用程序创建一个游戏,目前我的所有游戏算法代码都在表单单元中。这没有什么错,因为我的程序运行得很好,只是它看起来很乱,而且有人建议我把算法代码放在一个单独的单元中。我已经尝试将代码移到一个新单元中,但是无论我尝试什么,都会出现语法错误。
这是我的主单元中的代码,其中Grid是表单中的TStringGrid,GridSize是我尝试的第二个单元中的过程:
procedure TGame.NewGame;
begin
Grid.Width:=GridSize(Grid.ColCount);
Grid.Height:=GridSize(Grid.RowCount);
end;这是第二个单位代码:
unit UGameGenerator;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.Menus,
Vcl.StdCtrls;
implementation
function GridSize(size: integer): integer;
begin
result:=291+36*(size-8);
end;
end.编辑:
这是来自第二单元的代码:
procedure ClearGrid;
var
i,j: integer;
begin
for i := 0 to Grid.ColCount-1 do
begin
for j := 0 to Grid.RowCount-1 do
begin
Grid.Cells[i,j]:='';
end;
end;
end;发布于 2019-01-22 04:58:20
编译器需要以某种方式找到GridSize的声明。要做到这一点,请遵循以下指南:
UGameGenerator添加到使用列表中:unit MainForm;接口使用...,UGameGenerator;//在此处或在实现部分中添加...实现...end。
UGameGenerator单元中,公开接口中其他程序部分使用的所有类型/函数/过程:单元UGameGenerator;接口使用...,...;函数GridSize(大小:整数):integer;实现函数GridSize(大小: integer):integer;begin result:=291+36*(大小-8);end;end.
提示:在设计独立单元时,避免直接使用其他单元中的变量。相反,将它们作为过程/函数调用中的参数进行传递。
否则,在使用循环引用时可能会遇到很多问题。
在您更新的问题中,声明procedure ClearGrid( aGrid : TStringGrid);并将网格作为参数传递。
https://stackoverflow.com/questions/54297015
复制相似问题