Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Simple: TPanel heredado que cambia de color con click. (https://www.clubdelphi.com/foros/showthread.php?t=48468)

kwanbis 25-09-2007 22:01:54

Simple: TPanel heredado que cambia de color con click.
 
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 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 ;)

Código Delphi [-]
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í:
Código Delphi [-]
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

Cita:

Empezado por paldave (Mensaje 233818)
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

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 02:49:07.

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