Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Color de Componentes Según estado del DataSet (https://www.clubdelphi.com/foros/showthread.php?t=75803)

Neeruu 20-09-2011 16:09:42

Color de Componentes Según estado del DataSet
 
Hola.... Buenos días....

Gente del ClubDelphi, tengo una consulta que no se como resolverla, así que recurro a ustedes para ver si pueden ayudarme....

La consulta es la siguiente:

Tengo componentes enlazados a un DataSource y el dataset de este datasource enlazado a un query.

DataSource --> DataSet --> Query.

Ahora cuando cambio el estado del query (esta en insert, edit, o browser), quiero poder indentificar los controles que tiene asociado ese datasource, o dataset para poder cambiarle el color.


En conclusión, quiero q cada ves que cambio el estado del query se cambie el color de los controles asociados a ese query.

Necesitaría algo bien encapsulado... porque no encuentro otro forma que no sea ir componente por componente realizando esta personalización.

Desde ya muchas gracias...

Saluda Atte Neeruu!!! :)

ggram2 21-09-2011 22:22:51

Neeruu

Puedes hacerlo con la propiedad OnStateChange del DataSource
ahi puedes poner un codigo que haga algo segun el estado de una tabla o query por ejemplo:

procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
inherited;
if Table1.State in dsEditModes then
BDGrid1.color := clGreen
else
BDGrid1.color := clRed
End

Ensayalo

José Luis Garcí 21-09-2011 22:52:38

hola Neeruu, en el FTP del Club, puse un componente el NewPanelDB, el cual es un panel conectado a un datasource, con las propiedades de enble y visible vinculados a este, a elegir, ademas permite que el panel cambie de color, cuando esta en edit, append o insert.

Neeruu 22-09-2011 17:18:22

Color de Componentes Según estado del DataSet
 
Hola a todos, y muchas gracias por sus respuestas.

ggram2: El tema de las grillas no lo tengo pensando todavía, porque necesitaría que se cambie de color solo la el registro que se esta editando... y no toda la grilla.
Gracias por responder.


José Luis Garcí:
Voy a probar el panel que me sugieres, después te comento como me va con la prueba.


Yo había pensando algo así:
Código Delphi [-]
procedure TForm.DSMainStateChange(Sender: TObject);
i:Integer;
myColor:TColor;
begin
 
  Case DSMain.DataSet.State of
    dsInactive: myColor := clGray;
    dsBrowse  : myColor := clWindow;
    dsEdit    : myColor := $00B7DBFF;
    dsInsert  : myColor := $00C5DEC9;
  end;

  for I := 0 to Form1.ComponentCount - 1 do
    begin
      if Form1.Components[i] is TcxDBTextEdit then
          TcxDBTextEdit(Form1.Components[i]).Style.Color := myColor
      else
      if Form1.Components[i] is TcxDBLookupComboBox then
        TcxDBLookupComboBox(Form1.Components[i]).Style.Color := myColor
      else
      if Form1.Components[i] is TcxDBMemo then
        TcxDBMemo(Form1.Components[i]).Style.Color := myColor;
    end;
end;

Lo probe y hace lo que necesito...

De nuevo gracias a las respuestas...

Saluda Atte Neeruu!!!:)

José Luis Garcí 22-09-2011 17:37:55

Me alegro que te funcionase, en lo que querías, he de decir, que el objetivo, no es sólo visual, ademas de ahorrar, código, nos permite controlar, el estado del dataset, claro esta, en modo Insert/Edit, en otros modos, pero ademas impide si se quiere a acceder a los datos cunado no esta en este modo, sin escribir ni una sola linea de código.


La franja horaria es GMT +2. Ahora son las 10:24:40.

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