Author: jerome
Date: 2009-09-08 15:42:44 +0200 (Tue, 08 Sep 2009)
New Revision: 5338

Modified:
   
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Msinfo32Wrapper.pas
   
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Report.pas
   
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/SecondInstaller.dpr
   
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/TuxUtils.pas
   
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.dfm
   
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.pas
Log:
* Moved tests for each steps.
* Added some informations into the mail body.

Modified: 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Msinfo32Wrapper.pas
===================================================================
--- 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Msinfo32Wrapper.pas
       2009-09-08 08:47:46 UTC (rev 5337)
+++ 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Msinfo32Wrapper.pas
       2009-09-08 13:42:44 UTC (rev 5338)
@@ -4,7 +4,7 @@
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-  Dialogs, StdCtrls, ShellApi;
+  Dialogs, StdCtrls, ShellApi, ExtCtrls, WinSvc, Tlhelp32;
 
 type
   TMsinfo = class(TObject)
@@ -60,6 +60,7 @@
   ret : integer;
 begin
   isWorking := true;
+
   ret := ShellExecute_AndWait( 'open',
                           PChar(extractFilePath(application.ExeName) 
+'info.bat'),
                           PChar(path),

Modified: 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Report.pas
===================================================================
--- 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Report.pas
        2009-09-08 08:47:46 UTC (rev 5337)
+++ 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Report.pas
        2009-09-08 13:42:44 UTC (rev 5338)
@@ -27,7 +27,8 @@
    ShellAPI, Windows, TuxUtils, Dialogs, zLib, SysUtils, Controls, Classes,
    StdCtrls, ShlObj, Msinfo32Wrapper, KAZip, Forms, IdComponent, 
IdMessageCoder,
    IdMessageCoderMIME, IdBaseComponent, IdMessage, IdSMTP, IdIOHandler,
-   IdIOHandlerSocket, IdSSLOpenSSL, WinInet, IdHttp, ComputerInfos;
+   IdIOHandlerSocket, IdSSLOpenSSL, WinInet, IdHttp, ComputerInfos,
+   Registry, TlHelp32;
 
   {#### This object manage the Complete report creation ####}
 type
@@ -45,7 +46,7 @@
       procedure RMDir(directory : string);
       function CreateReportDatas() : boolean;
       procedure ListDir(Path:String; List:TStringList);
-      
+
     public
       constructor Create(AOwner : TObject; TypeReport : Integer); overload;
       function compressReport(AApplication : TApplication) : boolean;
@@ -63,6 +64,7 @@
       Adress : string;
       ReportFile : string;
       function isInternetConnected() : boolean;
+      function isTuxBoxStarted() : boolean;
 
     public
       constructor Create; overload;
@@ -75,6 +77,14 @@
   ERROR = 0;
   INFO  = 1;
 
+var
+  SERVER          : boolean;
+  DONGLE          : boolean;
+  RADIO           : boolean;
+  BATERY_STATE    : boolean;
+  ATTITUNE_READED : boolean;
+  TUXBOX          : boolean;
+
 implementation
 
 
@@ -214,7 +224,6 @@
         GetDir(0, s);
         if length(s) <> 3 then
           s := s + '\';
-        showmessage('found: ' + SearchRec.Name);
         List.Add(s + SearchRec.Name);
         ListDir(s + SearchRec.Name, List);
       end;
@@ -227,12 +236,10 @@
         if length(s) <> 3 then
           begin
           List.add(s + '\' + SearchRec.Name);
-          showmessage('found: ' + SearchRec.Name);
           end
         else
           begin
           List.add(s + SearchRec.Name);
-          showmessage('found: ' + SearchRec.Name);
           end;
       end;
     end;
@@ -253,8 +260,8 @@
  begin
    computerDatas := ReportFilesDirectory + '\info.nfo';
    // Get the computer informations
-  //msinfo := TMsinfo.create(nil);
-  //msinfo.createNfo(computerDatas);
+  msinfo := TMsinfo.create(nil);
+  msinfo.createNfo(computerDatas);
   result := (CopyDir(ReportFiles, ReportFilesDirectory));
  end;
 
@@ -262,7 +269,6 @@
  //#### This function compress the log files.
  function TReportMaker.compressReport(AApplication : TApplication) : boolean;
  begin
-   showmessage(ReportFilesDirectory);
    Application := AApplication;
    Result := true;
 
@@ -390,6 +396,12 @@
 
   //Formating Quick vew computer informations.
   body.Add(slinebreak + slinebreak + '************************* Error Infos 
*************************');
+  body.Add(' Transformer: ' + IntToStr( Abs( 
StrToInt(BoolToStr(Report.BATERY_STATE)))));
+  body.Add(' Dongle: ' + IntToStr( Abs( StrToInt(BoolToStr(Report.DONGLE)))));
+  body.Add(' Radio: ' + IntToStr( Abs( StrToInt(BoolToStr(Report.RADIO)))));
+  body.Add(' Smart Core: ' + IntToStr( Abs( 
StrToInt(BoolToStr(Report.SERVER)))));
+  TUXBOX := isTuxBoxStarted();
+  body.Add(' TuxBox started : ' + IntToStr( Abs( 
StrToInt(BoolToStr(Report.TUXBOX)))));
 
   body.Add(slinebreak + slinebreak + '************************ ComputerInfos 
************************');
 
@@ -406,8 +418,8 @@
     ComputerInfos.wvWinVista : osType := 'Windows Vista';
   end;
 
-  body.Add(slinebreak + 'Windows version: ' + osType);
-  body.Add('User locale: ' + ComputerInfos.GetUserLanguage());
+  body.Add(slinebreak + ' Windows version: ' + osType);
+  body.Add(' User locale: ' + ComputerInfos.GetUserLanguage());
 
   IdMessage1.Body := body;
 
@@ -442,4 +454,37 @@
 
 end;
 
+
+//Return true if TuxBox 2.0 is started, false if not.
+function TReportSender.isTuxBoxStarted() : boolean;
+var
+  ContinueLoop: BOOL;
+  FSnapshotHandle: THandle;
+  FProcessEntry32: TProcessEntry32;
+begin
+
+  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
+  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
+
+  Result := False;
+
+  while Integer(ContinueLoop) <> 0 do
+  begin
+    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
+         UpperCase('TuxBox.exe')) or (UpperCase(FProcessEntry32.szExeFile) =
+         UpperCase('TuxBox.exe')))
+    then begin
+      Result := True;
+    end;
+
+    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
+
+  end;
+
+  CloseHandle(FSnapshotHandle);
+
+end;
+
+
 end.

Modified: 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/SecondInstaller.dpr
===================================================================
--- 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/SecondInstaller.dpr
       2009-09-08 08:47:46 UTC (rev 5337)
+++ 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/SecondInstaller.dpr
       2009-09-08 13:42:44 UTC (rev 5338)
@@ -8,7 +8,8 @@
   Box in 'Box.pas' {Form2},
   BoxOk in 'BoxOk.pas' {Form3},
   Report in 'Report.pas',
-  TuxGauge in 'TuxGauge.pas' {Form4};
+  TuxGauge in 'TuxGauge.pas' {Form4},
+  TestsUtils in 'TestsUtils.pas';
 
 {$R *.res}
 

Modified: 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/TuxUtils.pas
===================================================================
--- 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/TuxUtils.pas
      2009-09-08 08:47:46 UTC (rev 5337)
+++ 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/TuxUtils.pas
      2009-09-08 13:42:44 UTC (rev 5338)
@@ -35,6 +35,7 @@
     function isTuxDroidServerStarted() : boolean;
     function KillServer(): Integer;
     function isDongleConnected(states : TStringList) : boolean;
+    function isTransformerConnected(states : TStringList) : boolean;
     function isSoundOn(states : TStringList) : boolean;
     function isRadioConnected(states : TStringList)  : boolean;
     function isOnActivity(states : TStringList) : boolean;
@@ -214,6 +215,15 @@
     knowed_language := 'en';
   end;
 
+  try
+    //Searching for plugged transformer ( <batteryState> )
+    beginPos := Pos('<batteryState>', aString) + Length('<batteryState>');
+    endPos := Pos('</batteryState>', aString);
+    values.add(Copy(aString, beginPos, endPos - beginPos));
+  except on e: Exception do
+    values.add('false');
+  end;
+
 end;
 
 
@@ -276,6 +286,19 @@
 end;
 
 
+{#### Return the dongle state ####}
+function isTransformerConnected(states : TStringList) : boolean;
+begin
+  if states <> nil then
+     if states[4] = 'charge' then
+         result := true
+     else
+         result := false
+  else
+      result := false;
+end;
+
+
 {#### Return the sound state ####}
 function isSoundOn(states : TStringList) : boolean;
 begin

Modified: 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.dfm
===================================================================
--- 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.dfm
 2009-09-08 08:47:46 UTC (rev 5337)
+++ 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.dfm
 2009-09-08 13:42:44 UTC (rev 5338)
@@ -1,6 +1,6 @@
 object Form1: TForm1
-  Left = 491
-  Top = 180
+  Left = 426
+  Top = 221
   BorderIcons = [biSystemMenu, biMinimize]
   BorderStyle = bsNone
   Caption = 'TuxBox 2.0'

Modified: 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.pas
===================================================================
--- 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.pas
 2009-09-08 08:47:46 UTC (rev 5337)
+++ 
software_suite_v3/software/tool/tool-second-installer/trunk/tool-second-installer/Unit1.pas
 2009-09-08 13:42:44 UTC (rev 5338)
@@ -175,8 +175,11 @@
       Y: Integer);
     procedure LogoMouseMove(Sender: TObject; Shift: TShiftState; X,
       Y: Integer);
-    
 
+    procedure startServer();
+
+
+
   private
     { D�clarations priv�es }
     function getAttitunePath() : string;
@@ -198,6 +201,7 @@
   Form1   : TForm1;
   Box1    : TForm2;
   BoxOk1  : TForm3;
+  values : TStringList;
   testCount : byte;
 
 implementation
@@ -236,6 +240,7 @@
 
   testCount := 1;
 
+  TuxUtils.initKnowedVars();
 end;
 
 
@@ -275,6 +280,29 @@
 end;
 
 
+//Start smart core and display splashscreen.
+procedure TForm1.startServer();
+begin
+  if (not TuxUtils.isTuxDroidServerStarted()) or  (not 
TuxUtils.getStates(values)) then
+    begin
+    Form1.Enabled := False;
+    Form1.ShowSplashScreen();
+    TuxUtils.startServer(Application);
+    Form1.HideSplashScreen();
+    Steps.ActivePageIndex := 1;
+    Form1.Enabled := True;
+    if TuxUtils.isTuxDroidServerStarted() then
+      Report.SERVER := True
+    else
+      Report.SERVER := False;
+    end
+  else
+    begin
+      Report.SERVER := True;
+    end;
+end;
+
+
 {#### Next button clicked ####}
 procedure TForm1.NextButtonClick();
 begin
@@ -284,6 +312,82 @@
 
   case Steps.ActivePageIndex of
 
+  1 :
+    
//***************************************************************************//
+    //****  Step 2 on screen => Testing server state ( start it if needed ). 
****//
+    begin
+      //Step 2 on screen => Testing server state ( start it if needed ).
+    startServer();
+    Report.BATERY_STATE := TuxUtils.isTransformerConnected(values);
+    end;
+
+  2 :
+    //**************************************************//
+    //****  Step 3 on screen => Testing dongle state****//
+    begin
+      //Checking dongle state.
+      values.Clear;
+      TuxUtils.getStates(values);
+      if not TuxUtils.isDongleConnected(values) then
+        begin
+          Form1.Enabled := False;
+          Report.DONGLE := False;
+          //Checking first if it's a hardware problem.
+          if isHIDReady() then
+            begin
+            //Showing the error message.
+            BoxOk1.showMessageDialog(gettext(DONGLE_ERROR), gettext(OK));
+
+            //Refreshing informations.
+            startServer();
+            values.Clear;
+            TuxUtils.getStates(values);
+            end
+          else
+            begin
+            //Displaying HID error message.
+            BoxOk1.showMessageDialog(gettext(WINDOWS_ERROR), gettext(OK));
+            Steps.ActivePageIndex := 1;
+            NextLabel.Caption := gettext(NEXTB);
+            Next.OnMouseUp := Form1.NextMouseUp;
+            NextLabel.OnMouseUp := Form1.NextMouseUp;
+          end;
+          Form1.Enabled := True;
+        end
+      else
+        Report.DONGLE := True;
+    end;
+
+  3 :
+    //**************************************************//
+    //****  Step 4 on screen => Testing radio state****//
+    begin
+      values.Clear;
+      TuxUtils.getStates(values);
+      if not TuxUtils.isRadioConnected(values) then
+        begin
+        Form1.Enabled := false;
+        Report.RADIO := False;
+        //Showing the error message.
+        BoxOk1.showMessageDialog(gettext(RADIO_ERROR), gettext(OK));
+
+        //Refreshing informations.
+        startServer();
+        values.Clear;
+        TuxUtils.getStates(values);
+
+        Steps.ActivePageIndex := 1;
+        NextLabel.Caption := gettext(NEXTB);
+        Next.OnMouseUp := Form1.NextMouseUp;
+        NextLabel.OnMouseUp := Form1.NextMouseUp;
+        Form1.Enabled := True;
+        end
+      else
+        begin
+        Report.RADIO := True;
+        end;
+    end;
+
   4 :
     begin
     NextLabel.Caption := gettext(TEST);
@@ -302,7 +406,6 @@
 procedure TForm1.TestButtonClick(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
 var
-  values : TStringList;
   times  : TStringList;
   time   : Integer;
   result : Integer;
@@ -315,169 +418,117 @@
       setExitEnabled(false);
       setNextEnabled(false);
       setPreviousEnabled(false);
-      TuxUtils.initKnowedVars();
-      attitunePlayed := false;
       try
-        if TuxUtils.isTuxDroidServerStarted() and TuxUtils.getStates(values) 
then
+
+        //Getting attitune play time.
+        if fileExists(ExtractFilePath(Application.ExeName) + 
'attitunes\times.is2') then
           begin
-          //Starting dongle state.
-          if TuxUtils.isDongleConnected(values) then
-            begin
-            if TuxUtils.isRadioConnected(values) then
-              begin
+            try
+              times := TStringList.Create;
+              times.LoadFromFile(ExtractFilePath(Application.ExeName) + 
'attitunes\times.is2');
+              time := strtoint(times.Values[gnugettext.GetCurrentLanguage()]);
+              times.Free;
+            except on e : Exception do
+              time := 10;
+            end;
+          end
+        else
+          begin
+          //define a defaulit.
+          time := 10;
+          end;
 
-              //Getting attitune play time.
-              if fileExists(ExtractFilePath(Application.ExeName) + 
'attitunes\times.is2') then
-                begin
+        //Playing Attitune only if server is started, dongle connected ,and 
radio connected.
+        Report.ATTITUNE_READED := TuxUtils.playAttitune(getAttitunePath());
 
-                try
-                  times := TStringList.Create;
-                  times.LoadFromFile(ExtractFilePath(Application.ExeName) + 
'attitunes\times.is2');
-                  time := 
strtoint(times.Values[gnugettext.GetCurrentLanguage()]);
-                  times.Free;
-                except on e : Exception do
-                  time := 10;
-                end;
+        Form1.setNextEnabled(false);
+        setPreviousEnabled(false);
 
-                end
-              else
-                begin
-                //define a defaulit.
-                time := 10;
-                end;
+        setExitEnabled(false);
+        Form1.Enabled := false;
+        //Sleeping to the attitune end.
+        sleep( ( time + 1 ) * 1000 );
 
-                //Playing Attitune only if server is started, dongle connected 
,and radio connected.
-                TuxUtils.playAttitune(getAttitunePath());
+        //Ask user if something was hear
+        result := Box1.showMessageDialog(gettext(SCREEN_5_CHOICE_1), 
gettext(YES), gettext(NO));
 
-                Form1.setNextEnabled(false);
-                setPreviousEnabled(false);
+        Form1.setNextEnabled(true);
+        setPreviousEnabled(true);
+        Form1.setExitEnabled(true);
 
-                setExitEnabled(false);
-                Form1.Enabled := false;
-                //Sleeping to the attitune end.
-                sleep( ( time + 1 ) * 1000 );
+        case result of
+          Box.bOk:
+            begin
+            Steps.ActivePageIndex := 5;
+            Next.Hide;
+            Previous.Hide;
+            NextLabel.Hide;
+            PreviousLabel.Hide;
+            ExitLabel.Caption := gettext(FINISH);
+            Exit.OnMouseUp := FinishButtonClick;
+            ExitLabel.OnMouseUp := FinishButtonClick;
+            end;
 
-                //Ask questions.
+          Box.bCancel:
+            begin
+            if testCount < 2 then
+              begin
+              result := Box1.showMessageDialog(gettext(SCREEN_5_CHOICE_2), 
gettext(OK), gettext(CANCEL));
 
-                result := Box1.showMessageDialog(gettext(SCREEN_5_CHOICE_1), 
gettext(YES), gettext(NO));
-
-                Form1.setNextEnabled(true);
-                setPreviousEnabled(true);
-                Form1.setExitEnabled(true);
-
-                case result of
-                  Box.bOk:
-                    begin
-                    Steps.ActivePageIndex := 5;
-                    Next.Hide;
-                    Previous.Hide;
-                    NextLabel.Hide;
-                    PreviousLabel.Hide;
-                    ExitLabel.Caption := gettext(FINISH);
-                    Exit.OnMouseUp := FinishButtonClick;
-                    ExitLabel.OnMouseUp := FinishButtonClick;
-                    end;
-
-                  Box.bCancel:
-                    begin
-                    if testCount < 2 then
-                      begin
-                      result := 
Box1.showMessageDialog(gettext(SCREEN_5_CHOICE_2), gettext(OK), 
gettext(CANCEL));
-
-                      if result = Box.bCancel then
-                        begin
-                        Steps.ActivePageIndex := 5;
-                        Next.Hide;
-                        Previous.Hide;
-                        NextLabel.Hide;
-                        PreviousLabel.Hide;
-                        ExitLabel.Caption := gettext(FINISH);
-                        Exit.OnMouseUp := FinishButtonClick;
-                        ExitLabel.OnMouseUp := FinishButtonClick;
-                        end
-                      else
-                        begin
-                        if testCount < 2 then
-                          begin
-                          TuxUtils.stopServer();
-                          sleep(500);
-                          Steps.ActivePageIndex := 1;
-                          Inc(testCount, 1);
-                          NextLabel.Caption := gettext(NEXTB);
-                          Next.OnMouseUp := Form1.NextMouseUp;
-                          NextLabel.OnMouseUp := Form1.NextMouseUp;
-                          end;
-                        end;
-                      end
-                    else
-                      begin
-                      Form1.setNextEnabled(false);
-                      setPreviousEnabled(false);
-
-                      result := 
Box1.showMessageDialog(gettext(SCREEN_5_CHOICE_3), gettext(YES), gettext(NO));
-
-                      if result = Box.bOk then
-                        begin
-                        sendReport(Report.ERROR);
-                        Application.Terminate;
-                        end
-                      else
-                        begin
-                        Steps.ActivePageIndex := 5;
-                        Next.Hide;
-                        Previous.Hide;
-                        NextLabel.Hide;
-                        PreviousLabel.Hide;
-                        ExitLabel.Caption := gettext(FINISH);
-                        Exit.OnMouseUp := FinishButtonClick;
-                        ExitLabel.OnMouseUp := FinishButtonClick;
-                        end;
-                      end;
-                    end;
+              if result = Box.bCancel then
+                begin
+                Steps.ActivePageIndex := 5;
+                Next.Hide;
+                Previous.Hide;
+                NextLabel.Hide;
+                PreviousLabel.Hide;
+                ExitLabel.Caption := gettext(FINISH);
+                Exit.OnMouseUp := FinishButtonClick;
+                ExitLabel.OnMouseUp := FinishButtonClick;
+                end
+              else
+                begin
+                if testCount < 2 then
+                  begin
+                  TuxUtils.stopServer();
+                  sleep(500);
+                  Steps.ActivePageIndex := 1;
+                  Inc(testCount, 1);
+                  NextLabel.Caption := gettext(NEXTB);
+                  Next.OnMouseUp := Form1.NextMouseUp;
+                  NextLabel.OnMouseUp := Form1.NextMouseUp;
+                  end;
                 end;
-
-              //Re-validate the form.
-              Form1.Enabled := true;
               end
-
-            else //Radio not detected.
-              begin
-              //Showing the error message.
-              BoxOk1.showMessageDialog(gettext(RADIO_ERROR), gettext(OK));
-              Steps.ActivePageIndex := 1;
-              NextLabel.Caption := gettext(NEXTB);
-              Next.OnMouseUp := Form1.NextMouseUp;
-              NextLabel.OnMouseUp := Form1.NextMouseUp;
-              end;
-            end //Dongle not connected.
-            
             else
               begin
-              //Checking first if it's a hardware problem.
-              if isHIDReady() then
+              Form1.setNextEnabled(false);
+              setPreviousEnabled(false);
+
+              result := Box1.showMessageDialog(gettext(SCREEN_5_CHOICE_3), 
gettext(YES), gettext(NO));
+
+              if result = Box.bOk then
                 begin
-                //Showing the error message.
-                BoxOk1.showMessageDialog(gettext(DONGLE_ERROR), gettext(OK));
+                sendReport(Report.ERROR);
+                Application.Terminate;
                 end
               else
                 begin
-                //Displaying HID error message.
-                BoxOk1.showMessageDialog(gettext(WINDOWS_ERROR), gettext(OK));
-                Steps.ActivePageIndex := 1;
-                NextLabel.Caption := gettext(NEXTB);
-                Next.OnMouseUp := Form1.NextMouseUp;
-                NextLabel.OnMouseUp := Form1.NextMouseUp;
+                Steps.ActivePageIndex := 5;
+                Next.Hide;
+                Previous.Hide;
+                NextLabel.Hide;
+                PreviousLabel.Hide;
+                ExitLabel.Caption := gettext(FINISH);
+                Exit.OnMouseUp := FinishButtonClick;
+                ExitLabel.OnMouseUp := FinishButtonClick;
                 end;
               end;
-          end
-        else
-          //Starting the server and Display error message.
-          begin
-          Form1.ShowSplashScreen();
-          TuxUtils.startServer(Application);
-          Form1.HideSplashScreen();
-          BoxOk1.showMessageDialog(gettext(SERVER_RESTART), gettext(OK));
+            end;
           end;
+
+        //Re-validate the form.
+        Form1.Enabled := true;
       Except
         setExitEnabled(true);
         setNextEnabled(true);


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to