Dando continuidade ao post anterior, sobre slides e bibliotecas, vamos ver um visualizador de slides, bem útil quando se tem vários slides, seja em arquivos separados, ou numa SLB. Você pode usar o Slideviewer, também se preferir. Este programa, ;função para escolher um slide de um biblioteca;(choose_sld “F:/autocad/drenagem e esgoto/Drenagem/de_fonts.slb”);(choose_sld “c:/temp/”)(defun choose_sld (local / dcl dir tmp n offset slds num_col num_lin img_witdh img_height img_bkgr img_off key_prf key_scroll key_dlg index) (setq num_col 2 ;numero de colunas a mostrar no dcl num_lin 2 ;numero de linhas img_witdh 28 ;largura dos slides (em caracteres) img_height 10 ;altura dos slides (em nº de linhas) img_bkgr -16 ;background color quando ativo img_off -2 ;background color quando inativo key_prf “S” ;prefixo das KEY das imagens key_scroll “SCROLL” ;KEY do slide key_dlg “exemplo” ;KEY do dialogo;obtem a lista de slides, do diretorio, ou SLB: slds (if (vl-filename-extension local);SLB? (mapcar ‘(lambda (x) (strcat local “(“ x “)”)) (slb2list local)) (mapcar ‘(lambda (x) (strcat local x)) (vl-directory-files local “*.sld”)));valor maximo do slider maxval (* num_lin num_col (/ (length slds) (* num_lin num_col))) offset maxval dcl (choose:make_and_load_dcl)) ;mostra o dcl na tela: (new_dialog key_dlg dcl);desenhas as imagens nele: (choose:popula_slides offset);inicia o dialog (if (/= 0 (start_dialog)) (setq index (nth index slds)));descarrega da memoria (unload_dialog dcl) index) (defun choose:make_and_load_dcl (/ filename file j dcl);cria um arquivo temporario (setq filename (vl-filename-mktemp “x.dcl”) file (open filename “w”) j 0);escreve um dcl nele: (write-line (strcat key_dlg “: dialog { label = “escolha a figura”;n” “:row {n” ” :column {// 1 coluna de “ (itoa num_lin) ” linhas visiveisn”) file) ;escreva uma matriz (linhas/colunas) de imagens (repeat num_lin (write-line (strcat ” :row {//uma linha de “ (itoa num_col) ” imagens”) file) (repeat num_col (write-line (strcat “:image_button {n” “key = “” key_prf (itoa j) “”;n” ;ID da imagem “height = “ (itoa img_height) “;n” ;altura, em nº de linhas de texto “width = “ (itoa img_witdh) “;n” ;largura, en nº de caracteresn “action = “(choose:seleciona_img “ (itoa j) “)”;}”;acao ) file) (Setq j (1+ j))) (write-line “}” file)) ;adiciona o slider: (write-line (strcat “}n” “:slider {n”;barra deslizante a direita “layout = vertical;n” ;barra na vertical “key = “” key_scroll “”;n” ;ID da barrinha “max_value = “ (itoa maxval) “;n” “min_value = 0;n” ;sempre zero “small_increment = “ (itoa num_col) “;n” “big_increment= “ (itoa (* num_lin num_col))“;n” “action = “(choose:popula_slides (atoi $value))”;n” “value = “ (itoa maxval) “;n” “}}n” “:column {:text{key=”texto”;} ok_cancel;}}”) file);fecha o arquivo, carrega o dcl na memoria e apaga o arquivo (close file) (setq dcl (load_dialog filename)) (vl-file-delete filename);devolve o ID do dcl dcl) ;função que preenche as imagens com os slides(defun choose:popula_slides (val / i w h nome) (setq i 0 offset val) (repeat (* num_lin num_col);obtem as props do slide (setq nome (nth (+ i (– maxval offset)) slds) w (dimx_tile (strcat key_prf (itoa i))) h (dimy_tile (strcat key_prf (itoa i)))) ;limpe de (re)desenha o slide (start_image (strcat key_prf (itoa i))) (if nome (progn ;desenha (fill_image 0 0 w h img_bkgr) (slide_image 0 0 w h nome)) (fill_image 0 0 w h img_off));desabilita img (end_image);desabilita imagens nao preenchidas (mode_tile (strcat key_prf (itoa i)) (if nome 0 1)) (setq i (1+ i)))) ;função que seleciona o nome do slide(defun choose:seleciona_img (val) (setq index (+ val (– maxval offset))) (set_tile “texto” (nth index slds))) Link(s) da(s) subrotina(s) usada(s):slb2list pode ser usado em programas lisp, para