[DUG] Forms Activate Design decision

Stephen Barker Steve at webdata.co.nz
Thu Oct 5 11:11:07 NZDT 2006


John,

If you want this action to run only once, and after creation, then create a
custom message, and fire the message at the end of the OnCreate. 

E.g.

    procedure Start(var Message: TWMChar); message messageStart;

procedure TformMain.FormCreate(Sender: TObject);
begin
  LoadIniSettings;
  ForceDirectories(ExtractFilePath(Application.ExeName)+'\photos');
  PageControl1.ActivePage := tsBrowser;
  if AnsiSameText('B', ParamStr(1)) then  // Batch mode
    PostMessage(handle, messageStart, 0, 0);
end;

procedure TformMain.Start(var Message: TWMChar);
//var
//  t1, t2 : cardinal;
begin
  //t1 := GetTickCount;
  btnLoginClick(nil);
  btnDeleteAllCarsClick(nil);
  //t2 := GetTickCount;
  btnUploadAllCarsClick(nil);
  //ShowMessage('Deleting:
'+IntToStr(trunc((t2-t1)/1000))+#13#10+'Uploading:
'+IntToStr(trunc((GetTickCount-t2)/1000)));
  Application.Terminate;
end;

Regards,
Steve

> -----Original Message-----
> From: John Bird [mailto:johnkbird at paradise.net.nz] 
> Sent: Thursday, 5 October 2006 10:02 a.m.
> To: 'Paul McKenzie'; 'NZ Borland Developers Group - Delphi List'
> Subject: RE: [DUG] Forms Activate Design decision
> 
> It looks to me that if a subsequent modal form FormC is 
> closed then FormB
> activate event is NOT fired.   If the subsequent form is 
> non-modal it looks
> like the event is fired...this would make some sense if 
> processing for FormB is suspended while the modal form FormC flies...
> 
> I was mainly wondering because of the Rave rvSystem print 
> dialogs...they seem to be modal as far as I can tell but do 
> fire the activate event on the form that shows them when they 
> close, particularly the print preview.
> 
> John
> 
> 
> -----Original Message-----
> From: Paul McKenzie [mailto:paul at smss.org.nz]
> Sent: Thursday, 5 October 2006 9:42 a.m.
> To: johnkbird at paradise.net.nz; NZ Borland Developers Group - 
> Delphi List
> Subject: Re: [DUG] Forms Activate Design decision
> 
> 
> OnActivate is executed when the Form receives Focus - eg if 
> FormA (A has 
> focus) launches FormB (B gets focus) FormB then closes, FormA (A gets 
> focus) will execute FormA.OnActivate.
> 
> Regards
> Paul McKenzie
> Wellington
> New Zealand
> 
> 
> 
> John Bird wrote:
> 
> >Those are the reasons I use it as well.
> >
> >I could separate the loading of the data from form events into a 
> >separate
> >procedure(s) but I usually put it triggered from the 
> activate event because
> >I am often altering the form components, eg making some visible or
> invisible
> >or enabled/disabled and other visual alterations of the components
> according
> >to the data being shown and these can only be done once the 
> form is being
> >activated.
> >
> >OK some sort of once only load variable is needed then - I thought 
> >there might be a way around it.
> >
> >Out of curiosity, does anyone know if there a rule that 
> governs about 
> >whether Delphi/Windows fires the activate event for FormB again when 
> >other forms over the top (FormC FormD) are closed?
> >
> >John
> >
> >-----Original Message-----
> >From: Stacey Verner [mailto:stacey at cjntech.co.nz]
> >Sent: Thursday, 5 October 2006 8:13 a.m.
> >To: johnkbird at paradise.net.nz; NZ Borland Developers Group - 
> Delphi List
> >Subject: RE: [DUG] Forms Activate Design decision
> >
> >
> >We use FormActivate for loading data as well, however we use a guarf 
> >variable to make sure it happened only once.
> >
> >e.g.
> >
> >procedure TForm1.FormCreate(Sender: TObject);
> >begin
> >  FFormActivated := False;
> >end;
> >
> >procedure TForm1.FormActivate(Sender: TObject);
> >begin
> >  if not FFormActivated then begin
> >    FFormActivated := True;
> >    // Do stuff
> >  end;
> >end;
> >
> >We actually have a FirstTimeFormActivate method to override for this 
> >kind of thing in our base form class.
> >
> >Using FormActivate is great for triggering loading data because it 
> >allow the form to be shown first, and then the data is loaded so the 
> >users know something is going on. If you load data in FormCreate or 
> >FormShow then the screen doesn't show untill all of the daya 
> is loaded.
> >
> >Stacey
> >
> >
> >-----Original Message-----
> >From: delphi-bounces at ns3.123.co.nz 
> >[mailto:delphi-bounces at ns3.123.co.nz]
> >On Behalf Of John Bird
> >Sent: Wednesday, 04 October 2006 17:53
> >To: 'NZ Borland Developers Group - Delphi List'
> >Subject: [DUG] Forms Activate Design decision
> >
> >A design question:
> >
> >FormA (Main form) open all the time.
> >
> >FormA opens FormB, and FormB filled with Data in On-activate event
> >
> >FormB may open FormC or FormD for further details
> >
> >When FormC or FormD is closed, sometimes FormB on-activate event is 
> >fired again, sometimes not.
> >
> >I haven't figured yet what decides whether FormB activate event gets 
> >fired again - as far as I can tell its not whether FormC or FormD is 
> >modal or not. I would prefer either it wasn't fired, or I could tell 
> >when it was going to be so as to exit the event, as 
> sometimes the data 
> >takes time to load again.
> >
> >For instance opening Rave Report rvSystem printing options 
> always does 
> >cause a form (eg FormB) to get re-activated when it closes.
> >
> >Is there a way I have missed to manage this?, or do I have 
> to do some 
> >housekeeping, eg maintain my own state variable somewhere:
> >
> >FormBLoadedData:Boolean
> >
> >And in the FormB activate event have something like
> >
> >	if FormBLoadedData=true then exit;
> >	LoadtheData;
> >	FormBLoadedData:=true;
> >
> >(this will prevent subsequent forms C and D reloading the 
> data on FormB 
> >when they close)
> >
> >And on the close event for FormB have
> >
> >	FormBLoadedData:=false;
> >
> >
> >John
> >
> >
> >_______________________________________________
> >Delphi mailing list
> >Delphi at ns3.123.co.nz http://ns3.123.co.nz/mailman/listinfo/delphi
> >
> >
> >__________ NOD32 1.1461 (20060329) Information __________
> >
> >This message was checked by NOD32 antivirus system. 
> http://www.eset.com
> >
> >
> >
> >_______________________________________________
> >Delphi mailing list
> >Delphi at ns3.123.co.nz http://ns3.123.co.nz/mailman/listinfo/delphi
> >
> >
> >  
> >
> 
> 
> 
> __________ NOD32 1.1461 (20060329) Information __________
> 
> This message was checked by NOD32 antivirus system. 
> http://www.eset.com
> 
> 
> 
> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
> 
> -- 
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.1.407 / Virus Database: 268.12.12/462 - Release 
> Date: 3/10/2006
>  
> 


More information about the Delphi mailing list