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 30-07-2015
osmeg osmeg is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 18
Poder: 0
osmeg Va por buen camino
No se puede cambiar color a TPanel creado en tiempo de ejecución

Buenos días amigos de ClubDelphi,

Les escribo porque quiero plantearles un problema que tengo y no he podido resolver: Estoy creando un TPanel en tiempo de ejecución y quiero que al momento de que pase el mouse sobre él, el TPanel cambie de color. Para capturar el evento mencionado he utilizado la propiedad OnMouseEnter y lo hace correctamente, pero al momento intentar cambiar el color del panel, no ocurre nada.

A continuación detallo el código que estoy utilizando:

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure panelMouseEnter(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  panelprueba: TPanel;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  panelprueba:= TPanel.Create(Self);
  panelprueba.Parent:= Self;
  panelprueba.Width:= 100;
  panelprueba.Height:= 100;
  panelprueba.Top:=0;
  panelprueba.Left:=0;
  panelprueba.OnMouseEnter:= panelMouseEnter;
end;

procedure TForm1.panelMouseEnter(Sender:TObject);
begin
  if Sender is TPanel then
    begin
    ShowMessage('Evento capturado');
      TPanel(Sender).Color:= clBlue;
    end;
end;

end.

Agradezco la colaboración que me puedan brindar para solucionar este problema.
Responder Con Cita
  #2  
Antiguo 30-07-2015
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Hola osmeg, solo tienes que agregar la propiedad ParentBackground a false. Espero que te sea de ayuda.

Código Delphi [-]
panelprueba.ParentBackground:=false;
Responder Con Cita
  #3  
Antiguo 30-07-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
osmeg,

Cita:
Empezado por osmeg
...No se puede cambiar color a TPanel creado en tiempo de ejecución...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure PanelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseLeave(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   Panel1.ParentBackground := False;
   Panel2.ParentBackground := False;
   Panel3.ParentBackground := False;
   Panel4.ParentBackground := False;
end;

procedure TForm1.PanelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin

   if TPanel(Sender).Name = 'Panel1' then
      Panel1.Color := clSkyBlue;

   if TPanel(Sender).Name = 'Panel2' then
      Panel2.Color := clGreen;

   if TPanel(Sender).Name = 'Panel3' then
      Panel3.Color := clYellow;

   if TPanel(Sender).Name = 'Panel4' then
      Panel4.Color := clRed;

end;

procedure TForm1.FormMouseLeave(Sender: TObject);
begin

   if TPanel(Sender).Name = 'Panel1' then
      Panel1.Color := clBtnFace;

   if TPanel(Sender).Name = 'Panel2' then
      Panel2.Color := clBtnFace;

   if TPanel(Sender).Name = 'Panel3' then
      Panel3.Color := clBtnFace;

   if TPanel(Sender).Name = 'Panel4' then
      Panel4.Color := clBtnFace;

end;

end.
El código anterior en Delphi XE7 sobre Windows 7 Professional x32, Permite cambiar el color de un TPanel en tiempo de ejecución, como se muestra en la siguiente imagen:



Espero sea útil

Nelson.
Responder Con Cita
  #4  
Antiguo 30-07-2015
osmeg osmeg is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 18
Poder: 0
osmeg Va por buen camino
Funciona perfectamente. Gracias a ZayDun y nlsgarcia por su colaboración.
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
Cambiar el color del borde de un TPanel madiazg API de Windows 0 03-02-2008 01:26:23
¿Se puede cambiar el path del alias en tiempo de ejecución? JuanBCT Tablas planas 2 23-05-2006 18:20:29
Mostrar un texto creado en tiempo de ejecución FunBit Varios 1 10-10-2005 13:23:39
cambiar color en tiempo de ejecucion? maruenda Varios 8 14-01-2004 21:28:34


La franja horaria es GMT +2. Ahora son las 13:21:52.


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