Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-12-2009
jaimeh jaimeh is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
jaimeh Va por buen camino
Scroll horizontal texto

Hola a todo el mundo

Verán, tengo lo siguiente:

Código Delphi [-]
   if i <= length(Edit1.Text) then
   begin
     label1.Caption := LeftStr(s, i);
     Inc(i);
   end
   else begin
     s := s + ' ';
     label1.Caption := s;
   end;

Este código desplaza los caracteres de izquierda a derecha en un label.
Pero el problema es que lo hace a saltos. Habría alguna forma de que
fuera un desplazamineto suave, sin saltos. He probado el doublebuffer
del form.
Me imagino que habrá que hacerlo a través de alguna librería gráfica

A ver si hay alguien que me pueda orientar

Saludos a todos.
Responder Con Cita
  #2  
Antiguo 18-12-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No se a qué te refieres con "saltos".
Utilizando un Timer debería funcionar sin problemas. Aunque no se si lo utilizas.
¿Podrías poner el código completo?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 18-12-2009
jaimeh jaimeh is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
jaimeh Va por buen camino
Gracias por responderme Neftali

La rutina que he puesto va dentro del evento de un timer de 50 ó 100ms,
pero con letras grandes se nota que el desplazamiento no es suave.
Es como si tuviera que hacerse a nivel de pixels y no de caracteres.

Y otra cosa, con la rutina que he puesto no sabría como hacer para
que volviese ha empezar a entrar por la derecha, cuando acabara de salir
por la izquierda del label.

Esto sería para un rótulo.

Saludos a todos
Responder Con Cita
  #4  
Antiguo 18-12-2009
jaimeh jaimeh is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
jaimeh Va por buen camino
Pongo el todo el codigo, aunque es una prueba

Código Delphi [-]
var
   s: string;
   i: Integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
   //
   s:= Edit1.Text;
   Timer1.Enabled := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Timer1.Enabled := false;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   //
   i:= 1;
   Form1.DoubleBuffered := true;
   Label1.Perform(WM_SETREDRAW, 0, 0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 //

   if i <= length(Edit1.Text) then
   begin
     label1.Caption := LeftStr(s, i);
     Inc(i);
   end
   else begin
     s := s + ' ';
     label1.Caption := s;
   end;


end;
Responder Con Cita
  #5  
Antiguo 18-12-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jaimeh Ver Mensaje
...pero con letras grandes se nota que el desplazamiento no es suave. Es como si tuviera que hacerse a nivel de pixels y no de caracteres.
en ese caso sólo se me ocurre que la etiqueta o texto la guardes como imagen (antes de empezar la animación) y luego en cada paso cortes una sección por la izquierda y la pegues por la derecha. No se si me explico....

Cita:
Empezado por jaimeh Ver Mensaje
Y otra cosa, con la rutina que he puesto no sabría como hacer para que volviese ha empezar a entrar por la derecha, cuando acabara de salir por la izquierda del label.
Debería bastar con poner en el Timer esto:
Código Delphi [-]
  Str := Label1.caption;
  Str := Copy(Str, 2, length(Str)) + Str[1];
  Label1.Caption := Str;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 18-12-2009
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Poder: 16
cocute Va por buen camino
en los componentes Jedi tienen un par de componentes para eso, que funcionan tambien con imagenes. http://jvcl.delphi-jedi.org/Downloads.htm

Pero vamos viendo lo simple que parece con lo que te dice Neftali creo que basta.
Responder Con Cita
  #7  
Antiguo 18-12-2009
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 21
Aleca Va por buen camino
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    cTexto: String;
    nLargoMarq: Integer;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Byte;
  nLarTexto: Byte;
begin
  cTexto := 'Hola Mundo';
  nLargoMarq := 50;
  nLarTexto := Length(cTexto);
  for i := 1 to nLargoMarq - nLarTexto do
    Insert(' ', cTexto, 0);
  Label1.Caption := cTexto;
  Timer1.Interval := 100;
  Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
  cChar: String[1];
begin
  cChar := copy(cTexto, 1, 1);
  Delete(cTexto, 1, 1);
  cTexto := cTexto + cChar;
  Label1.Caption := cTexto;
  Label1.RePaint;
end;
end.
fijate si te sirve.
__________________
Aleca
Responder Con Cita
  #8  
Antiguo 20-12-2009
jaimeh jaimeh is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
jaimeh Va por buen camino
Muchas gracias por responderme a todos,

La rutina de neftali se ajustaba al ancho de la cadena de texto, claro que
el ancho de la label fija (sin autosize) quería que fuera mucho mayor
que el ancho de la cadena de texto.

La rutina de aleca, el nlargoMarq yo quería que fuera el ancho de la label
fija (sin autosize), habria que saber cuantos caracteres cabrían en la label
(para hacer las cuentas), y ahí habría que averiguar la cantidad de pixeles
que ocupa la font. De todas formas se notan bastante los saltos en el
desplazamiento.

Utilizando jvcl con el componente jvSrollText va bastante bien, yo de este
ya sabía de él, pero no había hecho con él las pruebas. Se puede decir la
cantidad de pixeles que queremos que se desplacen en cada momento,
con lo cual llegamos a conseguir un desplazaminto bastante suave.

El único problema que he encontrado, es que su metodo Pause me deja
colgado el programa, así que no se como hacer para que se pueda parar
el desplazamiento y luego volver a seguir desplázandose desde donde
estaba. Habría que poner después de jvScrollText.Pause algo pero no se
el qué.


Muchas gracias a todos y saludos
Responder Con Cita
  #9  
Antiguo 20-12-2009
jaimeh jaimeh is offline
Miembro
 
Registrado: mar 2007
Posts: 68
Poder: 18
jaimeh Va por buen camino
Disculpad,

Ya vi como se podía parar y reanudar el desplazamiento solo hace falta
poner la propiedad jvScrollText.ScrollPixels := 0 para parar el desplazamiento y darle un valor positivo para que se reanude.

Muchas gracias a todos y saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Scroll con un texto dape Varios 2 28-01-2009 16:32:22
Aumentar Ancho de un barra de scroll horizontal gulder Varios 2 10-11-2008 22:35:31
Eliminar scroll horizontal (que no scrollbar) de dbgrid coso OOP 21 07-10-2008 20:29:13
TDBGrid y el scroll horizontal manitoba OOP 2 28-05-2007 22:23:36
Componentes Scroll Texto??? marceloalegre Varios 0 30-06-2005 18:07:39


La franja horaria es GMT +2. Ahora son las 17:21:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi