Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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 08-11-2003
Tonio Tonio is offline
Miembro
 
Registrado: may 2003
Ubicación: Logroño
Posts: 111
Poder: 21
Tonio Va por buen camino
Un componente dentro de otro.

Tengo un componente que tiene la opción de poner color en un botón. Funciona.
Ahora quiero que cuando una propiedad que le he agregado sea true, ese componente cambie de color, dos colores alternativos, es decir que haga el efecto de parpadear.
Con una función sencillita, en un Form aparte, hago ese parpadeo, con un TTimer, pero ¿como hago para que ese timer me funcione dentro del componente del botón?.
He probado create de dos formas, siempre copiando, y no doy con ello. No doy para más.
Si hay algún componente que haga el parpadeo también me sirve.
Un saludo.
Antonio.
Responder Con Cita
  #2  
Antiguo 08-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Crealo por código, cuando lo necesites....
Código:
FTimer := TTimer.Create(Self);
O puedes crear un timer directamente con la WinApi..

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 09-11-2003
Tonio Tonio is offline
Miembro
 
Registrado: may 2003
Ubicación: Logroño
Posts: 111
Poder: 21
Tonio Va por buen camino
Gracias por la respuesta delphi.com.ar, ya te debo varias.
Estoy haciendo pruebas, pero no me sale.
Pongo este codigo:

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
FTimer : TTimer;
begin
FTimer := TTimer.Create(Self);
FTimer.Enabled := True;
FTimer.Interval := 400;
FTimer.OnTimer(Sender: TObject);
begin
{Lo que deseo se haga y no se haga, cambio de color}
Pero me dice que espera un paréntesis y se encuentra con dos puntos.
Me pide un TNotifyEvent como parámetro, pero como lo pongo.
Así que desde 'Interval' no se como seguir.
end;
end;
Perdonar si es una bobada, pero a los torpes les pasa esto.
Un saludo.
Tonio.
Responder Con Cita
  #4  
