Avatar billede simsen Mester
10. september 2011 - 00:00 Der er 1 løsning

Fejl i multiple document interface eksempel

Hej,

Jeg forsøger at lave dette her eksempel for at få en forståelse for mdi: http://delphi.about.com/od/objectpascalide/l/aa042500a.htm

Lige nu er jeg i gang med at oprette child forms og lukke dem igen. Og det er i at lukke dem, der kommer en fejl.

Når jeg kører koden uden at tilknytte FormClose i OnClose i Events for Child1Form, er der ingen fejl som sådan...Den opretter alle de childs jeg klikker. Men når jeg så forsøger mig med at lukke childs så lukker de ikke men bliver minimeret i stedet (som jo er default behavior, som jeg har læst mig til).

Da den ikke lukkede forsøgte jeg så at knytte FormClose (som skulle lukke i stedet for at minimere) fra codebehind til OnClose eventet og så kører koden igen, får jeg følgende fejl, når jeg forsøger at oprette child forms:

"Invalid property value"

Og den fejler i linjen
Child.Caption := childName;
i min MainForm...

Nogen der kan fortælle mig hvad jeg gør forkert?

mvh
simsen :-)

Min kode for de to forme:

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Child1Form;

type
  TfrMain = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Newchild1: TMenuItem;
    CloseAll1: TMenuItem;
    Window1: TMenuItem;
    Cascade1: TMenuItem;
    ArrangeAll1: TMenuItem;
    procedure Newchild1Click(Sender: TObject);
    procedure CloseAll1Click(Sender: TObject);
  private
    { Private declarations }
    procedure CreateChildForm(const childName : string);
  public
    { Public declarations }
  end;

var
  frMain: TfrMain;

implementation

{$R *.dfm}

procedure TfrMain.CloseAll1Click(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to MdiChildCount - 1 do
    MDIChildren[i].Close;
end;

procedure TfrMain.CreateChildForm(const childName : string);
  var Child: TfrChild;
begin
  Child := TfrChild.Create(Application);
  Child.Caption := childName;
end;


procedure TfrMain.Newchild1Click(Sender: TObject);
begin
  CreateChildForm('Child '+IntToStr(MDIChildCount+1));
end;

end.
-------------------
unit Child1Form;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TfrChild = class(TForm)
  private
    { Private declarations }

  public
    { Public declarations }
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;

var
  frChild: TfrChild;

implementation

{$R *.dfm}

procedure TfrChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;


end.
Avatar billede simsen Mester
10. september 2011 - 11:52 #1
Fandt den selv :-)

Deklarationen af proceduren skulle ikke være i public - men under type i Child1Form'en:

type
  TfrChild = class(TForm)
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester