Programando quadros de diálogo. A linguagem DCL. Códigos fonte de exemplos diversos, começando com quadros muito simples até os mais complicados...

Primeira parte...

Em DCL, todas as palavras reservadas devem estar em minúsculas.
Os valores de chaves ['key'] e rótulos ['label'], além do próprio nome do diálogo, podem estar em maiúsculas ou minúsculas. Não poderá haver, em uma definição de quadro de diálogo, 'keys' com o mesmo nome. Se isto ocorrer, o usuário receberá a mensagem 'Redefining key...' em sua rotina AutoLISP, além do que você terá uma indefinição dentro de sua rotina.
As palavras "LAYER", "Layer", "LAyer" e "LAYer" são todas distintas e poderiam ser usadas em uma mesma definição de quadro de diálogo.

Código fonte do quadro de diálogo acima...

dup1_01 : dialog 	
		{ 
          	label = "E.Fernal Software";
          	initial_focus = "ins-val";
          	: edit_box { label = "Insira valor"; key = "ins-val"; edit_width = 12; }
          	ok_cancel_help;
		}

Código fonte do quadro de diálogo acima...

dup1_02 :  dialog 	
		{ label = "E.Fernal Software";
		initial_focus = "ins-val";
		: edit_box { label = "Insira valor"; key = "ins-val"; edit_width = 12; }
		: radio_row { label = "Unidade métrica";
		: radio_button { label = "Milímetros"; key = "mm"; value = 1; }
		: radio_button { label = "Centímetros"; key = "cm"; }
		: radio_button { label = "Metros"; key = "me"; }
		}
		: spacer { width = 0.75; }
		ok_cancel_help;
		}

Código fonte do quadro de diálogo acima...

dup1_03 :  dialog 	
		{ label = "E.Fernal Software";
		initial_focus = "ins-val";
		: edit_box { label = "Insira valor"; key = "ins-val"; edit_width = 12; }
		: radio_row { label = "Unidade métrica";
		: radio_button { label = "Milímetros"; key = "mm"; value = 1; }
		: radio_button { label = "Centímetros"; key = "cm"; }
		: radio_button { label = "Metros"; key = "me"; }
		}
		: spacer { width = 0.75; }
		: row 
		{
		: button { label = "Layer >"; key = "la"; fixed_width = true; }
		: text { label = ""; key = "LA"; width = 35; }
		}
		: spacer { width = 0.75; }
		ok_cancel_help;
		}


;| 	
	INÍCIO DE COMENTÁRIOS

	'dup1_03' é o nome do quadro de diálogo. Este nome deverá ser digitado, em sua
	rotina AutoLISP, exatamente como está neste arquivo dcl, no trecho 
		
		(NEW_DIALOG "dup1_03" dcl_id)
		
	Caso contrário, o carregamento deste quadro de diálogo fracassará.
	'initial_focus' ativa o campo 'edit_box' cuja 'key' é "ins-val". Ao ser lançado,
	o usuário poderá imediatamente digitar o valor deste campo.
	'radio_row' abre uma caixa para uma linha de radio_buttons. Neste caso, inserimos
	3 destes componentes. Eles são excludentes : sòmente um poderá estar assinalado.
	O retorno é "1" para assinalado e "0" para vasio. Neste caso poderemos também
	atribuir à uma variável, no caso 'unidade_metrica', a chave do componente assinalado 
	EXEMPLO :
		
		(FOREACH x '("mm" "cm" "me")
			(ACTION_TILE x "(SETQ unidade_metrica $key)")
		)
		
	Colocamos um espaçamento de 0.75 simplesmente por motivos estéticos...
	'row' nos permite colocar uma série de componentes em uma linha: neste caso,
	temos um 'button' e um 'text'.
	Finalmente, usamos um componente definido no arquivo "BASE.DCL" do AutoCAD©,
	neste caso 'ok_cancel_help', que insere um botão "OK", cuja chave é "accept", um botão
	"Cancel", cuja chave é "cancel" e, finalmente, um botão "Help", cuja chave é "help"

	FIM DE COMENTÁRIOS
|;

Segunda parte...


Palavras chave da linguagem DCL
Em AZUL, palavras reservadas que indicam componentes
Em VERMELHO, palavras reservadas que indicam atributos dos componentes 


	@include
		diretiva de inclusão, permite que você defina clusters em um arquivo à parte,
		e o inclua em todas os demais arquivos .DCL
		SINTAXE		@include "c:\\curso\\dcl\\base.dcl"
	
	alignment
		define o alinhamento de componentes de quadros de diálogo.
		EXEMPLO		: text { label = "Componente 'text' com alinhamento normal"; }
				: text { label = "Componente 'text' com alinhamento 'centered'"; 
					 alignment = centered; }
				: text { label = "Componente 'text' com alinhamento 'right'"; 
					 alignment = right; }

				O default é alinhamento pela esquerda.
	
	
