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

Controles incluídos nas Caixas de Diálogo

A seguir apresentamos os controles a serem incluídos dentro de Caixas de Diálogo, conforme as necessidades dos usuários.

Controle Caption

O controle Caption informa o título da Caixa de Diálogo, que será exibido na linha de título, alinhado à esquerda.

Exemplo

segur=1

nivel="a"

Dialog 06,02,73,13

    caption "Mostra a utilização de espaço em disco de um Banco de Dados"

    ltext texto1 NULL 02,01,15,01

    EditText NULL banco 18,01,40,01 context(10)

    ltext texto2 NULL 07,03,10,01

    EditText NULL str(segur) 18,03,10,01

    ltext texto3 NULL 32,03,06,01

    EditText NULL nivel 39,03,06,01

    GroupBox "Marque aqui as opções desejadas"  02,05,70,04

                       . . .

EndDialog

Observação

Os comandos do exemplo acima (apenas um pequeno trecho da definição de uma Caixa de Diálogo típica) produzirão a seguinte Janela de Caixa de Diálogo no Windows:

Controle Style

O controle Style define os estilos associados à janela do Quadro de Diálogo. Os estilos jogam um papel importante na interface visual do Windows. São associados aos componentes do ambiente gráfico para definir ou modificar seu aspecto, sua aparência e seu comportamento, respondendo aos eventos do aplicativo. A utilização correta dos estilos facilita a programação, pois as funções comuns, usadas freqüentemente em ambiente gráficos e visuais, são implementadas, de alguma forma, através de combinação de estilos.

A OpusWin implementa os estilos do Windows através de comandos próprios ou, em alguns casos, através da especificação dos estilos do Windows dentro do programa.

Os estilos especificados no comando Style são estilos relacionados às janelas das Caixas de Diálogo. Estes estilos definem características da Caixa de Diálogo como um todo, assim como dos controles a ela subordinados. Por exemplo, se for especificado Style DS_FIXEDSYS, significa que vai ser utilizada a fonte SYSTEM_FIXED_FONT, tanto para a janela DialogBox como para todos os controles definidos dentro dessa DialogBox.

Os estilos genéricos de uma janela DialogBox, a serem especificados no comando Style, são apresentados na tabela a seguir. Podem ser especificados como uma combinação de uma, ou mais, das seguintes opções:

Estilo da janela DialogBox

Descrição

WS_SYSMENU

Cria uma janela que exibe o menu de controle na barra de título. O menu de controle é composto pelos botões Minimizar, Maximizar e Close

WS_CAPTION

Cria janela com barra de título

WS_MAXIMIZEBOX

Cria uma janela com o botão "Maximizar"

WS_MINIMIZEBOX

Cria uma janela com o botão "Minimizar"

WS_OVERLAPPEDWINDOW

Cria uma janela com as seguintes características:

  • possui um título e uma borda
  • usa estilo WS_SYSMENU
  • possui uma moldura grossa, que pode ser utilizada como "puxador" para redimensionar a janela utilizando o mouse.

WS_POPUP

Cria uma janela secundária, instantânea.

WS_EX_TOPMOST

Permite que a janela de uma Dialog Box seja exibida em primeiro plano na área de trabalho.

DS_CENTER

Centraliza a Dialog Box dentro da área de trabalho.

DS_CENTERMOUSE

Centraliza o cursor do mouse dentro da Dialog Box

DS_CONTEXTHELP

Inclui um sinal de interrogação no Menu de Controle da caixa de Diálogo, a ser utilizado pelos mecanismos de "Help in context". O estilo DS_CONTEXTHELP não pode ser utilizado juntamente com WS_MAXIMIZEBOX ou WS_MINIMIZEBOX.

DS_3DLOOK

A janela apresenta aparência 3D

DS_FIXEDSYS

Usa a fonte SYSTEM_FIXED_FONT em vez de SYSTEM_FONT

Exemplo

Dialog 06,02,73,13

  caption "Mostra a utilização de espaço em disco de um Banco de Dados"

  style WS_POPUP  WS_CAPTION WS_SYSMENU DS_CENTER

EndDialog

Controle Help

O controle Help informa o nome do arquivo de ajuda (arquivo .HLP ou .CHM) que contém os tópicos de Help associados aos controles nas Caixa de Diálogo. A elaboração e associação dos tópicos de ajuda é uma tarefa muito importante, dependendo dela a correta compreensão do aplicativo e a eficiência do usuário na execução dos procedimentos. O Windows oferece o recurso de Help in Context para permitir solicitar ajudas específicas para cada campo (controle) na Caixa de Diálogo.

A associação dos tópicos de ajuda aos controles de uma Caixa de Diálogo possui duas etapas:

  1. Elaboração, identificação e associação dos tópicos de ajuda na fase de desenvolvimento do aplicativo.
  2. Acionamento dos tópicos de ajuda, por parte do usuário, na fase de execução do aplicativo.

A primeira etapa acima pode ser desenvolvida com o auxílio de recursos tais como o Help WorkShop e o Html Help WorkShop. Os tópicos recebem uma identificação para serem associados e acionados pelo aplicativo.

A segunda etapa acima pertence ao usuário final ao executar o aplicativo. Os tópicos de ajuda do Help in Context são acionados através de um dos seguintes procedimentos:

Controle Font e cláusula Font

O controle Font informa o nome e o tamanho da fonte a serem utilizados dentro da Caixa de Diálogo, como um todo. A cláusula Font está associada a determinados controles da DialogBox.

Sintaxe

font <"fonte"> <tam>

Onde:

<"fonte">

Especifica o nome completo da fonte a ser utilizada.

<tam>

Especifica o tamanho da fonte referenciada em <"fonte">, expresso em caracteres ou em "units". Para informar o tamanho da fonte em "units" (unidades de diálogo) basta especificá-lo em forma negativa.

Exemplo

A seguir apresentamos um exemplo utilizando o comando e a cláusula Font.

$nolib

prog

func fver(l)

bt=-1

varc=""

