PDA

Ver la Versión Completa : Simple: TPanel heredado que cambia de color con click.


kwanbis
25-09-2007, 22:01:54
Hola. Pregunta simple. Supongamos que quisiera hacer un TPanel heredado que cuando le hago click, cambia su color al azar. Como seria el codigo?

dec
25-09-2007, 22:07:05
Hola,

Por favor, revisa la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) de estos foros. Está bien solicitar ayuda y aquí hay gente que tal vez pueda echarte un cable, pero, tal como lo expones... estás pidiendo que te hagan el trabajo. Todo el trabajo. Y esto no está bien, ¿no? Si dijeras que estás intentando esto o lo otro pero que no te sale por X motivo... sería otra cosa, en mi opinión, al menos.

PD. De pregunta simple nada... hay ahí algunas cuestiones que pueden llevar bastante tiempo y trabajo.

kwanbis
25-09-2007, 22:38:45
hola dec, como estas? la verdad que supongo que es bastante facil el tema, de hecho tengo este codigo:

TPanelHost = class(TPanel)
private
public
end;

pero no se como se hace el resto, por eso lo pregunto.

Si hago asi:

TPanelHost = class(TPanel)
private
public
procedure Clicked;
end;

no se como lo resuelvo despues.

pense en algo tipo

Procedure TPanelHost.Clicked;
begin
TPanelHost.Color := random
end;

Pero no estoy seguro, por que despues tendria que llamar al "onclick" event, y asociarlo con el evento TPanelHost.Click, y lo que yo quiero es, si posible, que quede ya implicito en el codigo.

No estoy pidiendo que me hagan un programa, por eso supuse que asi estaria bien.

paldave
25-09-2007, 22:50:53
Acá va el código, porque a veces un ejemplo sirve para entender como se hace y no tener que pedir que otros te escriban el código, y sin que sirva de precedente ;)

unit HostPanel;

interface

uses
SysUtils, Classes, Controls, ExtCtrls,Graphics;

type
THostPanel = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
public
procedure Click;override;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [THostPanel]);
end;

procedure THostPanel.Click;
begin
inherited Click;
self.Color:=Random($7FFFFFFF);
Repaint;
end;

end.

kwanbis
25-09-2007, 22:56:29
Gracias paldave.

Ahora, y me parece que a lo mejor mi duda viene de alguna confusion de no usar delphi hace muchos años, yo tengo que entonces definir el evento OnClick y apuntarlo a Click? O asi solo al clickear me cambiaria el color?

paldave
25-09-2007, 23:00:57
Así ya funciona.
También podrías campturar el evento OnClick así:
unit HostPanel;

interface

uses
SysUtils, Classes, Controls, ExtCtrls,Graphics;

type
THostPanel = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
public
procedure EventoClick(Sender:TObject);
constructor Create(AOwner:TComponent);override;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [THostPanel]);
end;

constructor THostPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
self.OnClick := EventoClick;
end;

procedure THostPanel.EventoClick(Sender: TObject);
begin
self.Color:=Random($7FFFFFFF);
Repaint;
end;

end.

pero me parece más complicado.

maeyanes
25-09-2007, 23:01:09
Hola...

Ya hiciste la prueba?

No hay nada mejor que probar el código para que entiendas que es lo que hace y como funciona... ;)


Saludos...

kwanbis
25-09-2007, 23:27:26
Así ya funciona.
También podrías campturar el evento OnClick así ... pero me parece más complicado.
excelente, gracias. En realidad yo hacia algo similar al segundo ejemplo, pero si, el primero es mucho mas simple. Gracias :)

Neftali [Germán.Estévez]
26-09-2007, 13:39:19
constructor THostPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
self.OnClick := EventoClick;
end;


Si me lo permitís, en este caso yo guardaría un apuntador al evento original;
Porque si desde el IDE programan ese evento, perderás el apuntador a tu código.