在主单元中,我定义了一个函数,然后由具有适当参数的另一个表单调用:
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”子句之后声明该函数,我将无法从另一个表单中调用它。 我真的无法得到它:(
答案 0 :(得分:5)
您在接口部分声明了两个函数,即{/ 1}}
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;
或者你必须实现这两个功能。