Primeiro Componente
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; |