Antiguo 09-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Mira este ejemplo a ver si con esto te sirve:

Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;
  
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  
    Procedure MiEvento(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
FTimer : TTimer;
begin
FTimer := TTimer.Create(Self);
FTimer.Enabled := True;
FTimer.Interval := 5000;
FTimer.OnTimer:=MiEvento;
end;

Procedure TForm1.MiEvento(Sender:TObject);
begin
ShowMessage('Ya está Tonio');
end;


end.
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 09-11-2003
Tonio Tonio is offline
Miembro
 
Registrado: may 2003
Ubicación: Logroño
Posts: 111
Poder: 21
Tonio Va por buen camino
Genial. Gracias.
Lo he probado fuera del componente, espero que dentro de él funcione igual, estupendamente.
Un saludo.
Responder Con Cita
  #6  
Antiguo 10-11-2003
Tonio Tonio is offline
Miembro
 
Registrado: may 2003
Ubicación: Logroño
Posts: 111
Poder: 21
Tonio Va por buen camino
Aquí estoy otra vez.
¿El interval de un TTime, autocreado, es 1000 por defecto?
He probado tu código dentro del componente, funciona, pero poniendo allí los parámetros o propiedades que necesita, pero como hago para, desde mi aplicación, decirle que enabled es 'True', que el Interval es '500', y cuando sea necesario, decirle que Enabled es 'False'.
Pregunto lo de 1000, porque, sin darle ningún dato sobre el Interval, me dice que Interval es 1000.
¿Cuando 'lee' el componente las propiedades?, porque he probado darle los 'datos' con ellas y no los recibe.
En el procedure de las propiedades del componente si lo recibe, pero fuera de él dice que es desconocido.
Pido disculpas, pero no se más.
Un saludo.
Tonio.
Responder Con Cita
  #7  
Antiguo 10-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
La valor de esa propiedad el 1000 porque el valor por defecto ha sido definido de esta manera. Si tu desde tu componente le asignas otro valor, el TTimer lo tomará sin problemas.

Esta es una forma de definir un valor por defecto:
Código:
type
  TEjemplo = class(TComponent)
  private
    FMiPropiedad: Integer;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property MiPropiedad: Integer read FMiPropiedad write FMiPropiedad default 1000;
    {El default sirve para que cuando el valor de la propiedad sea 1000, 
     no se guarde en el DFM }
  end;

implementation

constructor TEjemplo.Create(AOwner: TComponent);
begin
  inherited;
  FMiPropiedad := 1000;
end;
Cita:
Tonio comentó:
En el procedure de las propiedades del componente si lo recibe, pero fuera de él dice que es desconocido.
¿Qué quieres decir con esto?... disculpa pero no te entiendo.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 10-11-2003
Tonio Tonio is offline
Miembro
 
Registrado: may 2003
Ubicación: Logroño
Posts: 111
Poder: 21
Tonio Va por buen camino
Este es parte del código del componente.

Marcoszorrilla verá la similitud con su ejemplo. Gracias.

type
TBtnBlink = class(TButton)
Procedure MiEvento(Sender:TObject);
private
FTimer : TTimer;
FIntervalo : Integer;

...........................

procedure SetIntervalo(Value: integer);


....................

published

property Intervalo: integer read FIntervalo
write SetIntervalo default 0;
................

implementation

.............

procedure TBtnBlink.SetIntervalo(Value: integer);
begin
if FIntervalo <> Value then begin
FIntervalo:= Value;
Invalidate;
end;

Aquí es donde cuadra el texto:

'En el procedure de las propiedades del componente si lo recibe, '

Si pongo ShowMessage(IntToStr(FIntervalo));
Me muestra el de la propiedad.

end;

......

FTimer := TTimer.Create(Self);

FTimer.OnTimer:=MiEvento;

........

Procedure TBtnBlink.MiEvento(Sender:TObject);
begin

Aquí es donde lo necesito pero

'pero fuera de él dice que es desconocido'

Si pongo ShowMessage(IntToStr(FIntervalo));
Me dice desconocido

if FParpadeo then
begin
ColorBoton := clRed;
end
else
begin
ColorBoton := clYellow;
end;
fParpadeo := not FParpadeo;
end;

Así que lo que yo quiero saber es:
Yo pongo este botón en mi aplicación y cuando quiera que parpadee, porque ha recibido el foco o quiero resaltarlo:
¿Como ejecuto desde mi aplicación el procedure MiEvento, pasándole tanto Intervalo como Parpadeo, es decir a que velocidad y si lo debe hacer o no.
Perdonad, puede parecer sencillo, para mi no lo es, pero la idea es aprender.
Un saludo.
Tonio
Responder Con Cita
  #9  
Antiguo 10-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
A simple vista, parece que no usas para nada el valor que de FIntervalo. Te falta asignárselo a la propiedad del TTimer.
Si creas el TTimer en el create de tu componente, entonces puedes asignarlo en el SetIntervalo, si el timer lo creas solo cuando lo necesitas, inmediatamente creado este, asígnale FIntervalo.
Código:
FTimer := TTimer.Create(Self);
..
FTimer.OnTimer := MiEvento;
FTimer.Interval := FIntervalo;
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 12-11-2003
Tonio Tonio is offline
Miembro
 
Registrado: may 2003
Ubicación: Logroño
Posts: 111
Poder: 21
Tonio Va por buen camino
Gracias a los dos.
Efectivamente esa era una de las cosas que me fallaba y otra que al poner showmessage('') dentro del componente, me daba unas respuestas extrañas cuando se mostraba, lo cerraba el Timer funcionaba, pero como se volvia a mostrar..., ya os podéis imaginar. Luego la propiedad parpadeo, la tenía True en un sitio, False en otro, vamos un desastre.
Así que ya me funciona, gracias a vosotros.
Hasta la proxima.
Tonio.
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


La franja horaria es GMT +2. Ahora son las 20:23:16.


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