PDA

Ver la Versión Completa : Color de Componentes Según estado del DataSet


Neeruu
20-09-2011, 16:09:42
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
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í:

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.