Neeruu
23-09-2011, 15:56:39
Hola a todos!!!
Siguiendo con la consulta que realice hace un par de días atrás, sobre como colorear los componentes según el estado del dataset, ahora surgió una nueva duda
Link del Post Anterior:
Colorear Componentes Según el Estado de DataSet (http://www.clubdelphi.com/foros/showthread.php?t=75803)
Introducción:
Para colorear los componentes de un Form o un Frame resolví realizarlo en el evento StateChange del DataSource enlazado al dataset en cuestión...
Código:
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;
Y hasta aca todo barbaro, pero me dí cuenta que si hacia esto en todos los formularios y después quería cambiar el color, tendría que ir uno por uno cambiando los colores, entonces decidí hacer una procedimiento en común
donde esta el código que necesito y simplemente desde el StateChange llamar a ese procedimiento.
El procedimiento me quedo así:
Procedure ComponentsColorDataSetStatus(myState:TDataSetState; myComponentCount:Integer;
myComponents:TComponent);
Var i:Integer;
myColor:TColor;
begin
Case myState of
dsInactive: myColor := clGray;
dsBrowse : myColor := clWindow;
dsEdit : myColor := $00B7DBFF;
dsInsert : myColor := $00C5DEC9;
end;
for I := 0 to myComponentCount - 1 do
begin
if myComponents[i] is TcxDBTextEdit then
TcxDBTextEdit(myComponents[i]).Style.Color := myColor
else
if myComponents[i] is TcxDBLookupComboBox then
TcxDBLookupComboBox(myComponents[i]).Style.Color := myColor
else
if myComponents[i] is TcxDBMemo then
TcxDBMemo(myComponents[i]).Style.Color := myColor;
end;
end;
El problema:
El problema es que al compilar me da un error en la llamada al procedimiento:
ComponentsColorDataSetStatus(DSMain.DataSet.State,Form1.ComponentCount, Form1.Components);
Error:
[DCC Error] Form1.pas(256): E2029 '[' expected but ')' found
La pregunta:
Como puedo pasar los componentes de un Form como parámetro al procedimiento?
Desde ya gracias por la ayuda, espero que no se cansen leyendo la introducción.... :(
Saluda Atte Neeruu!!!:)
Siguiendo con la consulta que realice hace un par de días atrás, sobre como colorear los componentes según el estado del dataset, ahora surgió una nueva duda
Link del Post Anterior:
Colorear Componentes Según el Estado de DataSet (http://www.clubdelphi.com/foros/showthread.php?t=75803)
Introducción:
Para colorear los componentes de un Form o un Frame resolví realizarlo en el evento StateChange del DataSource enlazado al dataset en cuestión...
Código:
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;
Y hasta aca todo barbaro, pero me dí cuenta que si hacia esto en todos los formularios y después quería cambiar el color, tendría que ir uno por uno cambiando los colores, entonces decidí hacer una procedimiento en común
donde esta el código que necesito y simplemente desde el StateChange llamar a ese procedimiento.
El procedimiento me quedo así:
Procedure ComponentsColorDataSetStatus(myState:TDataSetState; myComponentCount:Integer;
myComponents:TComponent);
Var i:Integer;
myColor:TColor;
begin
Case myState of
dsInactive: myColor := clGray;
dsBrowse : myColor := clWindow;
dsEdit : myColor := $00B7DBFF;
dsInsert : myColor := $00C5DEC9;
end;
for I := 0 to myComponentCount - 1 do
begin
if myComponents[i] is TcxDBTextEdit then
TcxDBTextEdit(myComponents[i]).Style.Color := myColor
else
if myComponents[i] is TcxDBLookupComboBox then
TcxDBLookupComboBox(myComponents[i]).Style.Color := myColor
else
if myComponents[i] is TcxDBMemo then
TcxDBMemo(myComponents[i]).Style.Color := myColor;
end;
end;
El problema:
El problema es que al compilar me da un error en la llamada al procedimiento:
ComponentsColorDataSetStatus(DSMain.DataSet.State,Form1.ComponentCount, Form1.Components);
Error:
[DCC Error] Form1.pas(256): E2029 '[' expected but ')' found
La pregunta:
Como puedo pasar los componentes de un Form como parámetro al procedimiento?
Desde ya gracias por la ayuda, espero que no se cansen leyendo la introducción.... :(
Saluda Atte Neeruu!!!:)