Cassic

Primeiro Componente

Autor: Tadeu Pereira


  O componente que iremos criar será do tipo não visual, ele terá algumas propriedades e um método para simular a tela de diálogo MessageDlg.  Caso tenha algum projeto aberto feche, em seguida clique no menu Componet > New VCL Component (Figura 1).


Figura 1 – Menu New VCL Component

  No primeiro passo do Wizard de criação de componente (Figura 2) escolha a opção VCL for Delphi Win32 e clique no botão Next.


Figura 2 – Opção VCL for Delphi Win32

  Agora o Wizard está pedindo o componente ancestral, em outras palavras, o componente que dará origem ao nosso novo componente.  Escolha a opção TComponent (Figura 3) e em seguida clique em Next.


Figura 3 – Escolha do componente ancestral

  Neste ponto (Figura 4) informe o nome da nova classe (Class Name) como TMensagemDLG. A guia da Tool Palette que o componente ficará (Pallete Page) terá o nome de CursoDelphi e o nome da Unit que conterá o código fonte do nosso componente (Unit File Name) será "MensagemDLG.pas". Clique no botão Next.


Figura 4 – Dados do componente

  Na ultima janela (Figura 5) apenas clique no botão Finish.


Figura 5 – Finalizando o Wizard

  Neste ponto o BDS nos abre o Code Editor já com algum código implementado. Inclua os códigos em negrito da listagem abaixo e depois pressione Ctrl+Shift+C:

01
unit MensagemDLG;
02
 
03
interface
04
 
05
uses
06
  SysUtils, Classes, Forms, Dialogs, StdCtrls, Controls;
07
 
08
type
09
  TMensagemDLG = class(TComponent)
10
  Private
11
      { Private declarations }
12
  Protected
13
      { Protected declarations }
14
  Public
15
      { Public declarations }
16
      constructor Create(AOwner: TComponent); override;
17
      destructor Destroy; override;
18
      function MostrarMsg: Integer;
19
  published
20
      { Published declarations }
21
      property Titulo: string;
22
      property Msg: string;
23
      property DLGTipo: TMsgDlgType;
24
      property Botoes: TMsgDlgButtons;
25
      property TituloPadrao: Boolean;
26
  end;
27
 
28
procedure Register;
29
 
30
implementation
31
 
32
procedure Register;
33
begin
34
  RegisterComponents('CursoDelphi', [TMensagemDLG]);
35
end;
36
 
37
end.

     No método MostrarMsg entre com o código abaixo e salve tudo:

01
function TMensagemDLG.MostrarMsg: Integer;
02
var
03
  Cont: Integer;
04
  CaptionForm: string;
05
  FrmMsg: TForm;
06
begin
07
  if not( FTituloPadrao ) and ( Trim(FTitulo) <> '' )
08
      then CaptionForm := FTitulo
09
  else
10
      begin
11
          case FDLGTipo of
12
              mtWarning: CaptionForm := 'Cuidado';
13
              mtError: CaptionForm := 'Erro';
14
              mtInformation: CaptionForm := 'Informação';
15
              mtConfirmation: CaptionForm := 'Confirmação';
16
              mtCustom: CaptionForm := Application.Title;
17
          end;
18
      end;
19
  FrmMsg := CreateMessageDialog(FMsg, FDLGTipo, FBotoes);
20
  try
21
      for Cont := 0 to FrmMsg.ComponentCount - 1 do
22
          begin
23
              if ( FrmMsg.Components[Cont] is TButton ) then
24
                  begin
25
                      with TButton(FrmMsg.Components[Cont]) do
26
                          begin
27
                              case ModalResult of
28
                                  mrYes: Caption := 'Sim';
29
                                  mrNo: Caption := 'Não';
30
                                  mrOk: Caption := 'Ok';
31
                                  mrCancel: Caption := 'Cancelar';
32
                                  mrAbort: Caption := 'Abortar';
33
                                  mrRetry: Caption := 'Desfazer';
34
                                  mrIgnore: Caption := 'Ignorar';
35
                                  mrAll: Caption := 'Todos';
36
                                  mrNoToAll: Caption := 'Não para todos';
37
                                  mrYesToAll: Caption := 'Sim para todos';
38
                              end;
39
                          end;
40
                  end;
41
          end;
42
      FrmMsg.Caption := CaptionForm;
43
      Result := FrmMsg.ShowModal;
44
  finally
45
      FrmMsg.Free;
46
  end;
47
end;