Dialog 00,00,32,10

  style WS_OVERLAPPEDWINDOW

  font "AlexsHand" 18

  caption 'Exemplo do comando e opção "Font"'

  ctext "Apenas para verificar fontes" NULL 00,00,32,01 font("Arial Black", -10)

  defpushbutton "&Push1" bt 01,02,08,-12  exec fver(bt);

                        font ("Times New Roman", -6)

  PushButton "Push&2"   NULL 11,02,08,-12 exec fver(bt);

                        font ("Times New Roman", -8)

  PushButton "Push&3"   NULL 21,02,08,-12 exec fver(bt);

                        font ("Times New Roman", -10)

  PushButton "Push&4"   NULL 01,05,08,-12 exec fver(bt);

                        font ("Elephant", 1)

  PushButton "Push&5"   NULL 11,05,08,-12 exec fver(bt);

                        font ("Elephant Italic", 1)

  PushButton "&Quit"    NULL 21,05,08,-12 IDOK;

                        font ("Arial Black", -10)

  ltext "Qual o tipo de fonte?:" NULL 01,07,22,01 font("Arial Black", 1)

  EditText NULL varc 01,08,22,01 font("Arial Black", 1)

EndDialog

quit

func  fver

parameters bt(n)

return(.t.)

Observação

Os comandos do exemplo acima produzirão a seguinte DialogBox :

Controle Start

Permite especificar o número do controle, dentro da Caixa de diálogo, que, inicialmente, vai receber o foco. Qualquer controle pode ser focalizado, dinamicamente, através do comando FocusControl.

Sintaxe

Start <numc>

Onde:

<numc>

Especifica o número seqüencial do controle, iniciando de 1 (um), que receberá, inicialmente o focus.

Controle Verify

O controle Verify, associado a Caixas de Diálogo e Folhas de Propriedades, serve para invocar uma função lógica, passando, como parâmetros, variáveis definidas dentro do programa, (associadas, ou não, a Caixas de Diálogo e Folhas de Propriedades.

O controle Verify constitui um recurso de grande utilidade, pois a função lógica, por ele invocada, permite, por exemplo, validar, de forma individual e referencial, as informações fornecidas pelo usuário ou obtidas pelo programa. Se a função acionada pelo comando Verify retornar um valor lógico verdade ("return (.t.)"), significa que as informações validadas estão corretas. Neste caso, o Quadro de Diálogo será concluído e os dados podem ser processados. Caso a função lógica invocada pelo comando Verify retorne um valor lógico falso ("return(.f.)"), o Quadro de Diálogo permanece aberto e sua janela disponível na tela, permitindo, por exemplo, enviar avisos, do tipo MessageBox ou Message na barra de status, para que o usuário acerte ou complete as informações digitadas no Quadro de Diálogo.

O objetivo da função invocada pelo comando Verify é, obviamente, fazer a verificação das informações e processá-las.

O comando Verify, de forma diferente da cláusula Valid, não é associado aos controles das Caixas de Diálogo, devendo ser codificado como se fosse um dos controles da DialogBox.

Exemplo utilizando Verify numa DialogBox:

O exemplo que segue utiliza o comando Verify dentro de uma Caixa de Diálogo.

$nolib

prog

func vfy_dele(l)

banco,opc = ""

segur=1

nivel="a"

botao = -1

gbx1 = 1

texto1="Banco de dados:"

texto2="Segurança:"

texto3="Nível:"

tx1gb1="Marque aqui as opções desejadas"

tx1cb1="Verificar os arquivos na abertura do Banco (-O)"

tx1cb2="Pedir confirmação antes de eliminar o dicionário (-c)"

vl1, vl2 = .t.

Dialog 00,01,64,14

    caption "Comando Verify em DialogBox"

    style WS_OVERLAPPEDWINDOW

    Ltext texto1 NULL 02,02,15,01

    EditText NULL banco 18,02,28,01 ES_AUTOHSCROLL

    Ltext texto2 NULL 07,04,10,01

    EditText NULL str(segur) 18,04,10,01

    Ltext texto3 NULL 32,04,06,01

    EditText NULL nivel 39,04,06,01

    GroupBox tx1gb1 gbx1 02,06,61,05

      CheckBox tx1cb1 vl1 03,08,60,01

      CheckBox tx1cb2 vl2 03,09,60,01

      DefPushButton "&Ok" botao 02,12,08,-12 IDOK

      PushButton "&Cancel" NULL 12,12,08,-12 IDCANCEL

      PushButton "&Help" NULL 22,12,08,-12;

        valid vfy_dele (botao, banco, str(segur), nivel, vl1, vl2)

      PushButton "&Quit" NULL 32,12,08,-12 IDCANCEL

      PushButton "Browse" NULL 50,02,08,-11;

        valid vfy_dele (botao, banco, str(segur), nivel, vl1, vl2)

      Verify vfy_dele (-1, banco, str(segur), nivel, vl1, vl2)

  EndDialog

quit

func vfy_dele

parameters botao(n), banco, segur, nivel, v1(l), v2(l)

do case

  case botao=1 && ok

  case botao=3 && Help

    cmd_run="winhlp32.exe  ..\help\util.hlp"

    run cmd_run

    return .t.

  case botao=5 && Procura

    banco=GetOpenFileName("*.*","","Bancos de Dados/*.*")

    return .t.

endcase

banco = alltrim (banco)

if empty(banco)

  Message "Favor informar o Banco de Dados a ser carregado ..."

  return .f.

endif

segur = alltrim(segur)

if  len(segur) = 0

  segur = "1"

endif

nivel = alltrim(nivel)

if  len(nivel) = 0

  nivel = "a"

endif

opc = ""

opc = opc + " -b"+banco + " -s"+segur + " -n"+nivel

if v1 = .t.

  opc = opc + " " + "-c"

endif

if v2 = .f.

  opc = opc + " " + "-O"

endif

mesegur="windele " + opc

ret=MessageBox (mesegur,"Para testes ...","O","I")

return .t.

Observação

O programa acima produz, entre outras, a seguinte tela:

Exemplo utilizando Verify numa Property Sheet

O exemplo que segue utiliza o comando Verify no contexto de Property Sheets.

$nolib

prog

func fverify(l)

decl vetc[06]=space(10)

vetc[01]="Manga"

vetc[02]="Abacaxi"

vetc[03]="Laranja"

vetc[04]="Limão"

vetc[05]="Banana"

vetc[06]="Outros"

bt=1

varc="Outros"

varn = 6

propsheet

  caption "Exemplo de Property Sheets"

  font "Arial Narrow"

  Verify fverify (varc, varn)

  Start 2

  proppage 05,05,28,12

    caption "ComboBox"

    font "Arial Narrow"

    style WS_OVERLAPPEDWINDOW

    Ltext "Selecione da lista:" NULL 02,01,20,01

    ComboBox vetc varc 10,03,16,06 WS_VSCROLL

  endproppage

  proppage 05,05,28,12

    caption "ListBox"

    font "Arial Narrow"

    style WS_OVERLAPPEDWINDOW

    Ltext "Selecione da lista:" NULL 02,01,20,01

    ListBox vetc varn 10,03,16,06 WS_VSCROLL IDOK

  endproppage

  proppage 05,05,28,12

    caption "EditBox"

    font "Arial Narrow"

    style WS_OVERLAPPEDWINDOW

    Ltext "Escreva algo:" NULL 02,01,20,01

    EditText NULL varc 02,03,24,08;

      ES_MULTILINE ES_AUTOHSCROLL ES_AUTOVSCROLL ES_WANTRETURN

  endproppage

endpropsheet

if PropButton() = 0    && cancel

  return

endif

end

func fverify

parameters varc, varn(n)

mens="varc="+varc+",  varn="+str(varn)

ret=MessageBox(mens,"Rotina chamada por Verify...","O","I")

return .f.

Observação

O programa acima produz, entre outras, a seguinte tela:

Controle Init

Especifica uma função que será invocada na inicialização da Caixa de diálogo, permitindo, assim, agrupar procedimentos a serem executados automaticamente sobre quaisquer dos controles da mesma.

Sintaxe

Init <func>(<param1>, ...< paramn>)

Onde:

<func>

é o nome da função e <param1> até <paramn> são os parâmetros passados a essa função.

Controle CheckBox

O comando CheckBox apresenta listas de itens, precedidos por pequenas "caixas de verificação" ("Check Boxes"), permitindo marcar (ou seja, "checar") uma ou mais opções dessa lista.

A sintaxe geral deste comando é:

CheckBox <nome>  <varl> <xi,yi,xl,yl> [IDOK | IDCANCEL]

                     [ID <expc>] [ENABLE|DISABLE]

                     [CONTEXTid(<num>)]  [message <texto>)] [tip <tip>]

