Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Crear Una Ventana Y Insertar Texto Con La Libreria Libcaca
Autor Mensaje
Responder citando   Descargar mensaje 
Mensaje Crear Una Ventana Y Insertar Texto Con La Libreria Libcaca 
 
Hola,

este un simple y simpatico ejemplo para crear una ventana y escribir texto mediante las funciones externas del API de libcaca.
Teclas especiales:
- TAB o Enter, para ir a la linea siguiente;
- Backspace, elimina el carácter anterior;
- Esc, para salir de la aplicacion.
Public Struct textentry
  buffer[76] As Integer
  size As Integer
  cursor As Integer
  changed As Integer
End Struct

Private entries[5] As Struct Textentry

Private Const CACA_BLACK As Byte = 0
Private Const CACA_BLUE As Byte = 1
Private Const CACA_LIGHTGRAY As Byte = 7
Private Const CACA_WHITE As Byte = 15
Private Const BUFFER_SIZE As Integer = 75
Private Const TEXT_ENTRIES As Integer = 5
Private Const CACA_EVENT_KEY_PRESS As Integer = 1
Private Const CACA_KEY_BACKSPACE As Integer = 8
Private Const CACA_KEY_TAB As Integer = 9
Private Const CACA_KEY_RETURN As Integer = 13
Private Const CACA_KEY_ESCAPE As Integer = 27


Library "libcaca:0.99.18"

' caca_canvas_t * caca_create_canvas(int, int)
' Initialise a libcaca canvas.
Private Extern caca_create_canvas(ca As Integer, cb As Integer) As Pointer

' caca_display_t * caca_create_display (caca_canvas_t *)
' Attach a caca graphical context to a caca canvas.
Private Extern caca_create_display(caca_canvas_t As Pointer) As Pointer

' int caca_set_cursor (caca_display_t *, int)
' Show or hide the cursor.
Private Extern caca_set_cursor(displ As Pointer, cursI As Integer) As Integer

' int caca_set_color_ansi (caca_canvas_t *, uint8_t, uint8_t)
' Set the default colour pair for text (ANSI version).
Private Extern caca_set_color_ansi(caca_canvas_t As Pointer, col1 As Byte, col2 As Byte) As Integer

' int caca_put_str (caca_canvas_t *, int, int, char const *)
' Print a string.
Private Extern caca_put_str(caca_canvas_t As Pointer, i1 As Integer, i2 As Integer, testo As String) As Integer

' int caca_printf (caca_canvas_t *, int, int, char const *,...)
' Print a formated string.
Private Extern caca_printf(caca_canvas_t As Pointer, i1 As Integer, i2 As Integer, testo As String, i3 As Integer) As Integer

' int caca_fill_box (caca_canvas_t *, int, int, int, int, uint32_t)
' Fill a box on the canvas using the given character.
Private Extern caca_fill_box(caca_canvas_t As Pointer, i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer, i5 As Integer) As Integer

' int caca_put_char (caca_canvas_t *, int, int, uint32_t)
' Print an ASCII or Unicode character.
Private Extern caca_put_char(caca_canvas_t As Pointer, i1 As Integer, i2 As Integer, i3 As Integer) As Integer

' int caca_gotoxy (caca_canvas_t *, int, int)
' Set cursor position.
Private Extern caca_gotoxy(caca_canvas_t As Pointer, ix As Integer, iy As Integer) As Integer

' int caca_refresh_display (caca_display_t *)
' Flush pending changes and redraw the screen.
Private Extern caca_refresh_display(displ As Pointer) As Integer

' int caca_get_event (caca_display_t *, int, caca_event_t *, int)
' Get the next mouse or keyboard input event.
Private Extern caca_get_event(caca_canvas_t As Pointer, i1 As Integer, caca_event_t As Pointer, i2 As Integer) As Integer

' int caca_get_event_key_ch (caca_event_t const *)
' Return a key press or key release event's value.
Private Extern caca_get_event_key_ch(cev As Pointer) As Integer

