Anterior Sumário Próximo OpenBASE! o Banco de Dados inteligente. Fale conosco!

Comandos e funções de controle de Caixas de Diálogo

Apresentamos a seguir os comandos e funções freqüentemente utilizados para gerenciar as caixas de Diálogo.

Comandos EnableControl e EnableControlId

Os comandos EnableControl e EnableControlId habilitam determinados controles (previamente desabilitados) tornando-os disponíveis dentro de uma DialogBox.

Sintaxe

EnableControl (<num>)

EnableControlId (<id>)

Onde:

<num> identifica o controle a ser ativado, ou seja, disponibilizado. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

Comandos DisableControl e DisableControlId

Os comandos DisableControl e DisableControlId desativam determinados controles dentro de uma DialogBox. O parâmetro <num> identifica o controle através de um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

Sintaxe

DisableControl (<num>)

DisableControlId (<id>)

Onde:

<num> identifica o controle a ser desativado. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

Comandos MoveControl e MoveControlId

Os comandos MoveControl e MoveControlId deslocam o controle identificado pelo número <num> ou pela identificação <id> e o posiciona nas coordenadas especificadas em <xi>,<yi>,<xl>,<yl>.

Sintaxe

MoveControl (<num>,<xi>,<yi>,<xl>,<yl>)

MoveControlId (<id>,<xi>,<yi>,<xl>,<yl>)

Onde:

<num> identifica o controle a ser deslocado. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

<xi>,<yi>,<xl>,<yl> especificam as coordenadas e os tamanhos para posicionar o controle que está sendo movido de lugar.

Comandos DeleteControl e DeleteControlId

Os comandos DeleteControl e DeleteControlId eliminam da tela o controle identificado pelo número <num> ou pela identificação <id>.

Sintaxe

DeleteControl (<num>)

DeleteControlId(<id>)

Onde:

<num> identifica o controle a ser deslocado. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

Comando RefreshContent

O comando RefreshContent exibe na tela o conteúdo atualizado dos vetores que foram associados aos controles ListBox ou ComboBox. Este comando permite repintar na tela o conteúdo dos controles acima referenciados, desde que seus correspondentes vetores sejam previamente preenchidos ou atualizados no programa.

Sintaxe

RefreshContent  (<str>)

Onde:

<str> identifica um vetor associado a ListBox ou ComboBox, assim como, também, uma variável associada a controles do tipo EditText, CheckBox, GroupBox e Image. O nome da variável pode ser passado como parâmetro ou a variável pode ser pública.

Comandos RefreshControl e RefreshControlId

Os comandos RefreshControl e RefreshControl Id exibem na tela o conteúdo atualizado do controle <num>, contado a partir de 01 dentro de uma DialogBox, ou do controle identificado por <id>. Este comando se aplica a ListBox, EditBox, CheckBox, GroupBox, ComboBox e Image, sendo similar ao comando RefreshContent. Se <num> é igual a –1 (um negativo) todos os controles do diálogo serão refrescados.

Sintaxe

RefreshControl (<num>)

RefreshControlId (<id>)

Onde:

<num> identifica o controle a ser atualizado. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

Comandos SelectControl e SelectControlId

Os comandos SelectControl e SelectControlId permitem selecionar, ou seja, marcar como "selected" algum dos itens dos controles ListBox ou ComboBox.

Sintaxe

SelectControl (<num>,<expc>)

SelectControlId (<id>,<expc>)

Onde:

<num> identifica o controle a ser processado. Neste caso, pode ser uma ListBox ou uma ComboBox. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

<expc> especifica o item a ser marcado como "selected" , dentro dos controles ListBox ou ComboBox especificados em <num>.

Comandos FocusControl e FocusControlId

Os comandos FocusControl e FocusControlId permitem "focalizar" um controle, ou seja, posicionar nele o cursor dentro de uma janela de diálogo.

Sintaxe

FocusControl (<num>)

FocusControlId (<id>)

Onde:

<num> Identifica o controle a ser processado. Todos os controles recebem um número seqüencial, a partir de 01, na ordem de especificação dentro da Caixa de Diálogo. Se <num> for um número negativo, indica que a mensagem KILLFOCUS, enviada pelo Windows para o programa OpusWin, será ignorada. Veja exemplo a seguir.

<id> especifica o nome atribuído ao controle, pela opção ID <expc>, quando da definição do mesmo dentro de um DialogBox.

A OpusWin considera que a digitação de um campo do tipo EditText foi concluída quando o "foco" sai desse campo, ou seja quando o Windows envia para o programa OpusWin o aviso de ocorrência de KILLFOCUS.

Em certas ocasiões, por exemplo quando foi associada uma função (via comando valid) a um controle EditText, e conveniente ignorar essas mensagens KILLFOCUS que o Windows gera, principalmente quando nada foi digitado no campo EditText. Por esta razão, quando o número do controle especificado em <num> for negativo, o programa OpusWin ignora o evento KILLFOCUS de um EditText.