Onde:

Exemplo

$nolib

prog

decl vet_cbx[06]=space(16)

vet_cbx[01]="Manga"

vet_cbx[02]="Abacaxi"

vet_cbx[03]="Laranja"

vet_cbx[04]="Limao"

vet_cbx[05]="Banana"

vet_cbx[06]="Outros"

bt=1

cbx6 = .t.

cbx1, cbx2, cbx3, cbx4, cbx5 = .f.

Dialog 02,02,32,13

  caption "Exemplo do controle CheckBox"

  style WS_POPUP WS_CAPTION WS_SYSMENU

  Ltext "Selecione os itens:" NULL 02,01,20,01

  CheckBox vet_cbx[01] cbx1 06,03,16,01

  CheckBox vet_cbx[02] cbx2 06,04,16,01

  CheckBox vet_cbx[03] cbx3 06,05,16,01

  CheckBox vet_cbx[04] cbx4 06,06,16,01

  CheckBox vet_cbx[05] cbx5 06,07,16,01

  CheckBox vet_cbx[06] cbx6 06,08,16,01

  DefPushButton "&Ok" bt 06,10,08,02 IDOK

  PushButton "Cance&l" NULL 16,10,08,02 IDCANCEL

EndDialog

return

Observação

Os comandos do exemplo acima produzirão a seguinte DialogBox:

Controle ListBox

O comando ListBox exibe uma lista de itens ou opções a serem selecionados. Normalmente, este recurso é utilizado para visualizar os dados de uma consulta.
Podem ser associadas mensagens a cada um dos elementos da ListBox. As mensagens associadas serão exibidas na barra de status quando o elemento correspondente na ListBox for selecionado com um "click" do mouse.

A sintaxe geral deste comando é:

ListBox <vetc> <varn> <xi,yi,xl,yl> <estilo> [Font (<"font">,<tam>)]

                             [ID <expc>] [ENABLE|DISABLE]

                             [IDOK | IDCANCEL]  [CONTEXTid(<num>)]

                             [MESSAGE <vetmsg>]  [tip <tip>]

                             [select <func> (<par1>, ... ,<parn>)]

                             [dblclk <func> (<par1>, ... ,<parn>)]

                             [valid <func>(<p1>, <pn>)]

Onde:

Os seguintes estilos podem ser especificados no comando ListBox:

Estilos da ListBox

Descrição

LBS_USETABSTOPS

Permite que uma ListBox reconheça e interprete os caracteres de tabulação quando apresentar na tela os elementos dessa ListBox. Isto permite organizar e alinhar os elementos de uma ListBox, como vemos no exemplo a seguir.

WS_VSCROLL

Permite criar janelas com barra de rolagem vertical.

WS_HSCROLL

Permite criar janelas com barra de rolagem horizontal.

DS_FIXEDSYS

Usa a fonte SYSTEM_FIXED_FONT em vez de SYSTEM_FONT

Exemplo 01

$library  = bibmotoca.lib  

proc E_Servico

include motoca.h

*Funçoes utilizadas

func ServicoSelect(l)

func SenhaOK(l)

func SetupS(l)

func Incluir(l)

func Alterar(l)

func Remover(l)

func ExecutarServ(l)

func ValidaSiglaS(l)

func PegaServico(n)

**Verificação do direito de acesso

if !SenhaOK(5)

    return

endif

**Le os servicos para vServico e vCodServ do RefrescaTela

*Monta a Tela de entrada/modificações de Serviços

Dialog 0, 0, 192, 100 units

  caption "Entrada dos Serviços"

  style    WS_OVERLAPPEDWINDOW DS_CENTER

  init SetupS()

  ListBox  vListBoxS nServico 10, 30, 172, 40 font("arial", 8);

WS_VSCROLL LBS_USETABSTOPS select ServicoSelect() 

  EditText NULL aServico  10,  74, 130, 10 font("arial", 8)

  EditText NULL aSiglaS   145, 74, 20,  10 font("arial", 8);