' uint32_t caca_get_event_key_utf32 (caca_event_t const *)
' Return a key press or key release event's Unicode value.
Private Extern caca_get_event_key_utf32(cev As Pointer) As Integer

' int caca_free_canvas(caca_canvas_t *)
' Free a libcaca canvas.
Private Extern caca_free_canvas(caca_canvas_t As Pointer) As Integer



Public Sub Main()

 Dim cv, dp, ev As Pointer
 Dim i, e, running, j, start, size As Integer
 

  cv = caca_create_canvas(0, 0)
  If IsNull(cv) Then Error.Raise("Impossible crear un soporte gráfico 'caca' !")
  
  dp = caca_create_display(cv)
  If IsNull(dp) Then Error.Raise("Impossible crear un display 'caca' !")

  caca_set_cursor(dp, 1)
  
  caca_set_color_ansi(cv, CACA_WHITE, CACA_BLUE)

  caca_put_str(cv, 1, 1, "Inserción del texto - presiona la tecla Tab para ir a la línea siguiente")

  For i = 0 To TEXT_ENTRIES - 1
        entries[i].buffer[0] = 0
        entries[i].size = 0
        entries[i].cursor = 0
        entries[i].changed = 1
        caca_printf(cv, 3, 3 * i + 4, "[Inserción ] " & i, i + 1)
  Next
  
  running = 1

  While running


    For i = 0 To TEXT_ENTRIES - 1
      If Not entries[i].changed Then Continue
      caca_set_color_ansi(cv, CACA_BLACK, CACA_LIGHTGRAY)
      caca_fill_box(cv, 2, 3 * i + 5, BUFFER_SIZE + 1, 1, 32)
      start = 0
      size = entries[i].size
      For j = 0 To size - 1
        caca_put_char(cv, 2 + j, 3 * i + 5, entries[i].buffer[start + j])
      Next
      entries[i].changed = 0
    Next

' Coloca el cursor en la Estructura activa:
    caca_gotoxy(cv, 2 + entries[e].cursor, 3 * e + 5)
    caca_refresh_display(dp)
    
    If caca_get_event(dp, CACA_EVENT_KEY_PRESS, VarPtr(ev), -1) = 0 Then Continue

    Select Case caca_get_event_key_ch(VarPtr(ev))
      Case CACA_KEY_TAB
        e = (e + 1) Mod TEXT_ENTRIES
      Case CACA_KEY_RETURN
        e = (e + 1) Mod TEXT_ENTRIES
      Case CACA_KEY_BACKSPACE
        If entries[e].cursor Then
          Dec entries[e].size
          Dec entries[e].cursor
          entries[e].changed = 1
        Endif
      Case CACA_KEY_ESCAPE
        running = 0
      Case Else
        If entries[e].size < BUFFER_SIZE Then
          entries[e].buffer[entries[e].cursor] = caca_get_event_key_utf32(VarPtr(ev))
          Inc entries[e].size
          Inc entries[e].cursor
          entries[e].changed = 1
        Endif
    End Select
    
  Wend

 
' Terminando...:
   caca_free_canvas(dp)
   caca_free_canvas(cv)

End

 



 
última edición por vuott el Miercoles, 07 May 2014, 16:00; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Insertar Un Texto Arrastrandolo En Un Text... Shell General 2 Viernes, 08 Marzo 2013, 12:18 Ver último mensaje
Shell
No hay nuevos mensajes Insertar Una Linea En Un Archivo De Texto.... datobinario General 6 Jueves, 14 Marzo 2013, 14:00 Ver último mensaje
datobinario
No hay nuevos mensajes [C] Insertar Dos Imágenes PNG Al Crear Un... vuott C/C++ 0 Martes, 18 Agosto 2015, 18:29 Ver último mensaje
vuott
No hay nuevos mensajes Como Crear Y Usar Una Libreria Hecha Con G... v3ctor Controles/Librerías/Componentes 2 Jueves, 22 Junio 2017, 18:33 Ver último mensaje
mckaygerhard
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron