Музыка: | Pere Ubu - St. Arkansas |
Сiненькi сьцiплы бульточак
Каля паловы часу application developer'а йдзе не на ўласна распрацоўку праграм, а на барацьбу з чужым кодам - third-party APIs, controls, etc. Пры гэтым у мяне, здаецца, з ростам квалiфiкацыi гэты адсотак расьце, бо даюць правiць усё больш кавалкаў, да якiх другiя проста ня ведаюць як падступiцца.
Карацей - далi тут падправiць чужы праект. На форме 3 абсалютна аднолькавых чэкбокса, але 2 зь iх - майкрасофтаўскiя, а адзiн - шэрыданаўскi, чаму - невядома. але лепей не чапаць, бо пасыпецца ўсё як картачная хатка. Цяпер:
у мелкамяккага чэкбокса ўсё як трэба - ёсьць тры значэньнi з набора VBRUN.CheckBoxConstants : vbUnchecked = 0, vbChecked = 1, vbGrayed = 2
у шэрыданаўскага па дакумантах павiнна быць тое-ж самае: набор Constants_CheckBoxValue, канстанты ssCBUnchecked = 0, ssCBChecked = 1 i ssCBGrayed = 2
Але "б'юць не па пашпарце, а па зяпе". Рэальна гэты ё6ahы шэрыданаўскi чэкбокс прыймае значэньнi 0 - unchecked i -1 - checked. Мала таго, калi пiшаш яму
.Value = vbChecked
ён нават не канвертуе vbChecked у True, а тады ў -1 - проста нахабна пакiдае бокс невыбраным.
У рэзультаце напiсаў такiя функцыi:
'for microsoft checkbox checked is 1 and unchecked is 0
'for sheridan SSCheck checked is -1 and unchecked is 0
Public Function BoolToCheck(Value As Boolean, Optional ItsAStupidSheridanCheckBox As Boolean = False) As Integer
BoolToCheck = IIf(Value, IIf(ItsAStupidSheridanCheckBox, -1, vbChecked), vbUnchecked)
End Function
Public Function CheckToBool(Value As Integer) As Boolean
'vbUnchecked 0 is always unchecked for both Checkbox and SSCheck controls
'checked could be vbChecked=1 for Check boxes and -1 for SSCheck
CheckToBool = Not (Value = vbUnchecked)
End Function
Адно што суцяшае - нейкая нечакана пяшчотная назва BoolToCheck - бульточак. Сiненькi сьцiплы бульточак падаў, як Windows, штодзень...
Phone Home Jonah from the belly of the whale... (гл. current music)