PDA

Ver la Versión Completa : Cambiar color de panel al seleccionarlo


rotsen26
16-02-2013, 19:32:47
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 Notevi
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
...
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:

...
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:

...
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
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:

...
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???
if Msg.message = WM_LBUTTONDOWN then

Porque me marca error en el!!!

ecfisa
19-02-2013, 03:27:10
Una pregunta, el siguiente código a que se refiere???
if Msg.message = WM_LBUTTONDOWN then

Porque me marca error en el!!!
Hola.

El mensaje WM_LBUTTONDOWN (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607%28v=vs.85%29.aspx) 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.