ES_UPPERCASE ; valid ValidaSiglaS()

  DefPushButton "Executar" retorno 142, 87, 40, 12  font("arial", 8);

valid ExecutarServ()

  PushButton "Sair" retorno  99,  87, 40, 12 IDOK font("arial", 8)

  PushButton "Incluir" NULL 35, 9, 40, 12 font("arial", 8) valid Incluir()

  PushButton "Alterar" NULL 79, 9, 40, 12 font("arial", 8) valid Alterar()

  PushButton "Excluir" NULL 123, 9, 40, 12 font("arial", 8) valid Remover()

  Ltext   "Informe o que deseja clicando em um dos botões abaixo:";

NULL 10, 00, 190, 08 font("arial", 8)

  Ltext "Serviços Cadastrados" NULL 10, 22, 100, 08 font("arial", 8)

  ltext "Sigla" NULL 121, 22, 20,   08 font("arial", 8)

  Ltext "Serviço selecionado"     NULL    10,  66, 100,  08 font("arial", 8)

  ltext "Sigla"    NULL    145, 66, 20,   08 font("arial", 8)

EndDialog

if retorno = 1 && Saida

    return

endif    

end

Observação

O exemplo acima produz a seguinte tela no Windows:

Exemplo 02

$nolib

prog

func funcval(l)

decl public vet_cbx[06]=space(16)

vet_cbx[01]="Manga"

vet_cbx[02]="Abacaxi"

vet_cbx[03]="Laranja"

vet_cbx[04]="Limao"

vet_cbx[05]="Banana"

vet_cbx[06]="Outros"

bt=1

opt=6

Dialog 02,02,42,13

  caption "Exemplo de Controle ListBox"

  style WS_POPUP  WS_CAPTION WS_SYSMENU

  Ltext "Selecione alguma coisa:" NULL 02,01,24,01

  ListBox vet_cbx opt 06,03,16,06 WS_Vscroll IdOk;

     valid funcval (opt, bt)

  DefPushButton "&Ok" bt 06,10,08,02 IDOK;

     valid funcval (opt, bt)

  PushButton "Cance&l" NULL 16,10,08,02 IDCANCEL;

     valid funcval (opt, bt)

EndDialog

quit

func funcval

parameters opt(n),bt(n)

if bt=2      && cancel ?

  return .t.

endif

decl public vet_cbx[06]=space(16)

mens="opt="+vet_cbx[opt]+", botao="+str(bt,2)

ret=MessageBox(mens,'"Funcval" chamada via VALID',"O","I")

return .f.

Observação

O exemplo acima produz a seguinte tela no Windows:

Controle EditText

O comando EditText é utilizado para construir o controle EditBox dentro de uma Caixa de Diálogo e mostra uma área retangular onde os dados podem ser informados (digitados), consultados ou alterados pelo usuário.

Usualmente, o EditBox serve para entrada de dados, em cujo caso a área construída pelo comando EditText encontra-se vazia. Os estilos e as Pictures associados a este controle permitem um bom gerenciamento do seu conteúdo e apresentação.

A sintaxe geral deste comando é:

EditText NULL <varc> <xi,yi,xl,yl> <estilo> [IDOK]

                                        [ID <expc>] [ENABLE|DISABLE]

                                        [CONTEXTid(<num>)]

                                        [PIC[ture] <editmask>] [Font (<"font">,<tam>)]  [tip <tip>]

                                        [valid <func>(<p1>, <pn>)]  [when <func>(<p1>, <pn>)]

Onde:

Alguns dos estilos da EditBox, disponíveis no Windows, podem ser especificados na opção <estilo> do comando EditText. Geralmente, os nomes destes estilos iniciam com o prefixo ES_ (de EditBox Style). Porém, os próprios recursos da OpusWin implementam, de formas alternativas, as características dos estilos Windows. É o caso, por exemplo, da cláusula PICTURE.

Caso seja necessário, os seguintes estilos Windows podem ser especificados para um controle EditBox, dentro de um programa OpusWin:

Estilos de EditBox

Descrição

ES_AUTOHSCROLL

Automaticamente faz rolagem horizontal do texto editado.

ES_AUTOVSCROLL

Automaticamente faz rolagem vertical do texto editado.

ES_CENTER

Centraliza o texto, dentro de um controle de edição com múltiplas linhas.

ES_LEFT

Alinha o texto à esquerda.

ES_LOWERCASE

Converte para minúsculos quaisquer caracteres, na medida em que são digitados dentro do controle de edição.

ES_MULTILINE

Designa um controle de edição do tipo MULTILINE. Não especificando este estilo, assume-se que o controles tem apenas uma única linha.
Observações:

  • Quando o controle de edição "multiline" se encontra dentro de uma caixa de diálogo, a tecla ENTER aciona o botão default (ou seja, o "DefPushButton").
  • Se for necessário utilizar a tecla ENTER como "carriage return" (passando para uma outra linha), deve ser especificado o estilo ES_WANTRETURN.
  • Se especificado o estilo ES_AUTOHSCROLL, haverá um scroll horizontal toda vez que o indicador do mouse atingir a borda direita do controle de edição. Para iniciar uma nova linha, o usuário deve pressionar a tecla ENTER.    

ES_NUMBER

São aceitos apenas caracteres numéricos dentro de um controle de edição.

ES_PASSWORD

Exibe um asterisco (*) para cada caracter digitado dentro do controle de edição.

ES_READONLY

O conteúdo mostrado no controle de edição é read-only, não sendo permitido digitar nada sobre ele.

ES_RIGHT

Alinha o texto à direita dentro de um controle de edição de múltiplas linhas.

ES_UPPERCASE

Converte para maiúsculos todos os caracteres digitados dentro do controle de edição.

ES_WANTRETURN

Especifica que será inserido um "carriage return" sempre que o usuário tecla ENTER dentro do texto do controle de edição. Se não for especificado este estilo, pressionar ENTER produz o mesmo efeito que pressionar o botão default, definido em DefPushButton. Este estilo não se aplica o controles de edição com apenas uma linha de texto.

DS_FIXEDSYS

Usa a fonte SYSTEM_FIXED_FONT em vez de SYSTEM_FONT

Exemplo

$nolib

$lentmp=320

prog

func vfy_geral(l)

decl vet[08]=space(40)

vet[1]="Con diez cañones por banda"

