2

最小の労力で複数のオブジェクトを 1 つのパラメーターとして渡したい。

私はいくつかのタイプを持っています

TOpenMode = [omNew, omEdit, omBrowse] 

そして手続き

procedure OpenForm(Form: TForm; ANewWindow: boolean = false; 
                   Datasets: TUniDataSet; TableOpenMode: TOpenMode);

複数のデータセットを渡したい。配列や新しいオブジェクトを作成せずにそれを行うことはできますか? ペアで渡されるようにするにはどうすればよい[UniTable1, TOpenMode], [UniTable2, TOpenMode]ですか?

4

2 に答える 2

5

複数のオブジェクトを 1 つの複合型に結合する最も簡単な方法は、レコードです。

type
  TDataSetAndOpenMode = record
    DataSet: TUniDataSet;
    OpenMode: TOpenMode;
  end;

便宜上、これらのレコードの 1 つを初期化する関数を提供します。

function DataSetAndOpenMode(DataSet: TUniDataSet; 
    OpenMode: TOpenMode): TDataSetAndOpenMode;
begin
  Result.DataSet := DataSet;
  Result.OpenMode := OpenMode;
end;

次に、OpenForm関数はそのようなレコードのオープン配列を受け取ることができます:

procedure OpenForm(Form: TForm; const Datasets: array of TDataSetAndOpenMode;
    NewWindow: Boolean=False);

NewWindowパラメータを最後に置いたことに注意してください。デフォルト値があるため、そのデフォルト値は、リストの最後に表示される場合にのみ役立ちます。

ここで、関数を呼び出すには、次のようなコードを記述できます。

OpenForm(Form, [DataSetAndOpenMode(DataSet1, OpenMode1), 
    DataSetAndOpenMode(DataSet2, OpenMode2)]);
于 2012-10-27T18:29:04.773 に答える
3

複数のペアを1つのパラメーターとして渡したい場合、ペアを定義するために少なくともレコードを宣言し、それらのレコードの複数のインスタンスを1つのパラメーターとして渡すために少なくともオープン配列パラメーターを宣言することを回避する方法がわかりません。

type
 TDatasetModePair = record
   DS: TUniDataSet;
   Mode: TOpenMode;
 end;

procedure OpenForm(Form: TForm; ANewWindow: boolean = false; 
               Datasets: array of TDatasetModePair);

ただし、独自の配列型を宣言する方がはるかに簡単であることがわかるでしょう。

type
  TDatasetModePairArray: array of TDatasetModePair;

プロシージャ宣言は次のようになります。

procedure OpenForm(Form: TForm; ANewWindow: boolean = false; 
               Datasets: TDatasetModePairArray);

それにもかかわらず、関数に配列を渡す前に配列を作成する必要はありません。

var
  MyArray: TDatasetModePairArray;
begin
  SetLength(MyArray, 2);
  MyArray[0].DS := SomeDataSet;
  MyArray[0].Mode := omEdit;
  MyArray[1].DS := SomeOtherDataSet;
  MyArray[1].Mode := omBrowse;
于 2012-10-27T17:38:38.580 に答える