Shell   07-07-2023, 14:44
#1
Buenas!.

Pues este es el ejemplo que quería mostraros el efecto que hace la letra, cuando se añade más velocidad o menos velocidad, su scroll horizontal.

[Imagen: vvgL5i7.png]

Para cambiar la dirección del texto se tiene que cambiar en este lugar:
El primer indice es el que debe modificar, la x, la y no. Wink
Indice 0.

Código:
'Índice de velocidad negativo. El texto se desplaza a la izquierda
'Índice de velocidad positivo. El texto se desplaza a la derecha
Private velocidad As Integer[] = [3, 0]

Fuente:
Código:
Const TEXTO As String = "GAMBAS BASIC"
Const TAMAFUENTE As Integer = 36

Private posicion As Integer[] = [0, 0]
'Índice de velocidad negativo. El texto se desplaza a la izquierda
'Índice de velocidad positivo. El texto se desplaza a la derecha
Private velocidad As Integer[] = [3, 0]

Private fuente As New Font
Private lineacentralactiva As Boolean = False 'Activamos/Desactivamos linea horizontal que divide DrawingArea

Public Sub Form_Open()

  Dim ancho As Integer
  Dim alto As Integer

  With Me
    .Title = "MARQUESINA"
    .Background = Color.Black
    .Center()
  End With  
  Pizarra.Background = Color.Black
 
  fuente.Name = "Monospace"
  fuente.Size = TAMAFUENTE
  ancho = fuente.TextWidth(TEXTO)
  alto = fuente.TextHeight(TEXTO)

  posicion[1] = (Pizarra.H - alto) / 2

  Timer1.Delay = 16
  Timer1.Start

End

Public Sub DibujarTextoCentrado()

  Dim RS As RectF

  If lineacentralactiva Then
    Paint.LineWidth = 1
    Paint.MoveTo(0, Pizarra.H / 2)
    Paint.LineTo(Pizarra.W, Pizarra.H / 2)
    Paint.Stroke
  Endif

  Paint.Translate(posicion[0], posicion[1])
  Paint.Font = Font[fuente.Name & "," & Str(fuente.Size)]
  Paint.Background = Color.White
  Paint.AntiAlias = True
  RS = Paint.TextSize(TEXTO)
  Paint.Text(TEXTO, RS.X, RS.Y, RS.Width, RS.Height)

  posicion[0] += velocidad[0]
  posicion[1] += velocidad[1]

  If velocidad[0] < 0 Then
    'El texto reaaparecerá por la derecha del DrawingArea
    If posicion[0] + RS.W < 0 Then
      'Restamos al ancho del DrawingArea el ancho de una letra
      posicion[0] = Pizarra.W - Paint.TextSize("G").W
    Endif
  Else If velocidad[0] > 0 Then
    'El texto reaaparecerá por la izquierda del DrawingArea
    If posicion[0] + Paint.TextSize("G").W > Pizarra.W Then
      'Restamos al ancho de una letra el ancho total del texto
      posicion[0] = Paint.TextSize("G").W - RS.W
    Endif

  Endif

  Paint.Fill

End

Public Sub Pizarra_Draw()

  DibujarTextoCentrado

End

Public Sub Timer1_Timer()

  Pizarra.Refresh

End

He usado Paint.Antialias pero no sé si realmente hace algo.
Tendría que ver si el sitio donde lo he situado es el adecuado.

Hay momentos que la letra parece "desgarrarse". ( Diente de sierra )
Probar a cambiar la velocidad, a hacerla negativa, etc.

Os subo el ejemplo.

Supongo que son limitaciones.

Saludos
Archivos adjuntos
.gz
Marquesina-0.0.1.tar.gz (Tamaño: 12.7 KB Descargas: 2)
Última modificación: 07-07-2023, 14:45 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   07-07-2023, 18:25
#2
Haciendo lo mismo y enfrentado al mismo problema, hice un control, que no recuerdo si subí al foro o no, llamado Banner. La fuente, los colores y el texto los puedes cambiar en el ide como cualquier control. Para la dirección del texto he usado la propiedad Direction del control. Te adjunto tu proyecto incluyendolo, y solo para dejar constancia de que mi código no se parece ni de lejos al tuyo, pero ni un poquito, oiga. Big Grin Big Grin Big Grin

Saludos
Archivos adjuntos
.gz
Marquesina-0.0.2.tar.gz (Tamaño: 16.26 KB Descargas: 2)
Última modificación: 07-07-2023, 18:31 por Shordi.

No podemos regresar
Shell   07-07-2023, 22:32
#3
(07-07-2023, 18:25)Shordi escribió: Haciendo lo mismo y enfrentado al mismo problema, hice un control, que no recuerdo si subí al foro o no, llamado Banner.

No lo llegué a ver si lo subiste algún día. Es la primera vez que lo veo.
(07-07-2023, 18:25)Shordi escribió: Te adjunto tu proyecto incluyendolo, y solo para dejar constancia de que mi código no se parece ni de lejos al tuyo, pero ni un poquito, oiga.

Es distinto, usa otra forma. Parece que la mayoría del control de movimiento se encuentra en el timer.
Charlie Ogier (Cogier) en su día creó "Marquee". También con un control, hace otro tipo de efectos. ( Lo tengo bajado ).

Marquee en GambasOne

Estoy intentando dedicarme más a hacerlo gráficamente que con controles. ( Es más complejo, naturalmente ).
En el caso de Cogier ha usado gráficos. ( Es que en parte es lo suyo, pero lo dicho es más complejo ).

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.