vet[2]="viento en popa a toda vela"

vet[3]="no corta el mar, sino vuela"

vet[4]="un velero bergantín."

vet[5]="Bajel, pirata que llaman,"

vet[6]='por su brabura, "El Temido"'

vet[7]="en todo el mar conocido"

vet[8]="del uno al outro confín."

private campo1(320),campo2(40)

campo1= vet[01] + chr(13) + chr(10)+ ;

        vet[02] + chr(13) + chr(10)+ ;

        vet[03] + chr(13) + chr(10)+ ;

        vet[04] + chr(13) + chr(10)+ ;

        vet[05] + chr(13) + chr(10)+ ;

        vet[06] + chr(13) + chr(10)+ ;

        vet[07] + chr(13) + chr(10)+ ;

        vet[08]

campo2=""

botao = -1

Dialog 2,2,54,16

  caption "Exemplo de controle EditBox"

  style WS_OVERLAPPEDWINDOW

  rtext "Multiline:" NULL 00,02,10,01

  EditText NULL campo1 11,02,40,-66 ;

     ES_MULTILINE ES_CENTER ES_AUTOHSCROLL ES_AUTOVSCROLL ES_WANTRETURN

  rtext "EditBox:" null 00,12,10,01

  EditText NULL campo2 11,12,40,01 ES_AUTOHSCROLL

  DefPushButton "&Ok" botao 11,14,-24,-10 IDOK

  PushButton "&Quit" NULL 20,14,-24,-10 IDCANCEL

  Verify vfy_geral (botao, campo1, campo2)

EndDialog

return

func vfy_geral

private mens(320)

parameters botao(n), campo1, campo2

if botao = 1     && ok

  mens="campo1="+trim(campo1)+ chr(10) + ;

       "campo2="+trim(campo2)

  ret=MessageBox(mens,"MessageBox no EditBox...","O","I")

  return .f.

endif

return .t.

Observação

O exemplo acima produz a seguinte tela no Windows:

Controle RichEdit

O controle RichEdit permite a visualização e impressão de arquivos .TXT e .RTF. O parâmetro <arq> (na sintaxe abaixo especificada) é uma variável que contém o nome do arquivo a ser visualizado ou impresso, que pode ser gerado como um relatório para a impressora utilizando o comando SET PRINTER TO "file:<arquivo>" antes do comando SET PRINT ON.

O comando EJECT (veja manual da OPUS) gera um comando \f a ser interpretado durante o processo de impressão do arquivo.

Os comandos PrintControl ou PrintControlId são utilizados para imprimir o arquivo visualizado pelo controle RichEdit.

A sintaxe geral do comando RichEdit é:

RichEdit NULL <arq> <xi,yi,xl,yl> <estilo> [IDOK]

                          [ID <expc>] [ENABLE|DISABLE]

                          [CONTEXTid(<num>)]

                          [PIC[ture] <editmask>] [Font (<"font">,<tam>)]  [tip <tip>]

                          [valid <func>(<p1>, <pn>)]  [when <func>(<p1>, <pn>)]

Onde:

Exemplo

$nolib

prog

arq="rel.txt"

func f1(l)

decl vet[08]=space(40)

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.

Controle ComboBox

O comando ComboBox é utilizado para construir listas de opções, numa combinação de EditBox com ListBox, permitindo, portanto, consultar, selecionar e modificar os elementos deste controle da Caixa de Diálogo. Sendo assim, o ComboBox apresenta, simultaneamente, uma lista de seleção (ListBox) e uma caixa de edição (EditBox).

A sintaxe geral deste comando é:

ComboBox <vetc> <varc> <xi,yi,xl,yl> <estilo> [Font (<"font">,<tam>)]

                                    [ID <expc>] [ENABLE|DISABLE]

                                    [MESSAGE (<vetmsg>)] [CONTEXTid(<num>)]  [tip <tip>]

                                    [select <func> (<par1> ,,, <parn>)]

                                    [dblclk <func> (<par1> ,,, <parn>)]

                                    [valid <func>(<p1>,<pn>)]

Onde:

Alguns dos estilos, disponíveis no Windows, podem ser especificados na opção <estilo> do comando ComboBox. Geralmente, os nomes destes estilos iniciam com o prefixo CBS_ (ComboBox Style). Porém, os próprios recursos da OpusWin implementam, de formas alternativas, as características dos estilos Windows. É o caso, por exemplo, da cláusula PICTURE.

Os seguintes estilos podem ser especificados no comando ComboBox. Observe que alguns estilos se referem a ListBox e outros a EditBox, pois, como você já sabe, o controle ComboBox é uma combinação desses outros dois controles.

Estilos da ComboBox

Descrição

CBS_AUTOHSCROLL

Automaticamente, faz rolagem horizontal do texto. Não especificando este estilo, somente será tratado o texto que cabe dentro dos limites do retângulo ComboBox.

CBS_DROPDOWN

Similar ao estilo CBS_SIMPLE, exceto que a Lista de Seleção não é exibida a não ser que o usuário a selecione. Permite digitar na Caixa de Edição qualquer dado diferente dos elementos da Lista de Seleção.

CBS_LOWERCASE

Converte para minúsculas quaisquer caracteres colocados em maiúsculo dentro do controle de edição de uma ComboBox.

CBS_SIMPLE

Não permite digitar dados na Caixa de Edição. Exibe sempre a Lista de Seleção, sendo que o elemento correntemente selecionado é mostrado dentro na Caixa de edição.

CBS_UPPERCASE

Converte para maiúsculos quaisquer caracteres minúsculos colocados no controle de edição de uma ComboBox.

DS_FIXEDSYS

Usa a fonte SYSTEM_FIXED_FONT em vez de SYSTEM_FONT

Exemplo

$nolib

prog

decl vetc[6]=space(16)

vetc[01]="um"

vetc[02]="dois"

vetc[03]="tres"

vetc[04]="quatro"

vetc[05]="cinco"

vetc[06]="Outros"

func funcval(l)

campo1, campo2 = ""

botao = -1

