#lisp #common-lisp #mscapi #lispworks
#lisp #общий язык-lisp #mscapi #lispworks #common-lisp
Вопрос:
Я работаю над игрой Connect Four, используя common lisp и LispWorks CAPI. Я закончил с интерфейсом, за исключением одной вещи: я использую кнопки (на кнопочной панели) для размещения элементов в столбцах, и я хотел бы отключить кнопку, как только соответствующий столбец заполнится. Я относительно новичок в lisp, и я особенно не разбираюсь в объектно-ориентированных материалах, поэтому я не могу понять, как это сделать.
Одна кнопка может быть создана следующим образом:
(setf my-button (capi:contain
(make-instance 'capi:push-button
:text "Button!")))
И отключен таким образом:
(capi:apply-in-pane-process
my-button #'(setf capi:button-enabled) nil my-button)
Кнопочная панель создается аналогично, за исключением того, что она принимает :items
аргумент, представляющий собой список кнопок (или данных, из которых CAPI создаст кнопки), для размещения на панели.
Мне просто нужно знать, как отключить отдельные кнопки кнопочной панели. Также было бы неплохо, если бы вы могли объяснить, что происходит в этом последнем фрагменте кода, потому что я этого вообще не понимаю.
Спасибо!
Ответ №1:
Небольшой поиск в руководстве показывает эту функцию, которая позволяет включать / отключать один или несколько элементов в push-button-panel
. Кроме того, код, который вы хотели объяснить, вызывает функцию (setf capi:button-enabled)
с аргументами nil
и my-button
. Однако эта функция вызывается в «процессе», связанном с вашей кнопкой. (смотрите документацию здесь
(P.S. Если вам нужна помощь в понимании «объектно-ориентированного материала», практический Common Lisp может быть полезным ресурсом)