#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Apr 2004
    Posts
    9
    Rep Power
    0

    Question Accessing form public variables .. newbie


    Hi All,

    Im writing a forcasting application in Delphi7. I have most of it done but need to set some child window attributes from the Main Form.

    It is an MDI. The Main Form has control and I want to set a child windows attributes BEFORE IT IS DISPLAYED. But I cannot seem to set the attributed as the compiler says the variable for the child is not yet initialized. How should this be done?

    procedure TMyMainForm(...)
    Var
    Child: TMDIChild;
    Begin
    // Initialize
    Child.m_dtDate := m_MyDate;
    // Show
    Child := TMDIChild.Create(Application);
    End;
    End.

    Any ideas how to get around this would be greatly appreciated.

    Thanks,

    Chris
  2. #2
  3. Banned ;)
    Devshed Supreme Being (6500+ posts)

    Join Date
    Nov 2001
    Location
    Woodland Hills, Los Angeles County, California, USA
    Posts
    9,607
    Rep Power
    4247
    One way is to have global variables that you set. Another way is to create the form, set the variables and then call an update function to update controls on the form as required.
    Code:
    var
    	frm2: TForm2;
    begin
    	frm2 := TForm2.Create(self);
    	frm2.x := 23;
    	frm2.s := 'Hello World';       
    	frm2.UpdateControls;
    end;
    Up the Irons
    What Would Jimi Do? Smash amps. Burn guitar. Take the groupies home.
    "Death Before Dishonour, my Friends!!" - Bruce D ickinson, Iron Maiden Aug 20, 2005 @ OzzFest
    Down with Sharon Osbourne

    "I wouldn't hire a butcher to fix my car. I also wouldn't hire a marketing firm to build my website." - Nilpo
  4. #3
  5. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    May 2004
    Posts
    1
    Rep Power
    0

    Accessing form public variables .. newbie


    Chris,

    There is a protected method Loaded() that VCL form classes inherit.

    This method is called automatically from the inherited constructor after the form data is loaded, but before it is shown. You can override Loaded() in your child window class and perform any custom initialization there. So, adjusting your code...

    procedure TMyMainForm(...)
    Var
    Child: TMDIChild;
    Begin
    // Show
    Child := TMDIChild.Create(Application);
    End;
    End;

    procedure TMyChildForm.Loaded;
    begin
    inherited;
    m_dtDate:= m_MyDate;
    end; // Loaded

    If you override the child form constructor, make sure that you call the inherited constructor or Loaded(0 won't get called.

    Phil Coveney

IMN logo majestic logo threadwatch logo seochat tools logo