Nuestro siguiente módulo es configuración, dándole al formulario los siguientes parámetros
Nombre UNIT UCONFIGURACION
Name=FConfiguracion
Caption=Configuración
Height=800
Width=1000
Position=PoScreenCenter
Shohint=True
KeyPreview=true
El módulo configuración sólo trabaja con tres paneles, nuestro botonera 1 que sólo contendrá el botón Salir y editar, eliminando el resto, el PanelOculto, con los botones Confirmar y cancelar para grabar los datos y el panel de datos, en el que muchos de ellos estarán des habilitados
Las secciones las he dividido con Groupbox, he usado separadores mediante simples etiquetas y bevels y por último he puesto un seleccionador con un radioGroup y para los colores he usado colorbox, por lo que estos junto al memo para el texto de la ley de protección de datos tendremos que controlarlos manualmente. Claro esta hay componentes que nos ahorrarían este trabajo, algunos de pagos y otros libres, teniendo yo algunos de ellos, pero como dije en este tutorial no usaremos más componentes que los estándar de Delphi.
El form quedaría así
y aquí tenéis el código completo
https://gist.github.com/anonymous/0c376637878de9278273
Vamos a comentar algunas parte del código, empecemos como controlar que nos muestre el texto y el color seleccionado en el memo y los colorbox para eso usamos el evento OnShow del formulario
Código Delphi
[-]procedure TFCONFIGURACION.FormShow(Sender: TObject);
begin
if not (DsPrincipal.DataSet.State in [dsEdit]) then
begin
if DM.IBDConfiguracionCOLOR_DISPONIBLE.Value<>'' then ColorBox1.Selected:=StringToColor(DM.IBDConfiguracionCOLOR_DISPONIBLE.Value);
if DM.IBDConfiguracionCOLOR_NO_DISPONIBLE.Value<>'' then ColorBox2.Selected:=StringToColor(DM.IBDConfiguracionCOLOR_NO_DISPONIBLE.Value);
if DM.IBDConfiguracionCOLOR_BLOQUEADA.Value<>'' then ColorBox3.Selected:=StringToColor(DM.IBDConfiguracionCOLOR_BLOQUEADA.Value);
if DM.IBDConfiguracionLEY_PROTECCION_DATOS.Value<>'' then Memo1.Lines.Text:=DM.IBDConfiguracionLEY_PROTECCION_DATOS.Value;
end;
end;
Como veis la única condición es que no este en modo edición nuestro datasource (DsPrincipal)
En el momento de grabar deberemos controlar estos mismos campos por lo que antes de hacer el post haremos los siguiente
Código Delphi
[-]if DsPrincipal.DataSet.State in [dsEdit] then
begin
if ColorBox1.Selected<>StringToColor(DM.IBDConfiguracionCOLOR_DISPONIBLE.Value) then DM.IBDConfiguracionCOLOR_DISPONIBLE.Value:=ColorToString(ColorBox1.Selected);
if ColorBox2.Selected<>StringToColor(DM.IBDConfiguracionCOLOR_NO_DISPONIBLE.Value) then DM.IBDConfiguracionCOLOR_NO_DISPONIBLE.Value:=ColorToString(ColorBox2.Selected);
if ColorBox3.Selected<>StringToColor(DM.IBDConfiguracionCOLOR_BLOQUEADA.Value) then DM.IBDConfiguracionCOLOR_BLOQUEADA.Value:=ColorToString(ColorBox3.Selected);
if Memo1.Lines.Text<>DM.IBDConfiguracionLEY_PROTECCION_DATOS.Value then DM.IBDConfiguracionLEY_PROTECCION_DATOS.Value:=Memo1.Lines.Text;
DSPrincipal.DataSet.Post;
end;
Siguiendo el resto del proceso como ya hemos visto
También cambia nuestros procedures en los botones SBMAS y SBMENOS por los siguientes, ya que sirven para varios campos
Código Delphi
[-]procedure TFCONFIGURACION.SBMasClick(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0:begin
if DBEDia.Field.IsNull then DBEDia.field.Value:=1;
if DBEDia.Field.value<7 then DBEDia.field.Value:=DBEDia.field.Value+1;
end;
1BESegundos.field.Value:=DBESegundos.field.Value+1;
2BERegistros.field.Value:=DBERegistros.field.Value+1;
end;
end;
procedure TFCONFIGURACION.SBMenosClick(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0:begin
if DBEDia.Field.IsNull then DBEDia.field.Value:=1;
if DBEDia.Field.value>1 then DBEDia.field.Value:=DBEDia.field.Value-1;
end;
1:if DBESegundos.Field.value>1 then DBESegundos.field.Value:=DBESegundos.field.Value-1;
2:if DBERegistros.Field.value>1 then DBERegistros.field.Value:=DBERegistros.field.Value-1;
end;
end;
Esto implica que hacemos una nueva llamada al editor por lo que el siguiente procedure en este módulo cambia de la siguiente manera
Código Delphi
[-]procedure TFeditor.SBOkClick(Sender: TObject);
begin
VarSMEMO:=Memo1.Lines.Text;
if VarSUnidad='UUSUARIOS' then FUsuarios.MEmoNotas.Lines:=Memo1.Lines;
if VarSUnidad='UCONFI' then FCONFIGURACION.Memo1.Lines:=Memo1.Lines;
Close;
end;
y por último está sería la manera de llamarlo
Código Delphi
[-]procedure TFMENU.act_ConfigurarExecute(Sender: TObject);
begin
if VarINivelUSuario>=6 then FCONFIGURACION.Show
else ShowMessage('No tiene nivel suficiente para acceder al apartado');
end;
Ya mañana seguiré ya que hoy tengo otras cosas que terminar.