Dialog 08,08,120,64 units

  caption "Exemplo de controle ComboBox"

  style WS_OVERLAPPEDWINDOW

  Ltext "Título um:" NULL 4,08,48,8

  ComboBox vetc campo1 56,08,56,48 IDOK CBS_AUTOHSCROLL CBS_SIMPLE

  Ltext "Título dois:" null 4,28,48,8

  ComboBox vetc campo2 56,24,56,48 IDOK CBS_AUTOHSCROLL CBS_DROPDOWN

  DefPushButton "&Ok" botao 56,44,25,12 IDOK;

    valid funcval (campo1, campo2, botao)

  PushButton "&Quit" NULL 86,44,25,12 IDCANCEL

EndDialog

return

func funcval

parameters campo1, campo2, botao(n)

RefreshControl(2)

mens="botao="+str(botao)+", "+campo1+" - "+campo2

ret=MessageBox(mens,"MessageBox na ComboBox...","O","I")

return .t.

Observação

O exemplo acima produz a seguinte tela no Windows:

Controle GroupBox

O comando GroupBox é utilizado para agrupar logicamente outros controles dentro de uma área que fica cercada por uma borda e cujo título aparece na borda superior, alinhado à esquerda.

A sintaxe geral deste comando é:

GROUPBOX <nome> <varn> <xi,yi,xl,yl> 

                        [ID <expc>] [ENABLE|DISABLE]

                        [IDOK | IDCANCEL] [CONTEXTid(<num>)]

Onde:

Exemplo

Veja o exemplo que acompanha a explicação do comando RadioButton.

Controle RadioButton

O comando RadioButton serve para exibir um grupo de itens, ou opções, precedidos de pequenos círculos (parecidos aos botões dos antigos rádios, daí o nome de RadioButton), utilizados para marcar, ou seja, selecionar, uma e apenas uma das opções, que são mutuamente exclusivas. Os botões de rádio são agrupados dentro de controles GroupBox, sendo neste comando onde é especificada a variável numérica que informa, ao programa, a opção escolhida, ou seja, o botão que foi marcado.

A sintaxe geral deste comando é:

RadioButton <nome> NULL <xi,yi,xl,yl>

                                     [IDOK | IDCANCEL]

                                     [ID <expc>] [ENABLE|DISABLE]

                                     [CONTEXTid(<num>)]  [tip <tip>]

                                     [valid <func>(<p1>,<pn>)] [CONTEXTid(<num>)]

                                     [font (<font>,<tam>)]

Onde:

Exemplo

A seguir, veja um exemplo de uma lista de itens RadioButton, dentro de uma GroupBox. A variável numérica gbx, especificada no controle GroupBox, receberá o número seqüencial que identifica a opção marcada pelo usuário, ou seja, o botão por ele acionado.

$nolib

prog

func funcval(l)

decl vetc[06]=space(16)

vetc[01]="Manga"

vetc[02]="Abacaxi"

vetc[03]="Laranja"

vetc[04]="Limao"

vetc[05]="Banana"

vetc[06]="Outros"

bt=1

gbx=6

Dialog 02,02,40,15

  caption "Exemplo de GroupBox"

  style WS_POPUP  WS_CAPTION WS_SYSMENU

  GroupBox "Selecione um dos itens:" gbx 02,01,32,12

  RadioButton vetc[01] NULL 04,03,16,01

  RadioButton vetc[02] NULL 04,04,16,01

  RadioButton vetc[03] NULL 04,05,16,01

  RadioButton vetc[04] NULL 04,06,16,01

  RadioButton vetc[05] NULL 04,07,16,01

  RadioButton vetc[06] NULL 04,08,16,01

  DefPushButton "&Ok" bt 04,10,08,02 IDOK

  PushButton "Cance&l" NULL 14,10,08,02 IDOK

  Verify funcval (bt, gbx)

EndDialog

if bt=2      && cancel ?

  quit

endif

end

func funcval

parameters bt(n),gbx(n)

if bt=2   && botao cancel pressionado ?

  return .t.

endif

mens="opt="+str(gbx,2)+", botao="+str(bt,2)

ret=MessageBox(mens,"comando VERIFY chamando funcval","O","I")

return .f.

Observação

No exemplo acima, assumimos que o usuário marcou o botão número 03, ou seja, o terceiro item da lista, na ordem de especificação no programa, que é o item "Laranja". O exemplo acima produzirá, quando executado, a seguinte tela no Windows:

Controles Ltext, Rtext e Ctext

Os comandos Ltext, Rtext e Ctext são controles que servem para exibir blocos de texto, alinhados, respectivamente, à esquerda, à direita ou ao centro.

A sintaxe geral desses comandos é:

LTEXT <texto> NULL <xi,yi,xl,yl>

     [ID <expc>] [ENABLE|DISABLE]

     [CONTEXTid(<num>)] [Font (<"font">,<tam>)]

RTEXT <texto> NULL <xi,yi,xl,yl>

    [ID <expc>] [ENABLE|DISABLE]

    [CONTEXTid(<num>)] [Font (<"font">,<tam>)]

CTEXT <texto> NULL <xi,yi,xl,yl>

    [ID <expc>] [ENABLE|DISABLE]

    [CONTEXTid(<num>)] [Font (<"font">,<tam>)]

Onde:

Exemplo

A seguir, veja um exemplo utilizando o controle Ctext.

$nolib

prog

bt=1

linha1="Com diez cañones por banda"

linha2="viento en popa a toda vela"

linha3="no corta el mar, sino vuela"

linha4="un velero bergantín."

linha5="Bajel, pirata que llaman,"

linha6='por su brabura, "El Temido"'

linha7="en todo mar conocido"

linha8="del uno al outro confín."

Dialog 2,2,32,14

  caption "Exemplo de Ctext"

  style WS_POPUP WS_CAPTION WS_SYSMENU DS_CONTEXTHELP

  ctext linha1 NULL 02,01,30,01

  ctext linha2 NULL 02,02,30,01

  ctext linha3 NULL 02,03,30,01

  ctext linha4 NULL 02,04,30,01

  ctext linha5 NULL 02,05,30,01

  ctext linha6 NULL 02,06,30,01

  ctext linha7 NULL 02,07,30,01

  ctext linha8 NULL 02,08,30,01

  DefPushButton "&Quit" bt 11,11,08,02 IDCANCEL

EndDialog

quit

Observação

Execute o programa acima para visualizar os resultados.

Controle VarText

