{ =============================================================================== Copyright (©) 2002. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 03-11-2002 Versión actual: 1.0.0 Fecha versión actual: 03-11-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit Configuracion; interface uses SysUtils, Classes, cxClasses, cxStyles, cxGridTableView, cxGridCardView, ImgList, Controls, FR_Class, FR_DSet, FR_DBSet, cxEdit, cxEditRepositoryItems, cxContainer, cxDBEditRepository, Entidades, am2000menuitem, am2000utils, am2000popupmenu, am2000options, am2000skin, am2000, AdvPanel, cxPropertiesStore, cxDBExtLookupComboBox, cxIntlScheduler, cxIntlPrintSys3, cxintl; const FICHERO_CONFIGURACION = 'factuges.ini'; FICHERO_COLORES = 'colores.ini'; type TdmConfiguracion = class(TDataModule) cxAlmacenEstilosGrid: TcxStyleRepository; cxBackground: TcxStyle; cxContent: TcxStyle; cxContentEven: TcxStyle; cxContentOdd: TcxStyle; cxFilterBox: TcxStyle; cxFooter: TcxStyle; cxGroup: TcxStyle; cxGroupByBox: TcxStyle; cxHeader: TcxStyle; cxInactive: TcxStyle; cxIncSearch: TcxStyle; cxIndicator: TcxStyle; cxPreview: TcxStyle; cxSelection: TcxStyle; StyleSheetGrid: TcxGridTableViewStyleSheet; StyleSheetCard: TcxGridCardViewStyleSheet; cxCardBorder: TcxStyle; cxRowCaption: TcxStyle; cxCaptionRow: TcxStyle; cxSelectionCardRow: TcxStyle; cxInactiveCardView: TcxStyle; cxEstiloEditoresFondoOscuro: TcxEditStyleController; cxEstiloEditoresFondoClaro: TcxEditStyleController; amSkinPrincipal: TAnimatedSkin2000; cxEditRepository1: TcxEditRepository; cxEditRepository1TextItem1: TcxEditRepositoryTextItem; cxEditRepository1LookupComboBoxItem1: TcxEditRepositoryLookupComboBoxItem; cxEditRepository1ExtLookupComboBoxItem1: TcxEditRepositoryExtLookupComboBoxItem; cxStyle1: TcxStyle; cxIntlScheduler1: TcxIntlScheduler; cxIntlPrintSys31: TcxIntlPrintSys3; cxIntl1: TcxIntl; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; function LeerConfiguracion : boolean; procedure ConfigurarVentanaPrincipal (Objeto : TWinControl); procedure ConfigurarPantallaAcceso (Objeto : TWinControl); procedure ConfigurarBarraLateral(Objeto : TWinControl; Entidad : TRdxEntidad); procedure ConfigurarFrame(Objeto : TWinControl; Entidad : TRdxEntidad); function PuedeSincronizar : boolean; var ListaBD : TStringList; dmConfiguracion: TdmConfiguracion; implementation {$R *.dfm} uses Windows, Forms, inifiles, Mensajes, Dialogs, cxDropDownEdit, cxTextEdit, Graphics, extctrls, stdctrls, pngimage, FthImage, RdxTitulos, RdxPageControl, RdxPaneles, RdxBarras, RdxBotones, OutlookXP; var FColores : TStringList; function DarColorEntidad (Entidad : String; NombreColor : String) : TColor; var i : Integer; begin if (length(Entidad) = 0) then exit; i := FColores.IndexOf(Entidad); with (FColores.Objects[i] as TStringList) do Result := StrToInt(Values[NombreColor]); end; function GetResourceAsPNG(const resname: string): TPngObject; var Stream: TResourceStream; begin Stream := TResourceStream.Create(hInstance, ResName, 'PNG'); try Result := TPngObject.Create; Result.LoadFromStream(Stream); finally Stream.Free; end; end; procedure ConfigurarPantallaAcceso (Objeto : TWinControl); var i : integer; ImagenPNG : TPNGObject; CadenaAux : String; begin for i := 0 to Objeto.ComponentCount-1 do begin if Objeto.Components[i] is TcxTextEdit then (Objeto.Components[i] as TcxTextEdit).Style.BorderColor := DarColorEntidad('barraprincipal', 'ToolbarColor1'); {if Objeto.Controls[i].Name = 'imgSombra' then begin ImagenPNG := GetResourceAsPNG('SOMBRA'); try (Objeto.Controls[i] as TImage).Picture.Assign(ImagenPNG); finally ImagenPNG.Free; end; end;} if Objeto.Components[i].Name = 'imgFondo' then begin ImagenPNG := GetResourceAsPNG('WP_FONDO'); try (Objeto.Components[i] as TImage).Picture.Assign(ImagenPNG); finally ImagenPNG.Free; end; end; if Objeto.Components[i].Name = 'pnlBarraSuperior' then begin with Objeto.Components[i] as TRdxGradientePanel do begin BackGroundEffect := bdDown; ColorStart := DarColorEntidad('barraprincipal', 'ToolbarColor2'); ColorEnd := DarColorEntidad('barraprincipal', 'ToolbarColor1'); end; end; if Objeto.Components[i].Name = 'eVersion' then begin with Objeto.Components[i] as TLabel do Font.Color := DarColorEntidad('barraprincipal', 'ToolbarColor1'); end; if Objeto.Components[i].Name = 'eEmpresa' then begin with Objeto.Components[i] as TLabel do Font.Color := DarColorEntidad('barraprincipal', 'ToolbarColor2'); end; if Objeto.Components[i].Name = 'eBienvenido' then begin with Objeto.Components[i] as TLabel do Font.Color := DarColorEntidad('barraprincipal', 'ToolbarColor2'); end; if ((Objeto.Components[i] is TWinControl) and (csAcceptsControls in (Objeto.Components[i] as TWinControl).ControlStyle)) then ConfigurarPantallaAcceso(Objeto.Components[i] as TWinControl) end; end; procedure ConfigurarBarraLateral(Objeto: TWinControl; Entidad: TRdxEntidad); var i : integer; TextoEntidad : String; ImagenPNG : TPNGObject; CadenaAux : String; begin TextoEntidad := DarNombreGrupo(Entidad); if (Objeto is TCustomForm) then (Objeto as TCustomForm).Color := DarColorEntidad('General', 'BackgroundColor'); for i := 0 to Objeto.ControlCount-1 do begin if Objeto.Controls[i].Name = 'pnlTitulo' then (Objeto.Controls[i] as TPanel).Color := DarColorEntidad(TextoEntidad, 'Color1'); if Objeto.Controls[i].Name = 'eTitulo' then (Objeto.Controls[i] as TLabel).Font.Color := clWhite; if Objeto.Controls[i].Name = 'pnlBarraLateral' then (Objeto.Controls[i] as TPanel).Color := DarColorEntidad(TextoEntidad, 'Color3'); if Objeto.Controls[i].Name = 'shSeparador' then (Objeto.Controls[i] as TShape).Pen.Color := DarColorEntidad(TextoEntidad, 'Color2'); if Objeto.Controls[i].Name = 'imgSombra' then begin ImagenPNG := GetResourceAsPNG('SOMBRA'); try (Objeto.Controls[i] as TImage).Picture.Assign(ImagenPNG); finally ImagenPNG.Free; end; end; if Objeto.Controls[i].Name = 'imgFondo' then begin case Entidad of entAgenda : CadenaAux := 'WP_AGENDA'; entDatos : CadenaAux := 'WP_DATOS'; entCliente : CadenaAux := 'WP_CLIENTES'; entProveedor : CadenaAux := 'WP_PROVEEDORES'; entEntLibro : CadenaAux := 'WP_CONTABILIDAD'; entInformes : CadenaAux := 'WP_INFORMES'; end; ImagenPNG := GetResourceAsPNG(CadenaAux); try (Objeto.Controls[i] as TImage).Picture.Assign(ImagenPNG); finally ImagenPNG.Free; end; end; if Objeto.Controls[i] is TRdxBotonLateral then with Objeto.Controls[i] as TRdxBotonLateral do begin Height := 50; Color := DarColorEntidad(TextoEntidad, 'Color3'); ColorFocused := DarColorEntidad('General', 'ControlFocusColor'); ColorDown := DarColorEntidad(TextoEntidad, 'Color2'); ColorBorder := DarColorEntidad(TextoEntidad, 'Color3'); ColorHighLight := DarColorEntidad(TextoEntidad, 'Color2'); ColorShadow := DarColorEntidad(TextoEntidad, 'Color2'); Font.Color := clBlack; Font.Style := []; FontDown.Color := clWhite; FontDown.Style := [fsBold]; end; if csAcceptsControls in Objeto.Controls[i].ControlStyle then ConfigurarBarraLateral(Objeto.Controls[i] as TWinControl, Entidad) end; end; procedure ConfigurarFrame(Objeto: TWinControl; Entidad: TRdxEntidad); var i : integer; TextoEntidad : String; ImagenPNG : TPNGObject; CadenaAux : String; begin TextoEntidad := DarNombreGrupo(Entidad); if (Objeto is TCustomForm) then (Objeto as TCustomForm).Color := DarColorEntidad('General', 'BackgroundColor'); for i := 0 to Objeto.ComponentCount-1 do begin if Objeto.Components[i].Name = 'imgSombra' then begin ImagenPNG := GetResourceAsPNG('SOMBRA'); try (Objeto.Components[i] as TImage).Picture.Assign(ImagenPNG); finally ImagenPNG.Free; end; end; { Esto es para que no falle cuando la entidad es EntVacia porque en el fichero de colores no está definida esa entidad. } if Entidad = entVacia then Continue; if (Objeto.Components[i] is TRdxCabecera) then begin (Objeto.Components[i] as TRdxCabecera).Font.Color := DarColorEntidad(TextoEntidad, 'Color1'); end; if (Objeto.Components[i] is TRdxPagesControl) then begin (Objeto.Components[i] as TRdxPagesControl).ColorTab := DarColorEntidad(TextoEntidad, 'Color3'); (Objeto.Components[i] as TRdxPagesControl).FontTab.Color := DarColorEntidad(TextoEntidad, 'Color1'); end; if (Objeto.Components[i] is TRdxPanelTituloOperacion) then begin (Objeto.Components[i] as TRdxPanelTituloOperacion).Color := DarColorEntidad(TextoEntidad, 'Color3'); (Objeto.Components[i] as TRdxPanelTituloOperacion).Font.Color := DarColorEntidad(TextoEntidad, 'Color1'); end; if (Objeto.Components[i] is TRdxBarraSuperior) and (Objeto.Components[i].Name = 'pnlExtra') then begin (Objeto.Components[i] as TRdxBarraSuperior).Color := $00D9E5E9; end; if (Objeto.Components[i] is TRdxBarraSuperior) and (Objeto.Components[i].Name <> 'pnlExtra') then begin (Objeto.Components[i] as TRdxBarraSuperior).Color := DarColorEntidad(TextoEntidad, 'Color1'); (Objeto.Components[i] as TRdxBarraSuperior).Font.Color := DarColorEntidad(TextoEntidad, 'Color3'); end; if ((Objeto.Components[i] is TRdxBotonSuperior) or ((Objeto.Components[i] is TRdxBotonMenu) and (TRdxBotonMenu(Objeto.Components[i]).Parent is TRdxBarraSuperior))) then begin with (Objeto.Components[i] as TRdxBoton) do begin Color := DarColorEntidad(TextoEntidad, 'Color1'); ColorFocused := DarColorEntidad(TextoEntidad, 'Color2'); ColorDown := DarColorEntidad(TextoEntidad, 'Color2'); ColorBorder := DarColorEntidad(TextoEntidad, 'Color3'); ColorHighLight := DarColorEntidad(TextoEntidad, 'Color2'); ColorShadow := DarColorEntidad(TextoEntidad, 'Color2'); Font.Color := DarColorEntidad(TextoEntidad, 'Color3'); Font.Style := [fsBold]; FontDown.Color := DarColorEntidad(TextoEntidad, 'Color1'); FontDown.Style := [fsBold]; end; end; if (Objeto.Components[i] is TPopupMenu2000) then begin with (Objeto.Components[i] as TPopupMenu2000).Options.Colors do begin Bevel := DarColorEntidad(TextoEntidad, 'Color3'); BevelShadow := DarColorEntidad(TextoEntidad, 'Color3'); Frame := DarColorEntidad(TextoEntidad, 'Color2'); FrameShadow := DarColorEntidad(TextoEntidad, 'Color2'); Border := DarColorEntidad(TextoEntidad, 'Color1'); Highlight := DarColorEntidad(TextoEntidad, 'Color3'); HighlightText := DarColorEntidad(TextoEntidad, 'Color1'); Pressed := DarColorEntidad(TextoEntidad, 'Color2'); PressedText := DarColorEntidad(TextoEntidad, 'Color1'); Line := DarColorEntidad(TextoEntidad, 'Color2'); Menu := DarColorEntidad(TextoEntidad, 'Color1'); MenuText := DarColorEntidad(TextoEntidad, 'Color3'); end; with (Objeto.Components[i] as TPopupMenu2000).Options.Margins do begin Border := 2; Bevel := 1; Frame := 1; end; end; if (Objeto.Components[i] is TAdvPanel) then begin (Objeto.Components[i] as TAdvPanel).Caption.Font.Color := DarColorEntidad(TextoEntidad, 'Color1'); (Objeto.Components[i] as TAdvPanel).Caption.MinMaxButtonColor := DarColorEntidad(TextoEntidad, 'Color1'); end; if ((Objeto.Components[i] is TWinControl) and (csAcceptsControls in (Objeto.Components[i] as TWinControl).ControlStyle)) then ConfigurarFrame(Objeto.Components[i] as TWinControl, Entidad) end; end; procedure ConfigurarVentanaPrincipal(Objeto: TWinControl); var i : integer; ImagenPNG : TPNGObject; CadenaAux : String; begin if (Objeto is TCustomForm) then (Objeto as TCustomForm).Color := DarColorEntidad('General', 'BackgroundColor'); for i := 0 to Objeto.ControlCount-1 do begin if Objeto.Controls[i] is TLabel then (Objeto.Controls[i] as TLabel).Font.Color := DarColorEntidad('barraprincipal', 'ToolbarFontColor'); if Objeto.Controls[i] is TFourthImage then with (Objeto.Controls[i] as TFourthImage) do begin if Name = 'bEmpresas' then CadenaAux := 'BT_ALMACEN'; if Name = 'bAgenda' then CadenaAux := 'BT_AGENDA'; if Name = 'bDatos' then CadenaAux := 'BT_DATOS'; if Name = 'bClientes' then CadenaAux := 'BT_CLIENTES'; if Name = 'bProveedores' then CadenaAux := 'BT_PROVEEDORES'; if Name = 'bInformes' then CadenaAux := 'BT_INFORMES'; if Name = 'bContabilidad' then CadenaAux := 'BT_CONTABILIDAD'; if Name = 'bOpciones' then CadenaAux := 'BT_OPCIONES'; if Name = 'bSincronizacion' then CadenaAux := 'BT_SINCRONIZACION'; ImagenPNG := GetResourceAsPNG(CadenaAux); Options.EnabledPicture.Assign(ImagenPNG); ImagenPNG.Free; ImagenPNG := GetResourceAsPNG(CadenaAux + '_HOT'); Options.HotPicture.Assign(ImagenPNG); Options.UpPicture.Assign(ImagenPNG); ImagenPNG.Free; ImagenPNG := GetResourceAsPNG(CadenaAux + '_CLICK'); Options.DownPicture.Assign(ImagenPNG); ImagenPNG.Free; ImagenPNG := GetResourceAsPNG(CadenaAux + '_DISABLED'); Options.DisabledPicture.Assign(ImagenPNG); ImagenPNG.Free; if Enabled then Picture.Assign(Options.EnabledPicture) else Picture.Assign(Options.DisabledPicture); end; if Objeto.Controls[i].Name = 'imgFondo' then begin ImagenPNG := GetResourceAsPNG('WP_FONDO'); try (Objeto.Controls[i] as TImage).Picture.Assign(ImagenPNG); finally ImagenPNG.Free; end; end; if Objeto.Controls[i].Name = 'pnlBarraSuperior' then begin with Objeto.Controls[i] as TRdxGradientePanel do begin BackGroundEffect := bdDown; ColorStart := DarColorEntidad('barraprincipal', 'ToolbarColor2'); ColorEnd := DarColorEntidad('barraprincipal', 'ToolbarColor1'); end; end; if csAcceptsControls in Objeto.Controls[i].ControlStyle then ConfigurarVentanaPrincipal(Objeto.Controls[i] as TWinControl) end; end; function PuedeSincronizar : boolean; var Outlook: TOutlookApplication; DLLHandle: THandle; begin Result := False; try Outlook := TOutlookApplication.Create(nil); try Outlook.Connect; Outlook.Disconnect; DLLHandle := LoadLibrary('RAPI.DLL'); if DLLHandle > 32 then Result := True; finally Outlook.Free; end; except // No hay outlook instalado Result := False; end; end; constructor TdmConfiguracion.Create(AOwner: TComponent); begin inherited; ListaBD := TStringList.Create; end; destructor TdmConfiguracion.Destroy; begin if ListaBD <> NIL then ListaBD.Free; inherited; end; function LeerConfiguracion: boolean; var Fichero : String; i : Integer; begin Fichero := ExtractFileDir(ParamStr(0))+ '\' + FICHERO_CONFIGURACION; if not FileExists(Fichero) then begin VerMensajeFmt('No se ha encontrado el fichero de configuración' + #10#13 + '%s', [Fichero]); Result := False; Exit; end; with TIniFile.Create(Fichero) do begin ListaBD.Clear; ReadSectionValues('BD', ListaBD); Result := not (ListaBD.Count = 0); Free; end; // Leer Colores; Fichero := ExtractFileDir(ParamStr(0))+ '\' + FICHERO_COLORES; if not FileExists(Fichero) then begin VerMensajeFmt('No se ha encontrado el fichero de configuración de colores' + #10#13 + '%s', [Fichero]); Result := False; exit; end; with TIniFile.Create(Fichero) do begin FColores := TStringList.Create; ReadSections(FColores); if FColores.Count = 0 then Result := False; for i := 0 to FColores.Count - 1 do begin FColores.Objects[i] := TStringList.Create; ReadSectionValues(FColores.Strings[i], TStringList(FColores.Objects[i])); end; with dmConfiguracion.amSkinPrincipal.Colors do begin Menu := DarColorEntidad('barraprincipal', 'ToolbarColor2'); end; Free; end; end; end.