Delphi - 连接类似的程序

时间:2017-07-25 13:42:25

标签: delphi

我目前正在开发一个有点复杂的应用程序,我发现了一个问题。我将尝试将应用程序的复杂性降低到一个简单的应用程序中,例如。关键是,我有16个区域,每个区域都有变量和程序。每个程序必须对每个区域都是通用的。目前我通过在程序的开头写一个“if”来解决这个问题,然后将它们复制15次并稍微改变一下,因为对于每个区域,它只是用几个词来区分。所以我必须在每一个中改变这个词。这使得代码不清楚,浪费时间。有没有办法,如何将这16个“ifs”写成一个?使用像模板之类的东西?

示例应用程序:

密码:

procedure TForm1.WriteItem;
var item:integer;
begin
  if currentFile='FirstFile' then begin
    Seek(FirstFile,filesize(firstfile)-1);
    read(FirstFile,item);
    inc(item);
    write(FirstFile,item);
  end;

  if currentFile='SecondFile' then begin
    Seek(SecondFile,filesize(SecondFile)-1);
    read(SecondFile,item);
    inc(item);
    write(SecondFile,item);
  end;
end;

完整版:

https://drive.google.com/drive/folders/0BzhR4bZa5iBuazJuX0FWQzBXcHM?usp=sharing

1 个答案:

答案 0 :(得分:1)

我猜测FirstFile,SecondFile等等都是TFile类型或者它的后代,所以我要做的第一个改变就是制作' currentFile'相同类型(或其祖先)。然后,不要将currentFile设置为字符串,而是添加类似

的内容
currentFile := FifthFile;
例如

然后你的程序就变成了

procedure TForm1.WriteItem;
var item:integer;
begin
  Seek(CurrentFile,filesize(CurrentFilefile)-1);
  read(CurrentFile,item);
  inc(item);
  write(CurrentFile,item);
end;

但是,更好的是,您可以将文件作为参数传递,例如

procedure TForm1.WriteItem( const CurremtFile : TYourFileType);
var item:integer;
begin
  Seek(CurrentFile,filesize(CurrentFilefile)-1);
  read(CurrentFile,item);
  inc(item);
  write(CurrentFile,item);
end;

修改

正如评论中指出的,这个过程不需要任何对象变量(尽管你的真实程序可能)。您可以通过以下两种方式之一使其独立于任何对象:将该函数完全移出对象

procedure WriteItem( const CurremtFile : TYourFileType);

或使其成为课程程序

class procedure TForm1.WriteItem( const CurremtFile : TYourFileType);

作为一般原则,我更喜欢后一种方法,但我可能会把它移到另一个专门设计用来处理这种功能的类(不是我的形式)。