Este já é um pouco mais complicado.
Queremos que o usuário, ao pressionar o botão, possa
escrever uma linha de texto que carregue-se no ListBox.
Gambas não proporciona por padrão um
diálogo do tipo "InputBox", sendo assim vamos
criar o nosso próprio InputBox. Criamos um novo formulário,
mas agora queremos dispor de um construtor. Por que?. Porque no
momento de cria-lo trocaremos algumas propriedades como título,
alguma mensagem de texto e um valor por padrão para a entrada
de texto. Este é o desenho que propomos:

O formulário não tem muita
complicação. Dispõe de um label e uma
caixa de texto (TextBox) e dois botões. Como qualquer caixa
de diálogo que se presa, é conveniente que possamos
cancelar com a tecla Escap (Esc) e aceitar com a tecla Enter:
Os Controles Button tem duas opções
adequadas para esta situação. São "Defoult"
e "Cancel". Para o botão
"Aceitar", colocamos "Defoult" a
True e "Cancel" a "False"
para o botão "Cancelar", colocamos ao contrario.
Desta aneira, quando abre-se o formulário, ao
pressionarmos a tecla <ENTER> será equivalente a
pressionar o botão "Aceitar" se pressionarmos a
tecla <ESC> simulará o botão "Cancelar".
Temos o seguinte problema, como retornar o valor que
o usuário introduziu na caixa de texto para a janela
principal. Temos que destacar que em Gambas não há
variável global, sendo assim teremos que procurar outra
solução. Criamos então um módulo no qual
ponhamos uma variável PUBLIC, assim podemos acessa-la de
qualquer ponto da aplicação.
Criamos um módulo (botão direito em
"Modules | New | Modules..." ) o chamamos de Mcomum,
por exemplo. Esta seria a implementação do módulo:
' Gambas module file PUBLIC texto AS String
Assim sem mais. Agora
temos uma variável visível a partir de qualquer ponto
do programa que pode ser acessada com: Mcomum.texto
A seguir é implementar o formulário que
fará as vezes do "InputBox". Esta seria sua
implementação:
' Gambas class file PUBLIC SUB _new(Titulo AS String, Mensagem AS String, OPTIONAL Texto AS String)
ME.Caption = Titulo Label1.Caption = Mensagem
' uma String é avaliada como False si estiver "vazia" IF Texto THEN TextBox1.Text = Texto
END
PUBLIC SUB Button1_Click() ' Este e o botão Aceitar
MComun.texto = TextBox1.Text ME.Close(0)
END
PUBLIC SUB Button2_Click() ' Este é o botão Cancelar
ME.Close(0)
END
O procedimento _new é o construtor. Como nos interessa que o
texto do label, o título e o texto a editar sejam diferentes a
cada vez, os ajustamos ao criar a janela.
O botão "Modificar" insere o texto do TextBox na variável Text do módulo
Mcomum e fecha o formulário. O Botão "Cancelar"
simplesmente fecha a janela
Como a variável Mcomum.Texto é
comum, temos que lembrar de "limpa-la" cada vez que a
utilizemos. Vamos ver agora mesmo.
O procedimento para o botão "Adicionar"
do formulário principal é o seguinte. É bastante
explicativo:
PUBLIC SUB Adicionar_Click() ' Declaramos nosso "Inputbox" f AS FInputBox ' Criamos el InputBox, passando-lhe o título, mensagem a mostrar ' e un valor por padrão: a data e a hora momento e uma flexa f = NEW FInputBox("Editar", "Escreva a linha que deseja adicionar:", CStr(Now) & " -> ") ' O mostremos f.ShowModal() ' Se poressionarmos agora Aceitar introduzimos o texto, ficará na variável MComun.texto IF MComum.texto THEN 'Uma cadeia vazia e False ' El controle listBox tem um método para adicionar texto: .Add ListBox1.Add(MComum.texto) ' "Esvaziamos" a variável comum MComum.texto = "" END IF END
|