Изменить значение редактируемого текста в Allegro CL

Я пытаюсь изменить значение элемента управления Editable-Text в Allegro CL (версия 8.0.1), нажав кнопку по умолчанию.

Я читал о (setf value), но не нашел примеров.

Функция, которую я привязал к событию по клику, следующая:

    (defun form1-default-button-2-on-click (dialog widget)
       (declare (ignorable dialog widget))

    t)

Как вы можете видеть, там не хватает кода :) Я пробовал разные методы, такие как (setf (slot value :txt 'value) 'TEXT) и (setf value 'TEXT), но безрезультатно.

Слот диалоговых элементов в форме представляет собой список со следующими элементами, определенными

(list (make-instance 'default-button :font
                   (make-font-ex nil "Segoe UI / Default" 12) :left
                   56 :name :default-button-2 :on-change
                   'form1-default-button-2-on-change :top 36)
    (make-instance 'editable-text :font
                   (make-font-ex nil "Segoe UI / Default" 12) :left
                   52 :name :txt :top 152 :value "")
 )

Любая помощь? Заранее спасибо.


person foliveira    schedule 10.02.2010    source источник


Ответы (3)


(setf (slot-value widget 'value) "foo")

Что-то вроде выше. Вам нужно получить значение символа в правильном пакете. вероятно, есть также функция доступа, такая как WIDGET-VALUE. Тогда (setf (виджет-значение виджета) "foo") может сработать...

Я не пользователь ACL - возможно, есть способы получше. Конкретные вопросы по ACL лучше всего задавать в списке рассылки их пользователей.

person Rainer Joswig    schedule 10.02.2010
comment
Решение со значением слота не работает, как и решение со значением виджета. - person foliveira; 11.02.2010
comment
Это был намек, но вам действительно следует использовать список рассылки для ACL. franz.com/support/acl.forum.lhtml - person Rainer Joswig; 11.02.2010

Где-то на franz.com есть пример, где я нашел это:

(defun form1-button5-on-change (widget new-value old-value)
  (declare (ignorable widget new-value old-value))
  (let ((szerkeszto (find-sibling :multi-line-editable-text-1 widget)))
    (setf (value szerkeszto) "bla" ))
  t) ; Accept the new value

символ «szerkeszto» становится многострочным редактируемым текстом-1, тогда вы можете использовать setf, как указано выше, для установки соответствующих атрибутов (например, «значение»).

надеюсь это поможет.

person hajovonta    schedule 05.08.2011

Вам нужно использовать функции «найти компонент» и «значение» вместе.

Функция «найти-компонент» находит виджет в вашем проекте, а «значение» возвращает значение виджета.

Если у вас есть статический текст в форме, вы можете изменить значение статического текста следующим образом.

(let ((ed1 (find-component :static-text-1 :form1))) (setf (value ed1) "Я сделал это."))

person a man    schedule 24.02.2014