Mattias Gaertner escreveu:
On Sun, 23 May 2010 22:49:42 -0300
Luiz Americo Pereira Camara <[email protected]> wrote:

Michael Van Canneyt escreveu:
On Sat, 22 May 2010, Luiz Americo Pereira Camara wrote:
Mattias Gaertner escreveu:
What do you want to achieve? Why do you think you have to set a property after loading and before
Loaded?
Just for convenience.

Currently i'm sending a custom message to notify the form that all properties (stored in lfm plus customized) are initialized so it can take the necessary actions:

Form.Perform(CM_INIT, 0, 0);

If i find such event/procedure i could get rid of the message sending/receiving.

Not a big issue. I still can use OnShow, CreateWnd but it would not be as intuitive as using Loaded.
What is wrong with overriding Loaded ? It is the last thing that is called ?
In fact i'd like to use an overrided Loaded in the created TForm. But it occurs to early:

Form := TMyForm.Create;
      [..]//Streaming system
      TMyForm.Loaded; //> occurs before the customized properties are set
MySetPropertiesFunction(Form);//Set the desired properties. Too late to be recognized by TMyForm.Loaded

I would need :

Form := TMyForm.Create;
      [..]//Streaming system
//hook streaming to call MySetPropertiesFunction(Form);//Set the desired properties.
      TMyForm.Loaded; //> i can assume that all properties are set

By looking the TComponent/TReader code i could not figure how to do that, so if i did not missed something it seems is not possible.

Why does the following not work for you?

procedure TMyForm.Loaded; override;
...
procedure TMyForm.Loaded; begin
  MySetPropertiesFunction(Self);
  inherited Loaded;
end;
Because i don't know before hand what FormClass(TMyForm) is. Also FormClass (TMyForm) does not knows FormProperties

Here's the actual code (calls a generic TForm descendant):

The article: http://lazarusroad.blogspot.com/

function ShowForm(FormClass: TFormClass; Owner: TWinControl; FormProperties: array of const): TModalResult;
var
 Form: TForm;
begin
 Form := FormClass.Create(Owner);
 try
   SetObjectProperties(Form, FormProperties);
   Form.Perform(CM_INIT, 0, 0);
   Result := Form.ShowModal;
 finally
   Form.Destroy;
 end;
end;

Luiz

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to