首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在单独的单元中使用表单属性吗?

可以在单独的单元中使用表单属性吗?
EN

Stack Overflow用户
提问于 2019-01-22 04:01:33
回答 1查看 102关注 0票数 0

我正在使用delphi创建一个游戏,并希望将我的一些代码移到一个单独的单元中,但是此代码使用表单中的属性。这个是可能的吗?

我正在使用VCL表单应用程序创建一个游戏,目前我的所有游戏算法代码都在表单单元中。这没有什么错,因为我的程序运行得很好,只是它看起来很乱,而且有人建议我把算法代码放在一个单独的单元中。我已经尝试将代码移到一个新单元中,但是无论我尝试什么,都会出现语法错误。

这是我的主单元中的代码,其中Grid是表单中的TStringGrid,GridSize是我尝试的第二个单元中的过程:

代码语言:javascript
复制
procedure TGame.NewGame;
begin
  Grid.Width:=GridSize(Grid.ColCount);
  Grid.Height:=GridSize(Grid.RowCount);
end;

这是第二个单位代码:

代码语言:javascript
复制
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.

编辑:

这是来自第二单元的代码:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2019-01-22 04:58:20

编译器需要以某种方式找到GridSize的声明。要做到这一点,请遵循以下指南:

  1. 在主窗体中,将UGameGenerator添加到使用列表中:

unit MainForm;接口使用...,UGameGenerator;//在此处或在实现部分中添加...实现...end。

  • 在你的UGameGenerator单元中,公开接口中其他程序部分使用的所有类型/函数/过程:

单元UGameGenerator;接口使用...,...;函数GridSize(大小:整数):integer;实现函数GridSize(大小: integer):integer;begin result:=291+36*(大小-8);end;end.

提示:在设计独立单元时,避免直接使用其他单元中的变量。相反,将它们作为过程/函数调用中的参数进行传递。

否则,在使用循环引用时可能会遇到很多问题。

在您更新的问题中,声明procedure ClearGrid( aGrid : TStringGrid);并将网格作为参数传递。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54297015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档