EDALLBTN

Sinopsis
EDALLBTN
Descripción

Abre las definiciones de todos los procedimientos, variables y listas de propiedades no tapados en el editor, exactamente como EDTODO.

EDALLBTN es un procedimiento de biblioteca que existe para que puedas cambiar lo que pasa cuando presiones el Botón EdTodo en el Centro de Comandos. Por redefinirlo, puedes hacer que el Botón EdTodo abre el área de trabajo en un editor externo, cambiarlo a abrir un archivo específico o reemplazarlo el editor con tu propria interfaz de usuario creado con CREAVENTANA.

Ejemplo

El ejemplo siguiente demuestra como cambiar el comportamiento del botón EdTodo para abrir un archivo específico en lugar del área de trabajo entero.

PARA EDARCHIVO
  ; EDARCHIVO es un procedimiento simple para editar (y re-editar)
  ; un archivo externo usando el editor de FMSLogo.

  ; A ver si ya se han seleccionado el archivo a editar.
  SI NO VAR? "editaarchivo.nombredearchivo [
    ; No se han seleccionado el archivo.
    ; Pídele al usuario a seleccionar uno.
    ;
    ; Nota que usamos el versión «GUARDA» del dialogo de seleccionar
    ; para que pueden especificar un archivo que no existe.
    HAZ "editaarchivo.nombredearchivo GUARDADIALOGO "*.lgo
    SI IGUALES? [] :editaarchivo.nombredearchivo [
      ; El usuario anuló la selección.
      BORRA LISTANOMBRES "editaarchivo.nombredearchivo
      ALTO
    ]

    ; Tapa el nombre del archivo para que no contamine el área de trabajo.
    TAPA LISTANOMBRES "editaarchivo.nombredearchivo
  ]

  ; Si un editor por este archivo ya está visible, entonces
  ; activalo y dale el foco.
  ACTIVAVENTANA :editaarchivo.nombredearchivo 9
  PONFOCO       :editaarchivo.nombredearchivo

  SI NOIGUALES? LEEFOCO :editaarchivo.nombredearchivo [
    ; No se encontraron ningún editor por este archivo.
    ; Abre el archivo con el editor de FMSLogo.

    ; Cuando se guardan el archivo, cárgalo al área de trabajo.
    ;
    ; Si usamos [ CARGA :editaarchivo.nombredearchivo ], entonces pueda
    ; que no se cargue si se han borrado o modificado
    ; :editaarchivo.nombredearchivo mientras que se editaban el archivo.
    ; Por eso creamos una lista de instrucciones que tiene el valor de
    ; :editaarchivo.nombredearchivo como una palabra en lugar de depender
    ; del nombre del variable.
    ;
    ; Desafortunadamente, los nombres de archivos puede contener
    ; caracteres especiales que deben de seguir una barra inversa
    ; para ser preservados.  TEJE agrega un barra inversa a
    ; cualquier carácter que lo necesita, como se describen en
    ; la documentación de TIENEBARRA?.  ENTRECOMILLAS crea la palabra.
    ;
    EDITAARCHIVO :editaarchivo.nombredearchivo (LISTA
      "CARGA
      ENTRECOMILLAS TEJE [
         SISINO MIEMBRO? ? "|	 \n()[]{}\|+-*/=<>":;\\~?| [
           PALABRA "\\ ?
         ][
           ?
         ]
      ] :editaarchivo.nombredearchivo)
  ]
FIN

PARA EDARCHIVONUEVO
  ; EDARCHIVONUEVO es como EDARCHIVO, excepto que siempre te pide
  ; el nombre del archivo.  De ahora en adelante, EDARCHIVO abrirá el
  ; archivo nuevamente seleccionado cada vez que se lo ejecutan
  ; sin preguntar nada.
  ;
  ; EDITAARCHIVODISTINCTO sería un nombre mejor porque no se crea
  ; el archivo, pero eso es más difícil a teclear.

  BORRA LISTANOMBRES "editaarchivo.nombredearchivo
  EDARCHIVO
FIN


PARA EDALLBTN
  ; Cuando usas EDARCHIVO para editar un archivo, EDTODO tiene un comportamiento
  ; confuso porque no guarda los cambios al archivo y incluye cosas del
  ; área de trabajo  en el editor que no viene del archivo.  Para evitar
  ; editar accidentalmente el área de trabajo, redefinimos el botón EdTodo
  ; a usar EDARCHIVO.
  EDARCHIVO
