1

メイン ユニットでは、適切なパラメーターを使用して別のフォームから呼び出される関数を定義しました。

unit Parser;
interface
uses
[...]

function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;

type
TForm1 = class(TForm)
[...]
function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
end;

[...]

function TForm1.SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
var
  AStoreKey: string;
  AOptions: TcxGridStorageOptions;
  LayoutRegistryKey: TRegistry;
begin
  AStoreKey := 'Software\KTRT\Stats';

  AOptions := [];
  cxGrid1TableView1.StoreToRegistry(AStoreKey, True, AOptions, ASaveViewName);

  LayoutRegistryKey.RootKey:= HKEY_CURRENT_USER;
  if LayoutRegistryKey.OpenKey(AStoreKey+'\'+ASaveViewName, false) then
    Result := 0
  else
    Result := -1;
end;

他の形式では:

[...]
uses Parser;

procedure TForm3.Button1Click(Sender: TObject);
var
LayoutRegistryKey: TRegistry;
AStoreLocation : AnsiString;
AStoreKey: string;
begin
  AStoreLocation := Edit1.Text;
  if Parser.SaveGridLayoutToReg(AStoreLocation) <> 0 then
    Label1.Visible := True
  else
  begin
    Label1.Visible := False;
    Form3.Visible := False;
  end;
end;
[...]

エラーが発生し続けるので、どういうわけか間違っています

満たされていない前方宣言または外部宣言

TForm1 クラスで関数を宣言しないと、グリッド ビューが見つかりません。「uses」句の後に関数を宣言しないと、他のフォームから呼び出すことができません。私は本当にそれを得ることができません:(

4

1 に答える 1

5

インターフェイスセクションで2つの関数を宣言しますSaveGridLayoutToReg

function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;

そしてTForm1.SaveGridLayoutToReg数行後。ただし、実装セクションでは、後者のみを実装します。

つまり、交換する必要があります

unit Parser;
interface
uses
[...]

function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;

type
TForm1 = class(TForm)
[...]
function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
end;

unit Parser;
interface
uses
[...]

type
TForm1 = class(TForm)
[...]
function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
end;

または、両方の機能を実装する必要があります。

于 2012-08-31T08:28:05.303 に答える