
Os comandos da linguagem OpusWin, que permitem iniciar e terminar a definição de uma Caixa de Diálogo são: Dialog e EndDialog.
O comando DIALOG serve para:
Sintaxe
DIALOG <xy, yi, xl, yl> [chars | units]
Onde:
As coordenadas e os tamanhos são parâmetros numéricos, com valor inicial a partir de zero. Podem ser especificados em "chars" (default da OpusWin) ou em "units" ("Dialog units").
Na falta de especificação, a linguagem OpusWin assume que, tanto as coordenadas que indicam a posição inicial, como os tamanhos de largura e altura das Caixas de Diálogo e dos controles, estão expressos em caracteres (opção chars).
Assim sendo, a sintaxe do comando, quando não informada a unidade de medida, assume-se como:
Dialog <coluna-inicial, linha-inicial, qtde-colunas, qtde-linhas> chars
O padrão chars da OpusWin permite maior compatibilidade com a programação OPUS para ambientes não gráficos e maior facilidade migração a partir de aplicativos com interface caractere.
A unidade de medida default é estabelecida através da opção (explícita ou implícita) [CHARS | UNITS] no comando Dialog, aplicando-se à Caixa de Diálogo como um todo, assim como a cada um dos controles nela incluídos. Porém, é possível especificar coordenadas e/ou tamanhos em unidades de medida diferentes do default estabelecido no comando Dialog, bastando especificar os valores numéricos (referentes a coordenadas e tamanhos), precedidos do sinal negativo. Esta facilidade permite uma maior precisão e flexibilidade na especificação das unidades de medida e, em conseqüência, uma apresentação visual mais correta.
Exemplo
Dialog 5,10,-80,-10
Observação
Neste exemplo, utilizamos o padrão OpusWin (chars). Assim sendo, a Caixa de Diálogo será posicionada na coluna 5 com linha 10 (a partir de zero), tendo 80 "Dialog units" (mais ou menos 20 colunas) de largura e 10 "Dialog units" de altura. O tipo e o tamanho da fonte especificados na opção font determinam, também, as dimensões reais da Caixa de Diálogo assim como o número de colunas e linhas.
Exemplo
O exemplo a seguir mostra como codificar uma Caixa de Diálogo e seus controles, utilizando a unidade de medida "chars", como default, porém utilizando, também, a unidade de medida "units" para especificar as coordenadas e tamanhos. Após o exemplo, explicaremos melhor as unidades de medida relacionadas às Caixas de Diálogo.
$nolib
prog
campo1, campo2 = ""
botao = -1
Dialog 5,10,36,08
caption "DialogBox com CHARS/UNITS"
style WS_OVERLAPPEDWINDOW
ltext "Título 01:" NULL 01,02,10,01
EditText NULL campo1 12,02,-80,01
ltext "Título 02:" null 01,04,10,01
EditText NULL campo2 12,04,-80,01
DefPushButton "&Ok" botao 12,06,08,-12 IDOK
PushButton "&Quit" NULL 22,06,08,-12 IDOK
EndDialog
return
Veja como vai ser apresentado na tela o exemplo acima:

Observação
Quando especificada a opção "units", as coordenadas e tamanhos estão baseados em unidades de medida lógicas, não reais. As funções gráficas e de texto do Windows operam sobre unidades lógicas, que são traduzidas em unidades físicas (pixels) quando o objeto é efetivamente exibido na tela. Ocorre, então, um mapeamento, executado pelo Windows. O tipo de mapeamento (existem vários) utilizado altera a maneira como as unidas lógicas ("Dialog units") são traduzidas em unidades físicas ("pixels"), que dependem, por exemplo, das características do monitor utilizado pelo usuário. Desta forma, o programa OpusWin se torna, de alguma maneira, independente das características físicas dos dispositivos de exibição utilizados, podendo ser utilizado em qualquer ambiente e configuração Windows.
Para compreender um pouco melhor este assunto, podemos estabelecer os seguintes conceitos básicos:
Exemplo
Dialog 20,80,160,88 units
Observação
No exemplo acima, usamos a opção units. Assim, para essa Caixa de Diálogo em particular, o canto superior esquerdo está, mais ou menos, a 5 caracteres da esquerda da área do usuário na janela principal e a 10 caracteres, mais ou menos, do alto. A caixa de diálogo tem 40 colunas de largura e 11 linhas de altura.
O exemplo a seguir mostra como codificar uma Caixa de Diálogo e seus controles utilizando a opção units, especificando as coordenadas e tamanhos em unidades lógicas, ou seja, "unidades de diálogo".
Exemplo
$nolib
prog
decl vetc[6]=space(40)
campo1, campo2 = ""
botao = -1
Dialog 20,40,256,70 units
caption "Exemplo de Caixa de Diálogo com a opção UNITS"
style WS_POPUP WS_CAPTION WS_SYSMENU DS_CONTEXTHELP
ltext "Título um:" NULL 4,12,48,8
ComboBox vetc campo1 56,08,160,8
ltext "Título dois:" null 4,28,48,8
ComboBox vetc campo2 56,24,160,8
DefPushButton "&Ok" botao 56,48,24,16 IDOK
PushButton "&Quit" NULL 84,48,24,16 IDOK
PushButton "&Browse" NULL 220,08,32,12 IDOK
EndDialog
return
Observação
Veja como vai ser apresentado na tela o exemplo acima:

O comando EndDialog serve para terminar a definição de um Quadro de Diálogo.
Sintaxe
EndDialog
