
A seguir apresentamos os controles a serem incluídos dentro de Caixas de Diálogo, conforme as necessidades dos usuários.
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:

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:
|
|
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
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:
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:
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 :

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.
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:

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.
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:

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:

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.
|
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:

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.
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:

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.
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:

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.
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.
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:

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.
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>)
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.
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:

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:

O controle GRID serve para construir "grids" dentro das Caixas de Diálogo para exibir e editar:
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
…
…
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
…
…
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
…
…