FIN

El ejemplo siguiente demuestra como hacer que el botón EdTodo abre una interfaz de usuario sencilla para seleccionar un procedimiento a editar.

PARA EDALLBTN
  ; Abre un seleccionador de procedimientos del botón EdTodo

  CREAVENTANA  "raíz "seleccionador [Selecciona un procedimiento] 200 200 230 255 []
  CREACOMBOBOX "seleccionador "seleccionador.lista 2 2 180 240

  CREABOTON "seleccionador "seleccionador.edita   [Editar]       184   2 40 18 [
    SI NO VACIO? LEETEXTOCOMBOBOX "seleccionador.lista [
      EDITA LEETEXTOCOMBOBOX "seleccionador.lista BORRAVENTANA "seleccionador
    ]
  ]

  CREABOTON "seleccionador "seleccionador.edtodo  [Editar Todo]  184  22 40 18 [
    EDITA LPROCS BORRAVENTANA "seleccionador
  ]

  CREABOTON "seleccionador "seleccionador.anular  [Anular]       184 220 40 18 [
    BORRAVENTANA "seleccionador
  ]

  ; Agrega los nombres de todos los procedimientos a la lista.
  PARACADA LPROCS [ AÑADELINEACOMBOBOX "seleccionador.lista ? ]
  PONTEXTOCOMBOBOX "seleccionador.lista [] ; borra la selección
FIN
TAPA "EDALLBTN

El ejemplo final demuestra como hacer que el botón EdTodo abre el área de trabajo en un editor externo. Este ejemplo usa Microsoft Wordpad, que es uno de los peores editores posibles para editar programas de Logo.

PARA GETTEMPPATH
  ; Invoca al función win32 GetTempPathW.
  ; En caso de éxito, devuelve la ruta del directorio como una palabra.
  ; En caso de error, devuelve [].

  LOCAL [val rutatemp tamaño búfer código]

  CARGADLL "kernel32.dll

  HAZ "val (LLAMADLL [L GetTempPathW B 261 L 261] "kernel32.dll)
  SISINO IGUALES? 0 ELEMENTO 1 :val [
    HAZ "rutatemp [] ; error
  ][
    ; Convierte el WCHAR* a una palabra de Logo.
    HAZ "tamaño ELEMENTO 1 :val
    HAZ "búfer  ELEMENTO 2 :val

    HAZ "rutatemp "||
    REPITE :tamaño [
      ; Determine el punto de código del carácter número CUENTAREPITE.
      HAZ "código (ADICION
        ASCII                   ELEMENTO (2*CUENTAREPITE-1) :búfer    ; el byte bajo viene primero
        DESPLAZAIZQUIERDA ASCII ELEMENTO (2*CUENTAREPITE)   :búfer 8) ; el byte alto viene segundo

      ; Añade el carácter número CUENTAREPITE a la fin de la ruta.
      HAZ "rutatemp PALABRA :rutatemp CAR :código
    ]
  ]

  (QUITADLL "kernel32.dll)
  DEVUELVE :rutatemp
FIN
TAPA "GETTEMPPATH

PARA EDALLBTN
  HAZLOCAL "editor "|C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe|
  HAZLOCAL "archivo PALABRA GETTEMPPATH "\\tmp.lgo

  TAPA [[] [editor archivo]] ; esconda los variables locales del GUARDA.
  GUARDA :archivo

  SIEMPRE [
    SI NO (SHELL (LISTA (PALABRA "" :editor "") (PALABRA "" :archivo "") ) "CIERTO) [
      ; El programa devolvió un código de error.
      BORRAARCHIVO :archivo
      ALTO
    ]

    ; Intenta cargar el nuevo archivo.
    ATRAPA "ERROR [ CARGA :archivo ]
    HAZLOCAL "error ERROR
    SI IGUALES? :error [] [
      ; Se han cargado el archivo con éxito.
      BORRAARCHIVO :archivo
      ALTO
    ]

    ESCRIBE [Había un error en el archivo:]
    ESCRIBE ELEMENTO 2 :error
    ESCRIBE (FRASE [En la línea:] ELEMENTO 4 :error)
  ]
FIN
TAPA "EDALLBTN


SourceForge.net Logo