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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.