No exemplo abaixo, quando o cursor sai (KillFocus) do campo "varcep", a função "varcep" será acionada. Se nada for digitado no campo varcep (por exemplo, passando-se o cursor para outro campo ou botão), será disparado pelo Windows o evento KILLFOCUS para o campo varcep. Este evento é recebido e interpretado pelo programa OpusWin. Como o campo varcep não está correto (pois nada foi digitado nessa campo), a mensagem "Cep inválido" seria emitida uma mensagem e o foco será posicionado em outro controle. Caso não fosse codificado o comando FocusControl (-4), o evento KILLFOCUS no campo varcep seria interpretado pelo programa OpusWin e a mensagem "Cep inválido" seria mostrada indefinidamente enquanto o campo CEP não fosse preenchido.

Exemplo

$nolib

prog

vartel = space(15)

varcep = space(10)

bt =1

function fval(l)

Dialog 00,00,79,23

        style WS_POPUP DS_MODALFRAME WS_CAPTION WS_SYSMENU

        ltext "Digite O Telefone:" NULL 05,05,25,01

        EditText NULL vartel 31,05,10,01

        ltext "Digite O Cep:"  NULL 05,07,25,01

        EditText NULL varcep    30,07,05,01   exec fval(varcep)

        defpushbutton "&OK"   bt 05,20,08,02  

        PushButton    "&Sair" bt 20,20,08,02  IDOK

EndDialog

if bt = 2

  return

endif

return

*Funcao Para Validar Numero CEP

func fval

parameters varcep

FocusControl(-4)

if empty (varcep)

   m = MessageBox("Cep Invalido")

   FocusControl(6)

endif

return .t. 

Funções GetFocusControl() e GetNextFocus()

As funções numéricas GetFocusControl() e GetNextFocus() retornam o número do controle, dentro de uma Janela de diálogo, para o qual o foco será transferido. Veja as observações no tópico a seguir.

Funções GetFocusControlId() e GetNextFocusId()

As funções cadeia GetFocusControlId() e GetNextFocusId() retornam o identificador (nome) do controle, dentro de uma Janela de diálogo, para o qual o foco será transferido.

A OpusWin considera que a digitação de um campo do tipo EditText foi concluída quando o "foco" sai desse campo, ou seja quando o Windows envia para o programa OpusWin o aviso de ocorrência de KILLFOCUS.

Em certas ocasiões, por exemplo quando foi associada uma função (via comando valid) a um controle EditText, e conveniente ignorar essas mensagens KILLFOCUS que o Windows gera, principalmente quando nada foi digitado no campo EditText.

Exemplo

No exemplo abaixo, imaginemos que o usuário acionou o botão Sair. Neste caso, o foco saiu do campo <varcep> e a função <varcep> será acionada. A função associada ao botão Sair verifica que o NextFocus é efetivamente o botão de saída e termina a Janela de diálogo.

Caso não fosse utilizada a função GetNextFocus() , o evento KILLFOCUS no campo <varcep> seria interpretado pelo programa OpusWin e a mensagem "Cep inválido" seria mostrada indefinidamente enquanto o campo CEP não fosse preenchido.

Veja a seguir o código básico do exemplo:

$nolib

prog

vartel = space(15)

varcep = space(10)

bt =1

function fval(l)

Dialog 00,00,79,23

        style WS_POPUP DS_MODALFRAME WS_CAPTION WS_SYSMENU

        ltext "Digite O Telefone:" NULL 05,05,25,01

        EditText NULL vartel 31,05,10,01

        ltext "Digite O Cep:"  NULL 05,07,25,01

        EditText NULL varcep    30,07,05,01   valid fval(varcep)

        defpushbutton "&OK"   bt 05,20,08,02  

        PushButton    "&Sair" bt 20,20,08,02  IDOK valid fval(varcep)

EndDialog

if bt = 2

  return

endif

return

*Funcao Para Validar Numero CEP

func fval

parameters varcep

n = GetFocusControl()                      && ou n = Get NextFocus()

if n = 6

   Cancel Dialog                                  && ou IDCANCEL

endif

if empty (varcep)

   m = MessageBox("Cep Invalido")

endif

return .t. 

Funções GetControl e GetControlId

As funções GetControl e GetControlId permitem obter o número ou nome do controle que acionou uma função valid a ele associada.

Sintaxe

<varnum> = GetControl ( )

<varchar> = GetControlId ( )

Onde:

<varnum> identifica uma variável numérica onde será retornado o número relativo do controle que acionou a função corrente através da cláusula valid.

<varchar> identifica uma variável cadeia onde será retornado o nome controle que acionou a função corrente através da cláusula valid.

Geralmente, as funções GetControl( ) e GetControlId() são utilizadas dentro de uma função (acionada por valid) para determinar qual foi o controle que acionou a função corrente. Desta forma, podemos associar a vários controles o mesmo bloco de procedimentos, diferenciando de acordo com o controle específico que acionou esse bloco de procedimentos.

Exemplo

A seguir apresentamos um exemplo que utiliza várias das opções de gerência dinâmica dos controles das Caixas de Diálogo, acima descritos.

Exemplos de comandos de controle de DialogBox

$nolib

prog

func fcontrol(l)

declare vetnom[6]=space(10)

vetnom[1]= "Ana"

