Ir al contenido


Foto

[RESUELTO] Letras intermitentes


  • Por favor identifícate para responder
15 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 09 febrero 2010 - 12:04

Hola a todos

Cual es la mejor forma de poner letras intermitentes en un form de delphi sin utilizar ningun componente.


  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 febrero 2010 - 03:38

Pues la forma mas sencilla sería cambiar el color de la fuente alternativamente con el del fondo controlado por un timer a la frecuencia deseada. Claro que un timer ya es un componente. Si no lo quieres usar un TTimer tienes la opción de la API SetTimer con la que conseguirás lo mismo y sin ningún componente asociado.


Saludos.

  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 febrero 2010 - 06:24

Un ejemplo sencillo.


delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ExtCtrls, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Edit1: TEdit;
  12.     Timer1: TTimer;
  13.     Edit2: TEdit;
  14.     procedure Timer1Timer(Sender: TObject);
  15.   private
  16.     Flag: integer;
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.   end;
  21.  
  22. var
  23.   Form1: TForm1;
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.Timer1Timer(Sender: TObject);
  30. begin
  31.     Flag:= Flag xor 1;
  32.     Timer1.Enabled:= false;
  33.     Timer1.Enabled:= true;
  34.     if (Flag = 1) and  (Windows.GetFocus()<>Edit1.Handle) then
  35.             Edit1.Font.Color:= clWhite
  36.     else
  37.             Edit1.Font.Color:= clBlack;
  38.  
  39. end;
  40.  
  41. end.



Cuando Edit1 no tiene foco se vuelve intermitente, si tiene foco para.

Saludos.

Archivos adjuntos


  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 09 febrero 2010 - 10:53

Gracias escafandra por tu respuesta, habia encontrado algo similar a lo que propones, pero haciendo esto con un timer:


delphi
  1. DBText9.Visible:=not DBText9.Visible;   

 

Hay alguna diferencia entre hacerlo asi y como indicas, cual crees que sea mas efectivo.

Cuando me referia a componentes, eran de terceros.

La otra solucion que me propones tengo que estudiar como funciona porque ante la simplicidad y facilidad de uso del timer el otro se me hace muy complicado.

Mi unico problema con el timer es que ya tengo dos en ese formulario y no se si me afecte en algo.




  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 09 febrero 2010 - 11:53

...Mi unico problema con el timer es que ya tengo dos en ese formulario y no se si me afecte en algo.


NO amigo no afecta en nada salvo si dos timer hacen el mismo trabajo, pero mientras que cada uno haga algo diferente no hay problema ;).
  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 09 febrero 2010 - 11:58

Gracias enecumene por la aclaracion y que piensas de  hacer el texto visible o no
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 09 febrero 2010 - 12:25

¿Es tan necesario que las letras hagan "señales luminosas" para llamar la atención? ¿Cuál es el objetivo que te propones?

Lo que yo una vez hice en mi viejo, y ya perdido, reproductor de música es dotar a algunos labels la capacidad de cambiar el formato cuando se le pasaba el mouse y/o si se les daba un clic. Algo similar a lo que sucede con los enlaces.

No me agrada mucho la idea de más "efectos". Creo que se pierde de vista el atractivo y la objetividad de un sistema. Como quien diría... "no enchules demasiado que después no se sabe que auto es" ;)

El uso de TTimer no aporta demasiada complejidad, ni problemas a un equipo. Pero yo como todo buen y trastornado sujeto saco al filósofo molesto y me pregunto ¡Y para que tanta bulla el que cada milisegundos quiero que se ponga a titilar! ¡Le estoy haciendo gastar ciclos de procesador a la máquina al semerendo p***! ¡Podría destinar esos ciclos para algo más útil!

Lo bueno de mi labels/links es que se podía reaprovechar los eventos. De este modo sólo programaba en uno y los demás "apuntaban" a éste. Y lo extra es que sólo se notaba lo copado cuando el usuario pasaba por allí y no gasta nada de recursos ;).

Saludos,
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 09 febrero 2010 - 01:24

Gracias delphius por tus reflexiones, En este caso no es por enchular, sino por llamar la atencion del usuario de que debe realizar cierta accion en un momento dado. Siendo mas preciso, si un cliente esta de viaje y quiere que en caso de que suene una alarma se realice una accion especifica o se llame a alguna persona diferente de las normales.

ademas de otros usos que podria darle a ese efecto.
  • 0

#9 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 09 febrero 2010 - 01:59

Agrega este code a un archivo llamalo BlinkLABEL y lo instalas...



