Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cambiar color de panel al seleccionarlo (https://www.clubdelphi.com/foros/showthread.php?t=82271)

rotsen26 16-02-2013 19:32:47

Cambiar color de panel al seleccionarlo
 
Buen día a todos...

Una pregunta a todos, como puedo cambiarle el color a un TPanel al darle clic???

Lo que pasa es que tengo varios paneles en una form, y quiero que se cambie de color el panel que le doy clic y se quede así hasta darle clic a otro panel. como puedo cambiar el color de ello???

Se le agradece su ayuda de antemano!!!

Casimiro Noteví 16-02-2013 19:55:09

Mira los enlaces del final de la página, abajo del todo, espero que te sirva.

ecfisa 16-02-2013 20:44:11

Cita:

Empezado por rotsen26 (Mensaje 455123)
...
Lo que pasa es que tengo varios paneles en una form, y quiero que se cambie de color el panel que le doy clic y se quede así hasta darle clic a otro panel.
...

Hola rotsen26.

Un modo de hacer lo que solicitas es:
Código Delphi [-]
...
implementation 

var
  PrevWinCtrl: TWinControl;

...

procedure TForm1.PanelsClick(Sender: TObject);
begin
  if Assigned(PrevWinCtrl) then
    TPanel(PrevWinCtrl).Color := clBtnFace; // color inicial
  TPanel(Sender).Color := clRed;            // color seleccion
  PrevWinCtrl:= TPanel(Sender);
end
...

Saludos.

Edito: Desde el Object Inspector deberás agregar el procedimiento PanelsClick a los eventos OnClick de los Panels del form.

ecfisa 18-02-2013 20:04:35

Hola de nuevo.

Se me ocurrió otra forma de realizar lo mismo y que evita las múltiples asignaciones al evento OnClick de los TPanel:
Código Delphi [-]
...
implementation

var
  PrevWinCtrl: TWinControl;

procedure TForm1.MouseEvent(var Msg: TMsg; var Handled: Boolean);
var
  Ctrl : TWinControl;
begin
  if Msg.message =  WM_LBUTTONDOWN then
  begin
    Ctrl := FindVCLWindow(Mouse.CursorPos);
    if Assigned(Ctrl) and (Ctrl is TPanel) then
    begin
      if Assigned(PrevWinCtrl) then
        TPanel(PrevWinCtrl).Color := clBtnFace; 
      TPanel(Ctrl).Color := clRed;
      PrevWinCtrl := TWinControl(Ctrl);
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMessage := MouseEvent;
end;
...

Saludos.

rotsen26 19-02-2013 01:50:29

Cita:

Empezado por ecfisa (Mensaje 455181)
Hola de nuevo.

Se me ocurrió otra forma de realizar lo mismo y que evita las múltiples asignaciones al evento OnClick de los TPanel:
Código Delphi [-]
...
implementation

var
  PrevWinCtrl: TWinControl;

procedure TForm1.MouseEvent(var Msg: TMsg; var Handled: Boolean);
var
  Ctrl : TWinControl;
begin
  if Msg.message =  WM_LBUTTONDOWN then
  begin
    Ctrl := FindVCLWindow(Mouse.CursorPos);
    if Assigned(Ctrl) and (Ctrl is TPanel) then
    begin
      if Assigned(PrevWinCtrl) then
        TPanel(PrevWinCtrl).Color := clBtnFace; 
      TPanel(Ctrl).Color := clRed;
      PrevWinCtrl := TWinControl(Ctrl);
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMessage := MouseEvent;
end;
...

Saludos.



Una pregunta, el siguiente código a que se refiere???
Código Delphi [-]
if Msg.message =  WM_LBUTTONDOWN then

Porque me marca error en el!!!

ecfisa 19-02-2013 03:27:10

1 Archivos Adjunto(s)
Cita:

Empezado por rotsen26 (Mensaje 455203)
Una pregunta, el siguiente código a que se refiere???
Código Delphi [-]
if Msg.message =  WM_LBUTTONDOWN then

Porque me marca error en el!!!

Hola.

El mensaje WM_LBUTTONDOWN es disparado cuando se presiona el botón izquierdo del mouse.

Desconozco el motivo del error ya que no comentas cuál es. Pero si copiaste y pegaste el código anterior no tendría por que darlo.

Para que puedas revisar el código con tranquilidad te adjunto los fuentes del ejemplo (probado).

Saludos.


La franja horaria es GMT +2. Ahora son las 03:48:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi