Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Eigenschaften von Steuerelementen zur Laufzeit ...


1 reply to this topic

BongoUser

BongoUser
  • Full Members
  • 8 posts

Posted 19 July 2005 - 15:27

Hallo,

ich hab folgendes Problem.
Ich brauch für eine Installationsroutine vorab einen Dialog
mit mehreren Checkboxen die EXLUSIV oder NONEXLUSIV ausgewählt werden können.

Während der Dialog offen möchte ich den "Weiter" Button deaktivieren
wenn keine Checkbox ausgewählt ist.

Zusätzlich möchte ich beim Aufruf des Dialoges bestimmen welche Checkboxen
Enable und welche Disable sind.

Ich zum (de)aktivieren der Steuerelemete die Funktionen
Enable(nControl) und
Disable(nControl)

Leider funktionieren die Funktionen so nicht
und die Stuerelemente bleiben immer Enabled oder Disabled
(abhängig von der vordefinierten Einstellung im Dialogeditor) !?

Hier mein Codebeispiel:

CODE

#define BUTTON_NEXT          1
#define BUTTON_BACK       12
#define BUTTON_ABORT       9      
#define OPTION_A          1202
#define OPTION_B          1203
#define OPTION_C          1204

prototype NUMBER SdMyDialog(BOOL,BOOL,BOOL);

function NUMBER SdMyDialog(bOPT_A, bOPT_B, bOPT_C)

BOOL bDone;
NUMBER nControl, nReturn;

begin    

bDone = FALSE;    

EzDefineDialog("SdMyDialog", ISUSER, "SdMyDialog", 0);

if (!bOPT_A) then
 Disable(OPTION_A);         // Funktioniert nicht
endif;

if (!bOPT_B) then
 Disable(OPTION_B);         // Funktioniert nicht

endif;

if (!bOPT_C) then
 Disable(OPTION_C);         // Funktioniert nicht

endif;

while (!bDone)

Enable(BUTTON_NEXT);         // Funktioniert nicht


if (CtrlGetState("SdMyDialog",OPTION_A) = BUTTON_UNCHECKED) &&
  (CtrlGetState("SdMyDialog",OPTION_B) = BUTTON_UNCHECKED) &&
  (CtrlGetState("SdMyDialog",OPTION_C) = BUTTON_UNCHECKED) then
 Disable(BUTTON_NEXT);         // Funktioniert nicht

endif;

nControl = WaitOnDialog("SdMyDialog");

switch (nControl)  

//   Event Abhandlung für EXLUSIV
   case OPTION_A:
     nReturn = OPTION_B;  
     CtrlSetState("SdMyDialog",OPTION_B,BUTTON_UNCHECKED);
     CtrlSetState("SdMyDialog",OPTION_C,BUTTON_UNCHECKED);
     
   case OPTION_B:
     nReturn = OPTION_B;
     CtrlSetState("SdMyDialog",OPTION_A,BUTTON_UNCHECKED);
     CtrlSetState("SdMyDialog",OPTION_C,BUTTON_UNCHECKED);

   case OPTION_C:
     nReturn = OPTION_C;
     CtrlSetState("SdMyDialog",OPTION_A,BUTTON_UNCHECKED);
     CtrlSetState("SdMyDialog",OPTION_B,BUTTON_UNCHECKED);

   case BUTTON_BACK:
       nReturn = BUTTON_BACK;
       bDone = TRUE;

   case BUTTON_NEXT:
       // Es wurde auf Zurück geklickt
       bDone = TRUE;

   case BUTTON_ABORT:
       Do(EXIT);

endswitch;

endwhile;

EndDialog("SdMyDialog");
ReleaseDialog("SdMyDialog");
   
return nReturn;


end;


BongoUser

BongoUser
  • Full Members
  • 8 posts

Posted 20 July 2005 - 08:10

Hab eine Lösung gefunden:


Hier der Code für die Leute mit gleichen Problemen:


CODE

#define BUTTON_NEXT          1
#define BUTTON_BACK       12
#define BUTTON_ABORT       9      
#define OPTION_A          1202
#define OPTION_B          1203
#define OPTION_C          1204

prototype NUMBER SdMyDialog(BOOL,BOOL,BOOL);

function NUMBER SdMyDialog(bOPT_A, bOPT_B, bOPT_C)

BOOL bDone;
NUMBER nControl, nReturn, hwndDlg;

begin    

bDone = FALSE;    

EzDefineDialog("SdMyDialog", ISUSER, "SdMyDialog", 0);

while (!bDone)

endif;

nControl = WaitOnDialog("SdMyDialog");

// HIER erst die Funktionen zum Enable/Disable aufrufen

hwndDlg = CmdGetHwndDlg ("SdMyDialog");

// NEXT Button enable
 _WinSubEnableControl (hwndDlg, BUTTON_NEXT, TRUE);

if (CtrlGetState("SdMyDialog",OPTION_A) = BUTTON_UNCHECKED) &&
   (CtrlGetState("SdMyDialog",OPTION_B) = BUTTON_UNCHECKED) &&
   (CtrlGetState("SdMyDialog",OPTION_C) = BUTTON_UNCHECKED) then
// NEXT Button disable
 _WinSubEnableControl (hwndDlg, BUTTON_NEXT, FALSE);
endif;

switch (nControl)  
 
  case DLG_INIT:
     if (!bOPT_A) then
       _WinSubEnableControl (hwndDlg, OPTION_A, FALSE);
     endif;

     if (!bOPT_B) then
       _WinSubEnableControl (hwndDlg, OPTION_B, FALSE);
     endif;

     if (!bOPT_C) then
       _WinSubEnableControl (hwndDlg, OPTION_C, FALSE);
     endif;


//   Event Abhandlung für EXLUSIV
  case OPTION_A:
    nReturn = OPTION_B;  
    CtrlSetState("SdMyDialog",OPTION_B,BUTTON_UNCHECKED);
    CtrlSetState("SdMyDialog",OPTION_C,BUTTON_UNCHECKED);
   
  case OPTION_B:
    nReturn = OPTION_B;
    CtrlSetState("SdMyDialog",OPTION_A,BUTTON_UNCHECKED);
    CtrlSetState("SdMyDialog",OPTION_C,BUTTON_UNCHECKED);

  case OPTION_C:
    nReturn = OPTION_C;
    CtrlSetState("SdMyDialog",OPTION_A,BUTTON_UNCHECKED);
    CtrlSetState("SdMyDialog",OPTION_B,BUTTON_UNCHECKED);

  case BUTTON_BACK:
      nReturn = BUTTON_BACK;
      bDone = TRUE;

  case BUTTON_NEXT:
      // Es wurde auf Zurück geklickt
      bDone = TRUE;

  case BUTTON_ABORT:
      Do(EXIT);

endswitch;

endwhile;

EndDialog("SdMyDialog");
ReleaseDialog("SdMyDialog");
 
return nReturn;


end;


Edited by BongoUser, 20 July 2005 - 08:11.