unit uPantallaPrincipal; interface uses Windows, Forms, SysUtils, Messages, JvMenus, Menus, Graphics, AppEvnts, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase, JvNavigationPane, ImgList, Controls, PngImageList, Classes, ActnList, XPMan, TBXStatusBars, JvXPCore, JvXPContainer, pngimage, ExtCtrls, StdCtrls, JvPageList, JvExControls, JvExExtCtrls, JvSplitter, JvSyncSplitter, TBXDkPanels, uCustomEditor, uHostManager, uEmpresasController, uGUIBase, Dialogs; type IMainForm = interface(IHostForm) ['{56FCE1D7-E163-4A36-A468-A6324A4E3911}'] function GetEmpresasController : IEmpresasController; property EmpresasController : IEmpresasController read GetEmpresasController; procedure ReleaseEmbedded; end; TfPantallaPrincipal = class(TForm, IHostForm, IMainForm) GeneralActionList: TActionList; ModulesSmallImageList: TPngImageList; XPManifest1: TXPManifest; actSalir: TAction; ModulesActionList: TActionList; ModulesLargeImageList: TPngImageList; pnlContenido: TTBXAlignmentPanel; JvNavigationPane: TJvNavigationPane; pnlMain: TTBXAlignmentPanel; JvSyncSplitter1: TJvSyncSplitter; HostManager: THostManager; actLogin: TAction; StyleManagerButtons: TJvNavPaneStyleManager; JvFormStorage: TJvFormStorage; JvAppRegistryStorage: TJvAppRegistryStorage; actAdministracion: TAction; ApplicationEvents: TApplicationEvents; actCambiarPass: TAction; actConexion: TAction; actAcerca: TAction; pnlBorde: TJvXPContainer; HostMenu: TJvMainMenu; JvXPMenuItemPainter1: TJvXPMenuItemPainter; Archivo2_OLD: TMenuItem; Ayuda2_OLD: TMenuItem; Cambiarmicontrasea2_OLD: TMenuItem; N3_OLD: TMenuItem; Configurarconexin2_OLD: TMenuItem; Paneldeadministracin2_OLD: TMenuItem; N4_OLD: TMenuItem; Salir2_OLD: TMenuItem; Acercade2_OLD: TMenuItem; lblBienvenido: TLabel; Label22: TLabel; TBXStatusBar1: TTBXStatusBar; StatusPanelImageList: TPngImageList; Empresa1_OLD: TMenuItem; Listadeempresas1_OLD: TMenuItem; N1_OLD: TMenuItem; Opciones1_OLD: TMenuItem; Edicin1_OLD: TMenuItem; N1: TMenuItem; Compras1: TMenuItem; Ventas1: TMenuItem; actMenuCompras: TAction; actLogisticaMenu: TAction; actVentasMenu: TAction; Logstica1: TMenuItem; pagInicio: TJvNavPanelPage; Panel1: TPanel; Label1: TLabel; Image1: TImage; actActualizaciones: TAction; Configuraractualizaciones1: TMenuItem; actVerPanel: TAction; actVerBarraEstado: TAction; Paneldeexploracin1: TMenuItem; Paneldeexploracin2: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure HostManagerAfterLoad(Sender: TObject; AModuleInfo: TModuleInfo); procedure Salir1Click(Sender: TObject); procedure actSalirExecute(Sender: TObject); procedure actLoginExecute(Sender: TObject); procedure actCambiarPassExecute(Sender: TObject); procedure actAcercaExecute(Sender: TObject); procedure actConexionExecute(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure JvNavigationPaneChange(Sender: TObject); procedure ApplicationEventsException(Sender: TObject; E: Exception); procedure actMenuComprasExecute(Sender: TObject); procedure actMenuComprasUpdate(Sender: TObject); procedure actLogisticaMenuExecute(Sender: TObject); procedure actVentasMenuExecute(Sender: TObject); procedure actActualizacionesExecute(Sender: TObject); procedure actVerPanelUpdate(Sender: TObject); procedure actVerPanelExecute(Sender: TObject); procedure actVerBarraEstadoUpdate(Sender: TObject); procedure actVerBarraEstadoExecute(Sender: TObject); private FContenido : TCustomEditor; FEmpresasController : IEmpresasController; procedure ShowEmbedded(AEditor : ICustomEditor); procedure ReleaseEmbedded; procedure AplicarPerfil; procedure RefrescarUI; procedure InicializarUI; procedure CargarModulos; procedure OnThemeChange(Sender: TObject); procedure RegisterModule(AModuleInfo : TModuleInfo); procedure ExecuteActionMenu(Sender : TObject); procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND; protected function GetWorkPanel : TWinControl; function GetEmpresasController : IEmpresasController; procedure CreateParams(var Params: TCreateParams); override; public function IsShortcut(var Message: TWMKey): Boolean; override; procedure OnWorkPanelChanged(AEditor : ICustomEditor); constructor Create(AOwner: TComponent); override; property WorkPanel : TWinControl read GetWorkPanel; property EmpresasController : IEmpresasController read GetEmpresasController; end; var fPantallaPrincipal: TfPantallaPrincipal; implementation uses uDataModuleConexion, uModuleController, uDataModuleBase, Math, uMenuUtils, uSplash, uAcercaDe, UxTheme, Themes, uPluginEmpresas, uNavPaneController, uMainMenuController, uROSessions, FactuGES_Intf, uDialogUtils, uActualizacion, uROClient, cxControls; {$R *.dfm} {function OpenThemeData(hwnd: HWND; pszClassList: LPCWSTR): THandle; stdcall; external 'uxtheme.dll'; function CloseThemeData(hTheme: THandle): HRESULT; stdcall; external 'uxtheme.dll'; function DrawThemeBackground(hTheme: THandle; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT): HRESULT; stdcall; external 'uxtheme.dll';} { ***************************** TfPantallaPrincipal ****************************** } procedure TfPantallaPrincipal.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := True; if Assigned(FContenido) then CanClose := FContenido.CloseQuery; end; procedure TfPantallaPrincipal.FormCreate(Sender: TObject); begin ApplicationEvents.Activate; Caption := Application.Title + ' - ' + dmBase.DarVersion; SplashScreen := TSplashScreen.Create(Application) ; SplashScreen.Show; JvNavigationPane.StyleManager := dmBase.StyleManager; dmBase.OnThemeChange := Self.OnThemeChange; Self.OnThemeChange(Self); // Forzar el refresco de los colores del tema activo with HostManager do begin BPLPath := ExtractFilePath(Application.ExeName) + '\'; MainMenu := Self.Menu; MainForm := Self; OnAfterLoad := HostManagerAfterLoad; end; actLogin.Execute; end; procedure TfPantallaPrincipal.FormDestroy(Sender: TObject); begin // ReleaseEmbedded; HostManager.UnloadModules; ApplicationEvents.CancelDispatch; end; procedure TfPantallaPrincipal.HostManagerAfterLoad(Sender: TObject; AModuleInfo: TModuleInfo); begin RegisterModule(AModuleInfo); end; procedure TfPantallaPrincipal.RefrescarUI; var ATitulo : String; begin ATitulo := Application.Title + ' - ' + dmBase.DarVersion; // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO { if Assigned(dmUsuarios.EmpresaActual) then ATitulo := ATitulo + ' - ' + dmUsuarios.EmpresaActual.NOMBRE;} Caption := ATitulo; if dmConexion.HayConexion then TBXStatusBar1.Panels[0].Caption := 'Conectado a: ' + dmConexion.TargetURL else TBXStatusBar1.Panels[0].Caption := 'Desconectado'; // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO { if Assigned(dmUsuarios.LoginInfo) then TBXStatusBar1.Panels[1].Caption := dmUsuarios.LoginInfo.Usuario else} TBXStatusBar1.Panels[1].Caption := ''; end; procedure TfPantallaPrincipal.RegisterModule(AModuleInfo : TModuleInfo); var AModule: TModuleController; AEmpresasPlugin : IEmpresasPlugin; begin AModule := AModuleInfo.Module; SplashScreen.Texto := 'Cargando ''' + AModule.ModuleName + '''...'; if Supports(AModule, IEmpresasPlugin, AEmpresasPlugin) then FEmpresasController := AEmpresasPlugin.Controller; end; procedure TfPantallaPrincipal.ReleaseEmbedded; begin if Assigned(FContenido) then FContenido.Release; FContenido := Nil; Application.ProcessMessages; end; procedure TfPantallaPrincipal.Salir1Click(Sender: TObject); begin Close; end; procedure TfPantallaPrincipal.actSalirExecute(Sender: TObject); begin Close; end; procedure TfPantallaPrincipal.actVentasMenuExecute(Sender: TObject); begin // end; procedure TfPantallaPrincipal.actVerBarraEstadoExecute(Sender: TObject); begin TBXStatusBar1.Visible := not TBXStatusBar1.Visible; end; procedure TfPantallaPrincipal.actVerBarraEstadoUpdate(Sender: TObject); begin (Sender as TAction).Checked := TBXStatusBar1.Visible; end; procedure TfPantallaPrincipal.actVerPanelExecute(Sender: TObject); begin JvNavigationPane.Visible := not JvNavigationPane.Visible; if (JvNavigationPane.Visible) and (JvNavigationPane.Width = 0) then JvNavigationPane.Width := 210; end; procedure TfPantallaPrincipal.actVerPanelUpdate(Sender: TObject); begin (Sender as TAction).Checked := JvNavigationPane.Visible and (JvNavigationPane.Width > 0); end; procedure TfPantallaPrincipal.OnThemeChange(Sender: TObject); begin LockWindowUpdate(Handle); try Color := dmBase.StyleManager.Colors.DividerColorTo; //pnlBorde.Color := dmBase.StyleManager.Colors.FrameColor; pnlBorde.BoundColor := dmBase.StyleManager.Colors.FrameColor; with StyleManagerButtons do begin Colors.ButtonColorFrom := clWindow; Colors.ButtonColorTo := clWindow; Colors.ButtonSeparatorColor := clWindow; Colors.SplitterColorFrom := clWindow; Colors.SplitterColorTo := clWindow; Colors.DividerColorFrom := clWindow; Colors.DividerColorTo := clWindow; Colors.HeaderColorFrom := clWindow; Colors.HeaderColorTo := clWindow; Colors.FrameColor := clWindow; Colors.ToolPanelHeaderColorFrom := clWindow; Colors.ToolPanelHeaderColorTo := clWindow; Colors.ButtonHotColorFrom := dmBase.StyleManager.Colors.ButtonHotColorFrom; Colors.ButtonHotColorTo := dmBase.StyleManager.Colors.ButtonHotColorTo; Colors.ButtonSelectedColorFrom := dmBase.StyleManager.Colors.ButtonSelectedColorFrom; Colors.ButtonSelectedColorTo := dmBase.StyleManager.Colors.ButtonSelectedColorTo; end; lblBienvenido.Font.Color := JvNavigationPane.Colors.ButtonColorTo; { JvGradient1.StartColor := JvNavigationPane.Colors.ButtonColorFrom; JvGradient1.EndColor := JvNavigationPane.Colors.ButtonColorTo;} finally LockWindowUpdate(0); Refresh; end; end; function TfPantallaPrincipal.GetEmpresasController: IEmpresasController; begin Result := FEmpresasController; end; function TfPantallaPrincipal.GetWorkPanel: TWinControl; begin Result := pnlMain; end; procedure TfPantallaPrincipal.InicializarUI; var i : Integer; begin for i := 0 to HostManager.ModulesCount - 1 do MainMenuController.RegisterModule(HostManager.Modules[i]); MainMenuController.SortMenuByTag; MainMenuController.InitMainMenu; for i := 0 to HostManager.ModulesCount - 1 do NavPaneController.RegisterModule(HostManager.Modules[i]); NavPaneController.InitNavPane; // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO { if dmUsuarios.Empresas.Count = 1 then begin // Oculto la página de inicio para que no parezca // que se pueden manejar varias empresas. JvNavigationPane.ActivePageIndex := 1; pagInicio.PageList := NIL; pagInicio.Visible := False; end;} RefrescarUI; end; procedure TfPantallaPrincipal.actLoginExecute(Sender: TObject); begin HostManager.UnloadModules; // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO { if dmUsuarios.Login then begin ShowHourglassCursor; SplashScreen.Update; Application.ProcessMessages; CargarModulos; try InicializarUI; Application.ProcessMessages; Visible := True; AplicarPerfil; finally SplashScreen.Update; SplashScreen.Hide; FreeAndNIL(SplashScreen); HideHourglassCursor; end; end else Application.Terminate;} end; procedure TfPantallaPrincipal.actMenuComprasExecute(Sender: TObject); begin // end; procedure TfPantallaPrincipal.actMenuComprasUpdate(Sender: TObject); begin // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO // (Sender as TAction).Enabled := Assigned(dmUsuarios.EmpresaActual); end; procedure TfPantallaPrincipal.actLogisticaMenuExecute(Sender: TObject); begin // end; procedure TfPantallaPrincipal.ExecuteActionMenu(Sender: TObject); var i : integer; begin for i := 0 to JvNavigationPane.PageCount - 1 do begin if JvNavigationPane.NavPages[i].Caption = (Sender as TAction).Caption then begin JvNavigationPane.ActivePageIndex := i; Break; end; end; end; procedure TfPantallaPrincipal.AplicarPerfil; begin // end; procedure TfPantallaPrincipal.ApplicationEventsException(Sender: TObject; E: Exception); begin if E is EROSessionNotFound then begin // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO { if not dmUsuarios.Login then ShowMessage(E.Message);} end else ShowMessage(E.Message); //ShowErrorMessage('Se ha producido un error', '', E); end; procedure TfPantallaPrincipal.OnWorkPanelChanged(AEditor: ICustomEditor); begin // end; procedure TfPantallaPrincipal.ShowEmbedded(AEditor: ICustomEditor); begin if Assigned(FContenido) and not FContenido.CloseQuery then begin AEditor.Release; AEditor := NIL; Exit; end; ShowHourglassCursor; LockWindowUpdate(Handle); ReleaseEmbedded; try FContenido := TCustomEditor(AEditor.GetInstance); with (FContenido) do begin Visible := False; BorderIcons := []; BorderStyle := bsNone; Parent := WorkPanel; FContenido.Show; Align := alClient; FContenido.SetFocus; end; finally Application.ProcessMessages; LockWindowUpdate(0); HideHourglassCursor; end; OnWorkPanelChanged(FContenido); end; procedure TfPantallaPrincipal.WMSysCommand(var Msg: TMessage); begin //No tocar, sirve para recuperar el foco el formulario principal cuando // tenemos varios formularios hijos abiertos a la vez. DefaultHandler(Msg); end; procedure TfPantallaPrincipal.CargarModulos; begin HostManager.LoadModule('Empresas_plugin.bpl'); HostManager.LoadModule('FormasPago_plugin.bpl'); HostManager.LoadModule('TiposIVA_plugin.bpl'); // HostManager.LoadModule('Almacenes_plugin.bpl'); // HostManager.LoadModule('Familias_plugin.bpl'); // HostManager.LoadModule('Articulos_plugin.bpl'); // HostManager.LoadModule('Inventario_plugin.bpl'); //HostManager.LoadModule('Contactos_plugin.bpl'); // HostManager.LoadModule('RecibosCliente_plugin.bpl'); // HostManager.LoadModule('RemesasCliente_plugin.bpl'); // HostManager.LoadModule('FacturasCliente_plugin.bpl'); // HostManager.LoadModule('RecibosProveedor_plugin.bpl'); // HostManager.LoadModule('FacturasProveedor_plugin.bpl'); { HostManager.LoadModule('Presupuestos_plugin.bpl'); HostManager.LoadModule('Montajes_plugin.bpl'); HostManager.LoadModule('PedidosProveedor_plugin.bpl'); HostManager.LoadModule('PedidosCliente_plugin.bpl'); HostManager.LoadModule('AlbaranesProveedor_plugin.bpl'); HostManager.LoadModule('AlbaranesCliente_plugin.bpl'); HostManager.LoadModule('BancaElectronica_plugin.bpl'); HostManager.LoadModule('Comisiones_plugin.bpl'); HostManager.LoadModule('TiendaWeb_plugin.bpl'); HostManager.LoadModule('HistoricoMovimientos_plugin.bpl'); HostManager.LoadModule('RemesasProveedor_plugin.bpl'); HostManager.LoadModule('Referencias_plugin.bpl'); HostManager.LoadModule('Informes_plugin.bpl'); HostManager.LoadModule('InfVentasArticulo_plugin.bpl'); HostManager.LoadModule('InfMargenArticulo_plugin.bpl'); HostManager.LoadModule('PedidosMontaje_plugin.bpl'); HostManager.LoadModule('CobrosMontaje_plugin.bpl'); HostManager.LoadModule('MontajesDetalle_plugin.bpl'); HostManager.LoadModule('MontajesCompleto_plugin.bpl'); } end; constructor TfPantallaPrincipal.Create(AOwner: TComponent); begin inherited; FContenido := NIL; with NavPaneController do begin SmallImages := ModulesSmallImageList; LargeImages := ModulesLargeImageList; NavigationPane := JvNavigationPane; MainForm := Self; end; with MainMenuController do begin SmallImages := ModulesSmallImageList; LargeImages := ModulesLargeImageList; MainMenu := HostMenu; MainForm := Self; end; end; procedure TfPantallaPrincipal.CreateParams(var Params: TCreateParams); begin // ˇˇˇFallo en Delphi 2007!!! // Cambio los paramátros para obligar a que aparezca el icono en la barra de tareas. inherited CreateParams(Params); with Params do begin ExStyle := ExStyle or WS_EX_APPWINDOW; WndParent := GetDesktopwindow; end; end; procedure TfPantallaPrincipal.actActualizacionesExecute(Sender: TObject); begin fActualizacion := TfActualizacion.Create(Self); try fActualizacion.ShowModal; finally FreeAndNil(fActualizacion); end; end; procedure TfPantallaPrincipal.actCambiarPassExecute(Sender: TObject); begin // dmUsuarios.CambiarPassword; RefrescarUI; end; procedure TfPantallaPrincipal.actAcercaExecute(Sender: TObject); begin with TfAcercaDe.Create(NIL) do try HostManager := Self.HostManager; ShowModal; finally Free; end; end; function TfPantallaPrincipal.IsShortcut(var Message: TWMKey): Boolean; Var ctrl: TWinControl; comp: TComponent; i: Integer; Begin ctrl := ActiveControl; If ctrl <> Nil Then Begin Repeat ctrl := ctrl.Parent Until (ctrl = nil) or (ctrl Is TCustomForm); // Note: replace TCustomFrame with TForm, check if the found form is // self, if not, execute the following block of code. If ctrl <> nil Then Begin For i:= 0 To ctrl.componentcount-1 Do Begin comp:= ctrl.Components[i]; If comp Is TCustomActionList Then Begin result := TCustomActionList(comp).IsShortcut( message ); If result Then Exit; End; End; End; End; //Result := inherited IsShortCut(Message); end; procedure TfPantallaPrincipal.JvNavigationPaneChange(Sender: TObject); begin { Cuando se destruye el formulario este evento salta pero no hay que cambiar de empresa } if (csDestroying in ComponentState) then Exit; //Se libera el contenido que tenga ya que cambiamos de empresa; ReleaseEmbedded; // OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO //dmUsuarios.IDEmpresaActual := JvNavigationPane.ActivePage.Tag; RefrescarUI; end; procedure TfPantallaPrincipal.actConexionExecute(Sender: TObject); begin dmConexion.ConfigurarConexion; RefrescarUI; end; end.