>To answer your question tho... there isn't really any way that you can get
>the code in DatabaseUtils.pas to directly access properties declared in
>TMainForm without having MainForm.pas in your uses clause (which obviously
>you don't want for generic database utilities). Having said that there are
>various options. You could define a generic form class which has the UV
>property and then descend TMainForm from it. eg,

This is not quite correct. You can do this with RTTI (have to declare
property as published) - I have done it before to stop circular references
between units and packages - it's not nice, but does have it uses.
eg
  To set a "PUBLISHED" event property on a class without having a reference
in the units uses clause.

  if Assigned( Application.MainForm ) and
Application.MainForm.ClassNameIs('TApplicationMainForm') then begin
    Method.Code := @TDataUnit.OnEnvironmentChanged;
    Method.Data := Self;
    SetMethodProp( Application.MainForm, 'OnEnvironmentChange', Method );
  end;

Of course a cleaner way would be to use interfaces to achieve the same thing
(why didn't I think of that at the time)???

eg
  Something like.

  if Assigned( Application.MainForm ) and Application.MainForm.Supports(
IMyEnvironmentInterface) then 
    IMyEnvironmentInterface := Application.MainForm;
    IMyEnvironmentInterface.OnEnvironmentChange := Self.OnEnvironmentChanged
  end;
  

Myles.


---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED] 
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/

Reply via email to