O comando VarText exibe na tela o conteúdo da uma variável cadeia, sendo dinâmico o seu gerenciamento. Isto significa que a variável em questão poderá ter o seu conteúdo atualizado ("refrescado") enquanto estiver ativa a sua Caixa de Diálogo. Esta característica dinâmica constitui a diferença do VarText em relação aos comandos Ctext, Ltext e Rtext.

A sintaxe geral deste comando é:

VarText NULL <varc> <xi,yi,xl,yl>

    [ID <expc>] [ENABLE|DISABLE]

    [CONTEXTid(<num>)] [Font (<"font">,<tam>)]

Onde:

Exemplo

A seguir, veja um exemplo utilizando o controle VarText.

$nolib

prog

func fvar(l)

bt = 1

ivet = 1

decl vet[08]=space(32)

vet[1]="Con diez cañones por banda"

vet[2]="viento en popa a toda vela"

vet[3]="no corta el mar, sino vuela"

vet[4]="un velero bergantín."

vet[5]="Bajel, pirata que llaman,"

vet[6]='por su brabura, "El Temido"'

vet[7]="en todo el mar conocido"

vet[8]="del uno al outro confín."

varc=vet[01]

Dialog 02,02,38,07

  caption "Exemplo de VarText"

  style WS_POPUP WS_CAPTION WS_SYSMENU

  Vartext NULL varc 02,02,32,01

  DefPushButton "&Ok" bt 02,04,08,02;

    valid fvar (varc, vet, ivet)

  PushButton "&Quit" NULL 12,04,08,02 IDCANCEL

EndDialog

if bt = 2   && Quit

  quit

endif

return

func fvar(l)

parameters varc, vet[], ivet(n)

++ivet

if ivet>8

  varc="Acabó la poesía. Ahora: Quit!"

  return .t.

endif

varc = vet[ivet]

return .t.

Observação

Execute o programa acima e pressione o botão OK para visualizar os resultados. Quando solicitado, pressione o botão Quit.

Controle Icon

O comando Icon exibe um ícone na posição indicada pelas coordenadas <xi,yi>, e passa a ser identificado pelo número <num>. A largura e altura <xl,yl> devem ser especificadas com o valor zero, aceitando os tamanhos padrão do Windows. O controle <icon> deve ser único para cada DialogBox e deve ser especificado por último, após todos os outros controles da Caixa de Diálogo. Quando existam várias DialogBox e vários comandos Icon, cada um deles deve possuir um identificador (<num>) diferente.

A sintaxe geral deste comando é:

Icon <arq-ico> <num> <xi,yi,0,0>

         [ID <expc>] [ENABLE|DISABLE]

Onde:

Exemplo

A seguir, veja um exemplo de uma Caixa "About", onde apresentamos um ícone.

$nolib

prog

xtext="OpenOPUS - OPUS for Windows"

botao=1

Dialog 0,0,35,08

  Font "Arial Black" 08

  style WS_POPUP DS_MODALFRAME

  ctext xtext NULL 1,2,32,1

  ctext "Copyright (c) Tecnocoop Sistemas" NULL 1,3,32,1

  ctext "1997,  Rio de Janeiro  -  BRAZIL" NULL 1,4,32,1

  defpushbutton "&Ok" botao 14,6,6,-12 IDOK

  icon "world.ico" 1 14,0,0,0

EndDialog

quit

Observação

O exemplo acima produzirá a seguinte tela no Windows:

Controle Image

O comando Image exibe uma imagem dentro de uma Caixa de Diálogo. A imagem será posicionada nas coordenadas indicadas com os tamanhos informados, recebendo o identificador numérico <num>.

A sintaxe geral deste comando é:

Image NULL <varc> <num> <xi,yi,xl,yl>

            [ID <expc>] [ENABLE|DISABLE]

Onde:

Exemplo

A seguir, veja um exemplo utilizando o comando Image.

$nolib

prog

func mostra_bmp(l)

set sigquit off

bt=1

var_com   = space(25)

varnom    = space(30)

varc      = space(100)

Dialog 00,00,40,23

  caption "Exemplo do comando Imagem"

  style WS_POPUP  WS_CAPTION  WS_SYSMENU

  image NULL varc  02,01,36,16

  DefPushButton    "Imagem&1"  bt 02,20,10,02  valid mostra_bmp(varc,bt)

  PushButton       "Imagem&2"  bt 14,20,10,02  valid mostra_bmp(varc,bt)

  PushButton       "&Sair"     bt 26,20,08,02  IDCANCEL

EndDialog

return

func mostra_bmp

parameters varc(c),bt(n)

if bt = 1

  varc="\windows\clouds.bmp"

elseif bt = 2

  varc="\windows\forest.bmp"

else

  varc=space(100)

endif

return .t.

Controle Cancel

O comando Cancel especifica uma função que será invocada quando for acionada a tecla ESC ou quando for fechada a janela do diálogo teclando o ícone X qua aparece no canto superior direito.

O evento Cancel, acionado por este controle, não invoca as funções valid associadas aos controles dentro de uma Caixa de diálogo.

Sintaxe

Cancel <func> (<par1>, ... <parn>)

Controles [Def]PushButton

Os comandos [Def]PushButton servem para especificar botões que, quando pressionados, acionam procedimentos. Podem ser especificados vários botões, dentro da mesma Caixa de Diálogo, sendo que um deles, e apenas um, deve ser o botão padrão, definido através de DefPushButton. Os outros botões são definidos através do comando PushButton. O botão default (aquele definido através de DefPushButton) é exibido na tela com o status de "pressionado", podendo ser acionado, também, através da tecla ENTER, mesmo que esse botão não esteja "focalizado".

A sintaxe geral deste comando é:

[Def]PushButton <nome> |  BITMAP("<bitmap>")

                               <varn> | NULL <xi,yi,xl,yl>

                                 [IDOK | IDCANCEL]

                                 [ID <expc>] [ENABLE|DISABLE] 

                                 [CONTEXTid(<num>)] [Font (<"font">,<tam>)] [tip <tip>]

                                 [valid <func>(<p1>,<pn>)] 

Onde:

Exemplo

A seguir, veja um exemplo utilizando diversos [Def]PushButton.

$nolib

prog

func mostra_bmp(l)

bt=1

var_com   = space(25)

varnom    = space(30)