allow_accept propriedade dos tiles tipo 'edit_box', 'image_button' e 'list_box' ativa o botão cuja propriedade 'is_default' seja 'true', quando um destes componentes, com 'allow_accept = true', for selecionado EXEMPLO : edit_box { label = "Digite texto"; key = "texto"; edit_width = 40; edit_limit = 55; allow_accept = true; } aspect_ratio define a proporção entre largura e altura de um componente 'image' ou 'image_button' SINTAXE : image { key = "i1"; width = 40; aspect_ratio = 0.75; } big_increment aplica-se ao componente do tipo 'slider' e define o menor valor incremental ao se deslizar o botão interno deste componente EXEMPLO : slider { key = "Temperatura"; min_value = 0; max_value = 100; small_increment = 1; big_increment = 10; } boxed_column abre uma caixa de enquadramento para uma coluna de componentes diversos, permitindo um rótulo. SINTAXE : boxed_column { label = "Lineweights"; [...demais componentes aqui...] }
boxed_radio_column abre uma caixa de enquadramento para uma coluna de 'radio_button', permitindo um rótulo. SINTAXE : boxed_radio_column { label = "Caixa de enquadramento"; [...demais componentes aqui...] }
boxed_radio_row abre uma caixa de enquadramento para uma coluna de 'radio_
button' SINTAXE : boxed_radio_row { label = "Iso&metric Snap/Grid"; : radio_button { label = "&left"; key = "left"; } : radio_button { label = "&Top"; key = "top"; } : radio_button { label = "&right"; key = "right"; } }
boxed_row abre uma caixa de enquadramento para uma linha de componentes diversos SINTAXE : boxed_radio_row { label = "boxed_row"; [...demais-componentes aqui...] }
button insere um botão SINTAXE : button {
label = "Cores"; key = "btn1"; width = 12; }
cancel_button insere um botão "Cancel" SINTAXE cancel_button;
centered propriedade de um alinhamento EXEMPLO : text { label = "Escolha bloco"; alignment = centered; } color define a cor de um quadro de imagem 'image' ou 'image_button' SINTAXE : image { key = "i1"; color = 0; width = 40; aspect_ratio = 0.5; } color_palette_1_7 vide no BASE.DCL do AutoCAD color_palette_1_9 vide no BASE.DCL do AutoCAD color_palette_0_9 vide no BASE.DCL do AutoCAD color_palette_250_255 vide no BASE.DCL do AutoCAD column abre uma coluna para componentes diversos SINTAXE : column { [...demais componentes aqui...] } concatenation concatena strings em um componente 'text' EXEMPLO : concatenation { default_button vide no BASE.DCL do AutoCAD default_dcl_settings dialog define um quadro de diálogo SINTAXE MEU_DCL_01 : dialog { label = "Dcl número 1"; : text { label = "Teste de dcl"; alignment = centered; } ok_only; } edit12_box vide no BASE.DCL do AutoCAD edit32_box vide no BASE.DCL do AutoCAD edit_box abre um campo de edição de texto SINTAXE : edit_box { label = "edit_box"; key = "raio"; edit_width = 12; edit_limit = 16; }
edit_width define a largura de um componente 'edit_box' - vide acima errtile abre um campo 'text' padronizado, cujo 'key' é "error". SINTAXE errtile; heigth define a altura de componentes. EXEMPLO : list_box { label = "Opções"; height = 12; width = 40; key = "lista"; } false fcf_ebox vide no BASE.DCL do AutoCAD fcf_ebox1 vide no BASE.DCL do AutoCAD fcf_ibut vide no BASE.DCL do AutoCAD fcf_ibut1 vide no BASE.DCL do AutoCAD files_bottomdf vide no BASE.DCL do AutoCAD files_topdfM vide no BASE.DCL do AutoCAD fixed_width assegura que o componente tenha somente a largura mínima necessária EXEMPLO : button { label = "Largura"; key = "btn1"; fixed_width = true; } help_button insere um botão "Help" padronizado, cujo 'key' é "help" SINTAXE help_button;
icon_image image abre um quadro de imagem SINTAXE : image { key = "img35"; width = 40; aspect_ratio = 0.77; color = -15; }
image_block image_button abre um quadro de imagem clicável SINTAXE : image_button { key = "img36"; width = 40; aspect_ratio = 0.77; color = -15; } info_button insere um botão "Info" padronizado, cujo 'key' é "info" SINTAXE info_button;
initial_focus lança o foco sobre o tile especificado SINTAXE initial_focus = "componente"; is_cancel define um componente qualquer como componente de saida EXEMPLO : button { label = "Encerra"; key = "sair"; is_cancel = true; } is_default is_tab_stop is_error_tile vide no BASE.DCL do AutoCAD key define a chave para cada um dos componentes EXEMPLO : edit_box { label = "Altura em mm"; key = "altura"; edit_width = 12; edit_limit = 16; } label define o rótulo de um componente - vide acima list insere um 'list_box' ou 'popup_list' com uma lista de strings EXEMPLO : popup_list { label = "Opções"; key = "pop"; width = 30; list = "Bloco 1\nBloco 2\nBloco 3\nBloco 4\nBloco 5"; } list_box abre um componente 'list' SINTAXE : list_box { label = "AutoLISP"; key = "lista"; width = 28; height = 16; }
multiple_select permite selecionar mais de uma linha em componentes 'list_box' e/ou 'popup_list' EXEMPLO : list_box { label = "AutoLISP"; key = "lista"; width = 28; height = 16; multiple_select = true; } o default é 'false' e não precisa ser inserido ok_button insere um botão 'OK' padronizado, cujo 'key' é "accept" SINTAXE ok_button;
ok_cancel insere um par de botões padronizados, sendo o primeiro 'OK' e o segundo 'Cancel', e cujos 'key' são "accept" e "cancel" SINTAXE ok_cancel;
ok_cancel_help insere três botões padronizados, sendo o primeiro 'OK', o segundo 'Cancel' e o terceiro
'Help', e cujos 'key' são "accept", "cancel" e "help" SINTAXE ok_cancel_help;
ok_cancel_err insere dois botões, o primeiro 'OK', cujo 'key' é "accept", o segundo 'Cancel', com 'key' igual a "cancel" e uma linha 'errtile', cujo 'key' é "error" ok_cancel_help_errtile idem acima, com mais um botão "Help", cujo 'key' é "help" ok_cancel_help_info insere os botoes 'OK', 'Cancel', 'Help' e 'Info', cujos 'keys' são, respectivamente, "accept", "cancel", "help" e "info"
ok_only insere um botão 'OK' cujo 'key' é "accept", pré-definido no BASE.DCL do AutoCAD©
paragraph popup_list insere um componente tipo lista SINTAXE : popup_list { label = "popup_list"; key = "pop1"; }
radio_column abre uma coluna de 'radio_button' SINTAXE : radio_column { : radio_button { label = "Opção 1"; key = "opt1"; } : radio_button { label = "Opção 2"; key = "opt2"; } : radio_button { label = "Opção 3"; key = "opt3"; } : radio_button { label = "Opção 4"; key = "opt4"; } }
radio_row abre uma linha de 'radio_button' SINTAXE : radio_row { : radio_button { label = "radio_button 1"; key = "opt1"; } : radio_button { label = "radio_button 2"; key = "opt2"; } }
retirement_button right row abre uma linha de componentes SINTAXE : row { [...demais componentes aqui...] } slider insere um componente deslizante SINTAXE : slider { key = "sli"; min_value = 1; max_value = 100; big_increment = 10; small_increment = 1; }
small_increment aplica-se ao componente do tipo 'slider' e define o menor valor incremental ao se deslizar o botão interno deste componente EXEMPLO : slider { key = "Temperatura"; min_value = 0; max_value = 100; small_increment = 1; big_increment = 10; } spacer define um espaçamento entre componentes SINTAXE : spacer { width = 3; } spacer_0 um 'spacer' com espaçamento 0 SINTAXE spacer_0; spacer_1 um 'spacer' com espaçamento 1 SINTAXE spacer_1; std_rq_color vide no BASE.DCL do AutoCAD swatch tabs aplica-se somente a componentes 'list_box' e 'popup_list', e define, nestes componentes, os espaços de tabulação de um texto. EXEMPLO : list_box { label = "Tabela 1"; key = "tabela1"; width = 80; height = 12; tabs = "8 16 24 32 40"; } text_part text_25 vide no BASE.DCL do AutoCAD toggle define um componente assinável SINTAXE : toggle { label = "Deseja cotar?"; key = "cotar"; value = 1; }
true define uma propriedade como verdadeira EXEMPLO :
list_box { label = "Selecione"; key = "lista"; width = 40; height = 12; multiple_select = true; } value inicializa o valor de retorno do componente EXEMPLO : toggle { label = "Deseja cotar?"; key = "cotar"; value = 1; } acima, o 'toggle' estará assinalado na abertura do quadro de diálogo e abaixo, estará desmarcado. : toggle { label = "Deseja cotar?"; key = "cotar"; value = 0; } o default é 0 width define a largura de um componente EXEMPLO : button { label = "Botão"; key = "b1"; width = 30; }


Exemplos diversos
////////// código fonte do quadro de diálogo da esquerda
alo1 : dialog { label = "Como criar quadros de diálogo"; : text { label = "Um quadro bem simples..."; alignment = centered; } : button { key = "accept"; is_default = true; label = "OK"; fixed_width = true; alignment = centered; } } ////////// código fonte do quadro de diálogo da direita alo2 : dialog { label = "Como criar quadros de diálogo"; : text { label = "Um quadro bem simples..."; alignment = centered; } ok_button; }

Exemplos de rotinas do curso
Exemplos de listas
O BASE.DCL do AutoCAD©
Home