1

我正在尝试通过单击默认按钮来更改 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)但均无济于事。

表单上的 dialog-items 插槽是一个列表,其中包含以下元素

(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 "")
 )

有什么帮助吗?提前致谢。

4

3 回答 3

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

类似上面的东西。您需要在正确的包中获取符号值。可能还有一个像 WIDGET-VALUE 这样的访问器函数。然后 (setf (widget-value widget) "foo") 可能会工作......

我不是 ACL 用户 - 可能有更好的方法。最好在其用户邮件列表中询问 ACL 特定问题。

于 2010-02-10T20:25:25.407 回答
0

我在 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 设置适当的属性(如“值”)。

希望这可以帮助。

于 2011-08-05T09:02:15.073 回答
0

您需要同时使用“查找组件”和“值”功能。

函数“find-component”在项目中查找小部件,“value”返回小部件的值。

如果表单中有静态文本,则可以像这样更改静态文本的值。

(let ((ed1 (find-component :static-text-1 :form1))) (setf (value ed1) "我做到了。"))

于 2014-02-24T06:53:40.893 回答