Pergunta

Estou tentando alterar o valor de um controle de texto editável no Allegro CL (versão 8.0.1) clicando em um botão padrão.

Eu li sobre (setf value) Mas não encontrou nenhum exemplo.

A função que eu tive no evento no clique é o seguinte

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

    t)

Como você pode ver, há uma falta de código lá :) Eu tentei vários métodos como (setf (slot value :txt 'value) 'TEXT) e (setf value 'TEXT) mas sem sucesso.

O slot de diálogo-itens no formulário é uma lista com os seguintes elementos definidos por

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

Qualquer ajuda? Desde já, obrigado.

Foi útil?

Solução

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

Algo como o acima. Você precisa obter o valor do símbolo no pacote correto. Provavelmente, também há uma função de acessador como o valor do widget. Então (SETF (widget-valor do widget) "Foo") pode funcionar ...

Não sou um usuário da ACL - provavelmente existem maneiras melhores. Perguntas específicas do ACL são melhor feitas em seus usuários.

Outras dicas

Há um exemplo em algum lugar no Franz.com, onde achei o seguinte:

(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

O símbolo "szerkeszto" se torna o text-text-1 multi-linear, então você pode usar o setf como o acima para definir atributos apropriados (como "valor").

espero que isto ajude.

Você precisa usar as funções "Find-Component" e "Value" juntos.

A função "Find-Component" encontra o widget em seu projeto e o "valor" retorna o valor do widget.

Se você tiver texto estático em um formulário, poderá alterar o valor do texto estático como este.

(Let ((ED1 (Find-Component: Static-Text-1: Form1))) (Setf (Value ED1) "Eu fiz isso."))))

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top