The response, confirming the issue, was:DaveL wrote:We recently created an installer with a Registration dialog. I started with the registration dialog included with one of InstallAware's existing themes and added several more edit fields, all of which are required to be filled in before the "Next" button is enabled. We have observed that as text is typed into the edit fields, the "Next" button flickers enabled/disabled...
Now, for posterity, I present my solution below!CandiceJones wrote:The button can occasionally flicker based on the speed of the host system...
Okay, for background, the idea is that the "Next" button will be disabled unless all fields of a form contain some text. As of IA8, the default included themes accomplish this for the Registration (and RegistrationWithSerial) dialog by way of Object Rules (controlled via the InstallAware Dialog Designer) like the following:
Code: Select all
IF (Name.Text <> ) THEN Next.Enabled := True;
IF (Company.Text <> ) THEN Next.Enabled := True;
...
IF (Name.Text = ) THEN Next.Enabled := False;
IF (Company.Text = ) THEN Next.Enabled := False;
...SOLUTION: Now, I can imagine ways of IA maybe being able to address this problem internally so that the user would never have to worry about it. However, happily, there is a workaround that is quite effective without having to appeal to the IA devs, heheh... An epiphany struck me one day and I decided to create a hidden label (i.e. having its "Visible" property set to "False") on the dialog and update the caption of the label to be "True" or "False" depending on whether or not the "Next" button should be enabled. This way I am not setting the button's state after checking each and every edit field, but can instead wait until the very end and just check the hidden label's caption to determine if the button should be enabled! This results in something like the following:
Code: Select all
IF (Name.Text <> ) THEN HiddenLabel.Caption := True;
IF (Company.Text <> ) THEN HiddenLabel.Caption := True;
...
IF (Name.Text = ) THEN HiddenLabel.Caption := False;
IF (Company.Text = ) THEN HiddenLabel.Caption := False;
...
IF (HiddenLabel.Caption <> False) THEN Next.Enabled := True;
IF (HiddenLabel.Caption = False) THEN Next.Enabled := False;
--
DaveL