delphi
  1. unit BlinkLabel;
  2.  
  3. interface
  4.  
  5. uses
  6.   Classes, StdCtrls, ExtCtrls;    { TTimer se declara en ExtCtrls }
  7.  
  8. type
  9.   TBlinkLabel = class(TLabel)    {TBlinkLabel deriva de TLabel}
  10.   private
  11.     FVelocidad : integer;        {Frecuencia de parpadeo}
  12.     FTimer : TTimer;            {Timer para la frecuencia}
  13.     procedure SetVelocidad(valor : integer);  {Almacena la velocidad}
  14.   protected
  15.     procedure parpadea(Sender : TObject);
  16.   public
  17.     constructor Create(AOwner : TComponent); override;    {Constructor}
  18.     destructor Destroy; override;                        {Destructor}
  19.   published
  20.     property Velocidad : integer read FVelocidad write SetVelocidad default 400;
  21.   end;
  22.  
  23. procedure Register;
  24.  
  25. implementation
  26.  
  27. constructor TBlinkLabel.Create(AOwner : TComponent);
  28. begin
  29.   inherited Create(AOwner);      {Llama al constructor original (heredado)}
  30.   FTimer := TTimer.Create(Self);  {Creamos el timer}
  31.   FVelocidad := 400;              {Frecuencia (velocidad) por defecto}
  32.   FTimer.Enabled:=True;          {Activamos el timer}
  33.   FTimer.OnTimer:=parpadea;      {Asiganamos el método parpadea}
  34.   FTimer.Interval:=FVelocidad;    {Asignamos el intervalo del timer = frecuencia parpadeo}
  35. end;
  36.  
  37. destructor TBlinkLabel.Destroy;
  38. begin
  39.   FTimer.Free;          {Liberamos el timer}
  40.   inherited destroy;    {Llamamos al destructor original (heredado)}
  41. end;
  42.  
  43. procedure TBlinkLabel.SetVelocidad (valor : integer);
  44. begin
  45.   If FVelocidad <> valor then        {Sólo si el valor introducido es distinto del almacenado}
  46.   begin
  47.     if valor < 0 then FVelocidad:=0;
  48.     FVelocidad:=Valor;              {Asigna la velocidad}
  49.     if FVelocidad=0 then FTimer.Enabled:=False else FTimer.Enabled:=True;
  50.     {Si Fvelocidad=0 el mensaje debe estar siempre visible}
  51.     FTimer.Interval:=FVelocidad;
  52.     Visible:=True;
  53.   end;
  54. end;
  55.  
  56. procedure TBlinkLabel.parpadea(Sender : TObject);
  57. begin
  58.   if FTimer.Enabled then Visible := not(Visible);  {Alternativamente muestra y oculta el mensaje si el timer esta activado}
  59. end;
  60.  
  61. procedure Register;        {Registro del componente}
  62. begin
  63.   RegisterComponents('JCPH', [TBlinkLabel]);
  64. end;
  65.  
  66. end.


  • 0

#10 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 febrero 2010 - 02:12

Gracias escafandra por tu respuesta, habia encontrado algo similar a lo que propones, pero haciendo esto con un timer:


delphi
  1. DBText9.Visible:=not DBText9.Visible;   

 

Hay alguna diferencia entre hacerlo asi y como indicas, cual crees que sea mas efectivo...


Si lo que quieres es una intermitencia simple, es lo mismo que lo hagas con la propiedad visible o el color del texto. El problema lo tendrás cuando lo quieres aplicar a un componente en el que no puedas hacer invisible el texto, entonces el truco será cambiarle el color. También puedes realizar efectos con los colores del texto...

Mi ejemplo ha tratado de ser general, sirviendo para cualquier control con texto.

En los tiempos que corren se gastan demasiados ciclos de procesador en adornos gráficos, los nuevos S.O. son una clara muestra de ello. Los programas actuales inevitablemente siguen esas tendencias, y las aplicaciones entran por los ojos.

Saludos.


  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 febrero 2010 - 02:16

Totalmente de acuerdo contigo amigo escafandra, e incluso sin requerir de componentes de terceros, para mí eso es lo invaluable de tu propuesta (y) :)

Salud OS
  • 0

#12 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 febrero 2010 - 05:05

Hola
Para que los usuarios vean y respondan a lo que uno necesita yo prefiero el látigo, pero ya se están quejando. :D :D
He intentado el texto con parpadeo, el sonido, el mensaje y me parece que el látigo funciona mejor. :D ;)
Saludos
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 febrero 2010 - 05:14

Hola
Para que los usuarios vean y respondan a lo que uno necesita yo prefiero el látigo, pero ya se están quejando. :D :D
He intentado el texto con parpadeo, el sonido, el mensaje y me parece que el látigo funciona mejor. :D ;)
Saludos


Ah caray, si que saliste malo amigo :D :D :D

Salud OS
  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 febrero 2010 - 05:15

....He intentado el texto con parpadeo, el sonido, el mensaje y me parece que el látigo funciona mejor. :D ;)....


Indudablemente y en algunas situaciones, algunos usuarios lo que realmente necesitan es el látigo, sobre eso no cabe la menor duda. :p  :D

Saludos.
  • 0

#15 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 09 febrero 2010 - 05:28

vamos, pongan el codigo del latigo !!!!!!!!  :smiley:
  • 0

#16 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 11 febrero 2010 - 04:05

vamos, pongan el codigo del latigo !!!!!!!!  :smiley:


Aquí la primera parte: Acierto o error

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.