Ich benutzte ListView mit den Checkboxen in meinem Win Installer. Gibt es eine Möglichkeit, die angegebene Checkbox zu deaktivieren (nicht abheben/checken)?
Vielen Dank.
NSIS ListView - Ist es möglich das Kontrollkästchen als "deaktiviert" zu setzen?
0
A
Antwort
0
Windows selbst hat eigentlich nicht mehr als zwei Zustände für die Kontrollkästchen in einer Listenansicht. Um mehr Zustände zu bekommen, müssten Sie draw them yourself mit dem System-Plugin in NSIS.
Eine weitere Einschränkung ist, dass das Plug-In nsDialogs keine Rückgabewerte unterstützt, wenn die Nachricht WM_NOTIFY
verarbeitet wird, sodass Sie Statusänderungen nicht durch Behandlung von LVN_ITEMCHANGING
blockieren können. Sie können LVN_ITEMCHANGED
jedoch fangen und den ursprünglichen Zustand wieder anwenden:
!include LogicLib.nsh
!include nsDialogs.nsh
!include WinMessages.nsh ; The 3rd-party CommCtrl.nsh file is buggy, include this first to make sure LVM_* is defined correctly
!ifndef LVM_GETITEMTEXT
!define /math LVM_GETITEMTEXTA ${LVM_FIRST} + 45
!define /math LVM_GETITEMTEXTW ${LVM_FIRST} + 115
${_NSIS_DEFAW} LVM_GETITEMTEXT
!endif
!include "CommCtrl.nsh"
!define /ifndef _COMMCTRL_NSH_VERBOSE ${_COMMCTRL_VERBOSE}
Page Custom MyPage
Var AllowCheckboxChanges
Function MyPage
nsDialogs::Create 1018
Pop $0
${NSD_CreateListView} 0u 0u 100% 100% "Listview"
Pop $0
SendMessage $0 ${LVM_SETEXTENDEDLISTVIEWSTYLE} 0 ${LVS_EX_CHECKBOXES}
IntOp $AllowCheckboxChanges $AllowCheckboxChanges + 1 ; Allow changes while we initialize
${NSD_OnNotify} $0 OnListNotify
${NSD_LV_InsertColumn} $0 0 200 "column 0"
${NSD_LV_InsertItem} $0 9 'Foo' ; read-only
${NSD_LV_SetCheckState} $0 0 1
${NSD_LV_InsertItem} $0 9 'Bar'
${NSD_LV_InsertItem} $0 9 'Baz' ; read-only
IntOp $AllowCheckboxChanges $AllowCheckboxChanges - 1 ; Block changes from now on
nsDialogs::Show
FunctionEnd
Function OnListNotify
Pop $1 ; HWND
Pop $2 ; Code
Pop $3 ; NMHDR*
${If} $2 = ${LVN_ITEMCHANGED}
${AndIf} $AllowCheckboxChanges = 0
System::Call "*$3(p,p,i,i.r2,i,i.r5,i.r4,i,&i8,p)" ; NMLISTVIEW
; Block changes to items 0 and 2
${If} $2 = 0
${OrIf} $2 = 2
IntOp $4 $4 & ${LVIS_STATEIMAGEMASK}
IntOp $5 $5 & ${LVIS_STATEIMAGEMASK}
IntOp $4 $4 >> 12
IntOp $5 $5 >> 12
${If} $4 <> $5
IntOp $4 $4 - 1
IntOp $AllowCheckboxChanges $AllowCheckboxChanges - 1 ; Runs out of stack if we don't block recursive NSD_LV_SetCheckState messages
${NSD_LV_SetCheckState} $1 $2 $4
IntOp $AllowCheckboxChanges $AllowCheckboxChanges + 1
${EndIf}
${EndIf}
${EndIf}
FunctionEnd
Wenn Sie den zusätzlichen Schritt gehen und die eigenen Kontrollkästchen zeichnen dann könnte man nur auf den Index Bild schauen, um zu sehen, wenn das Element schreibgeschützt ist oder nicht .
Verwandte Themen
- 1. Warum ist das Kontrollkästchen deaktiviert?
- 2. WPF ist es möglich, Gridname als Parameter zu Kontrollkästchen Ereignis
- 3. Ist es möglich, Benutzereingaben als Variablen zu setzen?
- 4. Ist es möglich, das Wurzelverzeichnis eines Knotenmoduls zu setzen?
- 5. Ist es möglich, Umgebungsvariablen dauerhaft zu setzen?
- 6. Ist es möglich, Header bedingt zu setzen?
- 7. Ist es möglich, drawableLeft programmgesteuert zu setzen?
- 8. Ist es möglich, MasterType programmatisch zu setzen?
- 9. ist es möglich, Adapter auf lineares Layout zu setzen?
- 10. Numerische Eingaben in 0 ändern, wenn das Kontrollkästchen deaktiviert ist
- 11. Überprüfen, ob Kontrollkästchen deaktiviert ist
- 12. Ist es nicht möglich, document.domain auf herokuapp.com zu setzen? Wie?
- 13. ist es möglich, ein Kontrollkästchen Kontrolle zwei Knopfzustand
- 14. Ist es möglich, ein NSIS-Installationsprogramm in VISTA automatisch auszuführen?
- 15. Checkbox-Wert setzen, wenn Checkbox deaktiviert ist
- 16. Spinner mit Kontrollkästchen Elemente, ist es möglich?
- 17. Ist es möglich, QML ListView zyklisch zu machen?
- 18. Ist es möglich, ein Kontrollkästchen/Optionsfeld nicht zu aktivieren?
- 19. Ist es möglich, Angular 2 deaktiviert Eingabe-Tag zu hacken?
- 20. Django: Ermitteln, ob das Kontrollkästchen abgeschickt oder deaktiviert ist
- 21. ist es möglich, onClickListener für benutzerdefinierte listView Element in Aktivität zu setzen?
- 22. Aktivierungsschaltfläche basierend auf ListView Kontrollkästchen aktiviert/deaktiviert WPF
- 23. Ist es möglich, die Variable byte [] in File() zu setzen?
- 24. Ist es möglich, Hintergrundbild für NSToolbar zu setzen?
- 25. Es ist möglich, statische Zeit in UIApplicationBackgroundFetchIntervalMinimum zu setzen?
- 26. Ist es möglich, session.gc_maxlifetime> 65535 Sekunden zu setzen
- 27. Java SWT: Aktionen rückgängig machen, wenn das Kontrollkästchen deaktiviert ist
- 28. Ist es möglich, scroll auf einer listView zu deaktivieren?
- 29. C# Ist es möglich, e.Label Wert in ListView zu ändern
- 30. Ist es möglich, ein ItemTemplate in einem ListView zu implementieren?
Es hilft wirklich, wenn Sie auch etwas von Ihrem Code posten, damit Leute, die versuchen zu antworten, nicht alles von Grund auf neu codieren müssen, nur um Ihr Beispiel zu replizieren. – Anders