地址处的访问冲突



模块"frameprj.exe"中地址004295A6处存在访问冲突。读取地址6432FF68。

我使用Delphi2007,我想构建一个包含表单、advtoolbar、advofficepager和主菜单的应用程序。根据主菜单中的按钮,我点击一个不同的菜单应该加载到AdvToolBar上,如果不存在,则应该创建一个页面,如果存在,则应设置为活动页面。问题是在创建页面后,当我再次点击MainManu项目时,我会收到这个错误,看起来我是因为AdvToolBar.Menu := Menu;行代码才收到的。

这是代码。

unit framepage;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, frameFunctii, framePersone, AdvOfficePager,
  Menus, AdvToolBar;
type
  TForm1 = class( TForm )
    AdvOfficePager1 : TAdvOfficePager;
    MainMenu1 : TMainMenu;
    Personal1 : TMenuItem;
    Functii1 : TMenuItem;
    Exit1 : TMenuItem;
    Adaugare1 : TMenuItem;
    Inspectare1 : TMenuItem;
    AdvToolBar1 : TAdvToolBar;
    procedure Exit1Click( Sender : TObject );
    procedure Personal1Click( Sender : TObject );
    procedure Inspectare1Click( Sender : TObject );
    procedure Adaugare1Click( Sender : TObject );
    procedure AdvOfficePager1ClosedPage( Sender : TObject; PageIndex : Integer );
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1 : TForm1;

implementation
{$R *.dfm}
uses
  DataModule, frameAdaugareFunctie;
procedure TForm1.Personal1Click( Sender : TObject );
var
  fp : TFrame2;
  AdvOfficePager11 : TAdvOfficePage;
  i : Integer;
  gasit : boolean;
begin
  gasit := False;
  AdvToolBar1.Menu := nil;
  for i := 0 to AdvOfficePager1.AdvPageCount - 1 do
    begin
      if AdvOfficePager1.AdvPages[i].Caption = 'Personal'
      then
        begin
          AdvOfficePager11 := AdvOfficePager1.AdvPages[i];
          AdvToolBar1.Menu := fp.MainMenu1;
          gasit := True;
        end;
    end;
  if not gasit
  then
    begin
      AdvOfficePager11 := TAdvOfficePage.Create( AdvOfficePager1 );
      AdvOfficePager11.Caption := 'Personal';
      fp := TFrame2.Create( AdvOfficePager11 );
      fp.Parent := AdvOfficePager11;
      fp.Align := alClient;
      AdvOfficePager11.ShowClose := True;
      AdvOfficePager1.AddAdvPage( AdvOfficePager11 );
      AdvOfficePager1.ButtonSettings.CloseButton := True;
      AdvToolBar1.Menu := fp.MainMenu1;
    end;
  AdvOfficePager1.ActivePage := AdvOfficePager11;
end;
procedure TForm1.Adaugare1Click( Sender : TObject );
var
  frmAdgFct : TframeAdgFunctie;
  AdvOfficePager13 : TAdvOfficePage;
  i : Integer;
  gasit : boolean;
begin
  gasit := False;
  for i := 0 to AdvOfficePager1.AdvPageCount - 1 do
    begin
      if AdvOfficePager1.AdvPages[i].Caption = 'Adaugare functie'
      then
        begin
          AdvOfficePager13 := AdvOfficePager1.AdvPages[i];
          gasit := True;
        end;
    end;
  if not gasit
  then
    begin
      AdvOfficePager13 := TAdvOfficePage.Create( AdvOfficePager1 );
      AdvOfficePager13.Caption := 'Adaugare functie';
      frmAdgFct := TframeAdgFunctie.Create( AdvOfficePager13 );
      frmAdgFct.Parent := AdvOfficePager13;
      frmAdgFct.Align := alClient;
      AdvOfficePager13.ShowClose := True;
      AdvOfficePager1.AddAdvPage( AdvOfficePager13 );
      AdvOfficePager1.ButtonSettings.CloseButton := True;
    end;
  AdvOfficePager1.ActivePage := AdvOfficePager13;
end;
procedure TForm1.AdvOfficePager1ClosedPage( Sender : TObject; PageIndex : Integer );
begin
  AdvToolBar1.Menu := nil;
end;
procedure TForm1.Exit1Click( Sender : TObject );
begin
  DataModule1.Free;
  Form1.Close;
end;
procedure TForm1.Inspectare1Click( Sender : TObject );
var
  ff : TFrame1;
  AdvOfficePager12 : TAdvOfficePage;
  i : Integer;
  gasit : boolean;
begin
  AdvToolBar1.Menu := nil;
  gasit := False;
  for i := 0 to AdvOfficePager1.AdvPageCount - 1 do
    begin
      if AdvOfficePager1.AdvPages[i].Caption = 'Functii'
      then
        begin
          AdvOfficePager12 := AdvOfficePager1.AdvPages[i];
          AdvToolBar1.Menu := ff.MainMenu1;
          gasit := True;
        end;
    end;
  if not gasit
  then
    begin
      AdvOfficePager12 := TAdvOfficePage.Create( AdvOfficePager1 );
      AdvOfficePager12.Caption := 'Functii';
      ff := TFrame1.Create( AdvOfficePager12 );
      ff.Parent := AdvOfficePager12;
      ff.Align := alClient;
      AdvOfficePager12.ShowClose := True;
      AdvOfficePager1.AddAdvPage( AdvOfficePager12 );
      AdvOfficePager1.ButtonSettings.CloseButton := True;
      AdvToolBar1.Menu := ff.MainMenu1;
    end;
  AdvOfficePager1.ActivePage := AdvOfficePager12;
end;
end.

在这一行

AdvToolBar1.Menu := fp.MainMenu1;

TForm1.Personal1Click中变量fp尚未被初始化。

此外,在这条线上

AdvToolBar1.Menu := ff.MainMenu1;

TForm1.Inspectare1Click中变量ff尚未被初始化。

在尝试使用变量之前,必须对其进行初始化。

最新更新