vetnom[2]= "Beatriz"

vetnom[3]= "Carla"

vetnom[4]= "Denise"

vetnom[5]= "Eliane"

vetnom[6]= "Fábio"

varnom = "Ana"

varnum = 2

bt = 1

varnome= "EditText"

Dialog 00,00,40,16

   Font "Times New Roman" 10

  caption "Gerenciamento dinâmico da ListBox"

  style WS_OVERLAPPEDWINDOW

  ltext "ComboBox:" NULL   01,01,10,01

  ComboBox vetnom  varnom 01,02,10,06  WS_VSCROLL

  ltext "ListBox:"  NULL   21,01,10,01

  ListBox vetnom  varnum 21,02,10,06  WS_VSCROLL

  ltext "Nome:" NULL 01,10,5,01

  EditText NULL varnome 07,10,10,1

  DefPushButton "&Refresh"  bt 01,12,08,-12  Valid fcontrol(vetnom,bt)

  PushButton "&Enable"   NULL 11,12,08,-12 Valid fcontrol(vetnom,bt)

  PushButton "&Disable"  NULL 21,12,08,-12 Valid fcontrol(vetnom,bt)

  PushButton "&Move"     NULL 01,14,08,-12 Valid fcontrol(vetnom,bt)

  PushButton "&Delete"    NULL 11,14,08,-12 Valid fcontrol(vetnom,bt)

  PushButton "&Select"   NULL 21,14,08,-12 Valid fcontrol(vetnom,bt)

  PushButton "Sa&i"       NULL 31,14,08,-12 IDCANCEL

EndDialog

if bt = 6

  quit

endif

Return

func  fcontrol

parameters vetnom[],bt(n)

if bt = 1

  vetnom[6]="Pepe"

  RefreshControl(2)

  RefreshContent(vetnom) && Altera o ListBox  e ComboBox

elseif bt = 2

  EnableControl(5)

  EnableControl(6)

elseif bt = 3

  DisableControl(5)

  DisableControl(6)

elseif bt = 4

  MoveControl(5,14,08,05,01)

  MoveControl(6,14,09,10,01)

elseif bt = 5

  DeleteControl(5)

  DeleteControl(6)

else

  SelectControl(2,"Carla")

  SelectControl(4,"Denise")

endif

return(.t.)

Observação

Veja a tela produzida pelo exemplo acima:

Comandos InitControl e InitControlId

Os comandos InitControl e InitControlId servem para inicializar o limite máximo de uma Barra de progressão ou Histograma. Esta função recebe como parâmetros o número (<num>) ou nome (<id>) do controle ProgressBar ou Histogram assim como o limite superior desse controle ProgressBar ou Histogram

Sintaxe

InitControl <num>,<lim>)

InitControlId (<id>,<lim>)

Onde:

<num> identifica o número do controle do tipo ProgressBar ou Histogram, cujo limite superior deseja ser "resetado" ou inicializado.

<id> especifica nome do controle do tipo ProgressBar ou Histogram, cujo limite superior deseja ser "resetado" ou inicializado.

<lim> especifica o valor do limite superior de uma Barra de Progressão de um Histograma.

Funções CHEXW, CHEXMW e CHEXMEW

As funções lógicas Chexw, Chexmw e Chexmew permitem validar, mostrar e editar itens EditText dentro de uma janela de diálogo. Possuem as mesmas características e regras de utilização das funções Chex, Chexm e Chexme (da linguagem OPUS). Veja Manual da OPUS para maiores detalhes.

A função Chexw( ) pode ser chamada para validar um campo do tipo EditText.

Sintaxe

CHEXW (<chave>,<exp>)

Exemplo

EditText NULL v1 1,1,10,2 valid chexw("NOME_p",v1)

A função Chexmw( ) pode ser chamada para validar um campo do tipo EditText, colocando o valor de outro item num campo do tipo VarText.

Sintaxe

CHEXMW (<chave>,<exp>,<item>,<vartext>)

Exemplo

EditText NULL v1 1,1,10,2 valid chexmw("NOME_p",v1, "IDADE",v2)

VarText NULL v2  1,4,5,2

A função Chexmew( ) pode ser chamada para validar um campo do tipo EditText, colocando o valor de outro item num campo do tipo VarText, editado conforme uma máscara especificada.

Sintaxe

CHEXMEW (<chave>,<exp>,<item>,<vartext>,<mask>)

Exemplo

EditText NULL v1 1,1,10,2 valid chexmew("NOME_p",v1, "IDADE",v2,"XXX.XX")

VarText NULL v2  1,4,5,2

Comandos PrintControl e PrintControlId

Os comandos PrintControl e PrintControlId servem para imprimir um arquivo visualizado através do controle RichEdit, especificando:

Sintaxe

PrintControlId (<id>,<orien>)

Exemplo

Dialog …

  RichEdit NULL arq 5,5,40,20 ID("xxx")

PushButton "Imprime" NULL 5,26,7,2 valid(f1)

Func f1

PrintControlId ("xxx","PT")

return .t.

Anterior Sumário Próximo OpenBASE! o Banco de Dados inteligente. Fale conosco!