在Allegro CL中更改可编辑文本值

时间:2010-02-10 19:59:18

标签: lisp common-lisp clos allegro-cl

我正在尝试通过单击默认按钮来更改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 "")
 )

有任何帮助吗?提前谢谢。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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来设置适当的属性(如“value”)。

希望这会有所帮助。

答案 2 :(得分:0)

你需要使用函数" find-component"和"价值"在一起。

功能" find-component"在项目中找到小部件                   和"价值"返回小部件的值。

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

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