unit aqVCL.Comp.DesktopAlert; interface uses System.Classes, System.SysUtils, Vcl.Graphics, Winapi.Windows, JvDesktopAlert, JvDesktopAlertForm, aqVCL.Classes.Dialogs, aqVCL.Classes.Padrao; type TaqDesktopAlertTipo = (Custom, Informacao, Alerta, Erro); TaqDesktopAlertCores = (WindowFrom, WindowTo, CaptionFrom, CaptionTo, Frame, Font); TaqDesktopAlert = class(TJvDesktopAlert) private FTipo: TaqDesktopAlertTipo; FMensagem: String; FMensagemDialog: String; FListaDetalhes: TaqDialogListaDetalhes; FDetalhes: String; FErro: Exception; FLinhas: Integer; protected procedure AtualizarTamanho(); procedure SetMensagem(const Value: String); procedure SetLinhas(const Value: Integer); public constructor Create(AOwner: TComponent); override; function Execute(ParentWnd: HWND): Boolean; override; property Mensagem: String read FMensagem write SetMensagem; property MensagemDialog: String read FMensagemDialog write FMensagemDialog; property ListaDetalhes: TaqDialogListaDetalhes read FListaDetalhes write FListaDetalhes; property Detalhes: String read FDetalhes write FDetalhes; property Erro: Exception read FErro write FErro; property Linhas: Integer read FLinhas write SetLinhas; published property Tipo: TaqDesktopAlertTipo read FTipo write FTipo default TaqDesktopAlertTipo.Custom; end; implementation uses aq.Uteis.Enum, aq.Uteis.Str, aqVCL.Uteis.Graphics; { TaqDesktopAlert } constructor TaqDesktopAlert.Create(AOwner: TComponent); begin inherited; FTipo := TaqDesktopAlertTipo.Custom; FDetalhes := ''; FErro := nil; FLinhas := 1; end; function TaqDesktopAlert.Execute(ParentWnd: HWND): Boolean; function GetCorPadrao(pPropriedade: String): TColor; begin result := aqPadrao.GetInstancia.GetCor(Self.ClassName, aqEnum.GetNome(FTipo) + '.' + pPropriedade); end; begin AtualizarTamanho(); if (FTipo <> TaqDesktopAlertTipo.Custom) then begin Colors.WindowFrom := GetCorPadrao('Colors.WindowFrom'); Colors.WindowTo := GetCorPadrao('Colors.WindowTo'); Colors.CaptionFrom := GetCorPadrao('Colors.CaptionFrom'); Colors.CaptionTo := GetCorPadrao('Colors.CaptionTo'); Colors.Frame := GetCorPadrao('Colors.Frame'); Font.Color := GetCorPadrao('Font.Color'); end; result := inherited; end; procedure TaqDesktopAlert.AtualizarTamanho(); var tamanhoLinha, linhas: Integer; function GetLabelTextWidth(): Integer; const MARGINLEFTTEXTO = 50; begin result := cDefaultAlertFormWidth - TJvFormDesktopAlert(Form).lblText.Left - MARGINLEFTTEXTO; end; begin linhas := FLinhas; if (Assigned(Form) and (Form is TJvFormDesktopAlert)) then begin TJvFormDesktopAlert(Form).lblText.HotTrackFont.Color := TJvFormDesktopAlert(Form).lblText.Font.Color; if ((not aqS.Contem(Mensagem, aqS.LB)) and (aqG.GetTextWidth(Mensagem, Font) < GetLabelTextWidth())) then linhas := 1; end; tamanhoLinha := aqG.GetTextHeight(Font); Location.Height := cDefaultAlertFormHeight + (tamanhoLinha * (linhas - 1)) + 1; end; procedure TaqDesktopAlert.SetMensagem(const Value: String); begin if (aqS.IsIgual(FMensagem, Value)) then exit; FMensagem := Value; MessageText := FMensagem; end; procedure TaqDesktopAlert.SetLinhas(const Value: Integer); begin if (FLinhas = Value) then exit; FLinhas := Value; if (FLinhas <= 0) then FLinhas := 1; end; initialization aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Colors.WindowFrom', $00F7E8D9); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Colors.WindowTo', $00F7E8D9); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Colors.CaptionFrom', $00D68652); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Colors.CaptionTo', $00D68652); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Colors.Frame', $00943000); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Font.Color', clWindowText); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Alerta.Colors.WindowFrom', $00D9E8F7); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Alerta.Colors.WindowTo', $00D9E8F7); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Alerta.Colors.CaptionFrom', $0041B3FE); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Alerta.Colors.CaptionTo', $0041B3FE); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Alerta.Colors.Frame', $00943000); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Font.Color', clWindowText); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Erro.Colors.WindowFrom', $00d9d9f7); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Erro.Colors.WindowTo', $00d9d9f7); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Erro.Colors.CaptionFrom', $008080FF); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Erro.Colors.CaptionTo', $008080FF); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Erro.Colors.Frame', $00943000); aqPadrao.GetInstancia().SetCor('TaqDesktopAlert', 'Informacao.Font.Color', clWindowText); end.