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:
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.
Eigenschaften von Steuerelementen zur Laufzeit ...
Started by
BongoUser
, Jul 19 2005 15:27
1 reply to this topic
Posted 19 July 2005 - 15:27
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; |
Posted 20 July 2005 - 08:10
Hab eine Lösung gefunden:
Hier der Code für die Leute mit gleichen Problemen:
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.