varc      = space(100)

Dialog 00,00,40,23

  caption "Exemplo do comando Imagem"

  style WS_POPUP  WS_CAPTION WS_SYSMENU

  image NULL varc  02,01,36,16

  DefPushButton    "Imagem&1"  bt 02,20,10,02  valid mostra_bmp(varc,bt)

  PushButton       "Imagem&2"  bt 14,20,10,02  valid mostra_bmp(varc,bt)

  PushButton   BITMAP ("clouds.bmp") NULL 02,20,10,02  valid mostra_bmp(varc,bt)

  PushButton        BITMAP ("forest.bmp") NULL 14,20,10,02  valid mostra_bmp(varc,bt)

  PushButton       "&Sair"     bt 26,20,08,02  IDCANCEL

EndDialog

return

func mostra_bmp

parameters varc(c),bt(n)

if bt = 1

  varc="\windows\clouds.bmp"

elseif bt = 2

  varc="\windows\forest.bmp"

else

  varc=space(100)

endif

return .t.

Controle ProgressBar

O controle ProgressBar serve para criar uma Barra de Progressão dentro de uma Janela de diálogo. A OpusWin permite também construir Barras de Progressão fora de DialogBox.

Numa definição de controle ProgressBar devemos informar:

Exemplo

$nolib

prog

b=1

Public pro(n), lim(n), varc

lim=100

pro=0

varc=""

func Incremen(l)

Dialog 36,39,104,56 units

  Style DS_MODALFRAME WS_POPUP WS_CAPTION WS_SYSMENU

  Caption "ProgressBar Demo"

  ProgressBar lim pro 12,12,188,16

  Vartext NULL varc 16,16,108,16

  DefPushButton "Quit" b 56,32,40,16 IDOK

  PushButton "Start" NULL 12,32,40,16 valid Incremen()

EndDialog

End

Func Incremen

Public pro(n), lim(n), varc

for pro = 0 to lim step 10

  RefreshControl (1)

  varc=str(pro)+"% Complete."

  RefreshControl (2)

  sleep 1

next

return .t.

O programa acima produz a seguinte tela:

Controle MonthCalendar

O controle MonthCalendar permite mostrar um calendário mensal, iniciando pela data informada, dentro de uma janela de diálogo.

Sintaxe

MonthCalendar <expc> <var> <xi>,<yi>,<xl>,<yl>

            [IDOK | IDCANCEL]

            [ID <expc>] [ENABLE|DISABLE]

            [valid <func> (<par1>, ... ,<parn>)] 

            [font (<font>,<tam>)]

Onde:

Observações

Exemplo

$nolib

Prog

Func p1(l)

Bt1=1

Dat="01/09/98"

Dialog 5,5,120,152 units

  Style WS_DLGFRAME WS_SYSMENU

  MonthCalendar "OpusWin MonthCalendar" dat 10,10,100,110

  DefPushButton "Ok" bt1 10,120,16,14 valid p1(dat)

EndDialog

Quit

Func p1

Parameters a

If ctod(a) > ctod("30/09/98")

  A=MessageBox("Invalid Date")

  Return (.f.)

Endif

Return (.t.)

O exemplo acima produz a seguinte tela:

Controle GRID

O controle GRID serve para construir "grids" dentro das Caixas de Diálogo para exibir e editar:

Elementos de vetores

Em uma Caixa de Diálogo pode ser especificada uma GRID para edição de elementos de vetores.

Sintaxe

GRID NULL <num> <xi>,<yi>,<xl>,<yl> [font(<font>,<tam>)] [DTS_ROWNUMBERS | DTS_EDIT]

COLUMN <cab1> <vet1> 0,0,<xl>,<yl> [picture <pic>] [valid <fun>]

COLUMN <cabn> <vetn> 0,0,<xl>,<yl> [picture <pic>] [valid <fun>]

Onde:

<num>        número de colunas associadas ao GRID

<cab.>        cabeçalho da coluna

<vet.>        vetor associado à coluna

<pic>        picture a editar valor

<fun>        função a validar valor

Observações

Exemplos

Grid NULL 2 1,1,40,10

Column "Vetor 1" vet1 0,0,20,10

Column "Vetor 2" vet2 0,0,20,10

Itens de arquivos OpenBASE

Em uma Caixa de Diálogo pode ser especificada uma GRID para edição de arquivos de Bancos OpenBASE.

Sintaxe

GRID <arq> <num> <xi>,<yi>,<xl>,<yl> [font(<font>,<tam>)]

[DTS_ROWNUMBERS | DTS_EDIT | DTES_INSKEY | DTES_DELKEY]

COLUMN <cab1> <item1> 0,0,<xl>,<yl> [picture <pic>] [valid <fun>]

COLUMN <cabn> <itemn> 0,0,<xl>,<yl> [picture <pic>] [valid <fun>]

Onde:

<arq>        nome do arquivo OpenBASE a editar

<num>        número de colunas associadas ao GRID

<cab.>        cabeçalho da coluna

<item.>    item associado à coluna

<pic>        picture a editar valor

<fun>        função a validar valor

Observações

Exemplos

Grid "PESSOA" 2 1,1,40,10

Column "Nome" NOME_P 0,0,20,10

Column "Idade" IDADE 0,0,20,10

Campos de arquivo externo

Em uma Caixa de Diálogo pode ser especificada uma GRID para edição de arquivos externos.

Sintaxe

GRID EXTERN <num> <xi>,<yi>,<xl>,<yl> [font(<font>,<tam>)]

[DTS_ROWNUMBERS | DTS_EDIT | DTES_INSKEY | DTES_DELKEY]

COLUMN <cab1> <campo1> 0,0,<xl>,<yl> [picture <pic>] [valid <fun>]

COLUMN <cabn> <campon> 0,0,<xl>,<yl> [picture <pic>] [valid <fun>]

Onde:

<num>            número de colunas associadas ao GRID

<cab.>            cabeçalho da coluna

<campo.>        vetor associado à coluna

<pic>            picture a editar valor

<fun>            função a validar valor

Observações

Exemplos

Use *

Arqtes R len(12)

Nome U10

Idade N2

enduse

Grid EXTERN 2 1,1,40,10

Column "Nome" Nome 0,0,20,10

Column "Idade" Idade 0,0,20,10

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