codigo fontes e truques ultilitários para o delphi 7

30
Codigo Fontes e Truques Ultilitários para o Delphi 7 Converter Path e nome de Arquivos longos para curtos procedure TForm1.Button1Click(Sender: TObject); var Buffer : array [0..255] of char; begin GetShortPathName('C:\Arquivos de programas\Borland\Common Files\BDE\Bde32.hlp',@Buffer,sizeof(Buffer)); Memo1.Lines.Add(Buffer); end; Como verificar se o ano é Bisexto A função para verificar se o ano é bissexto é a IsLeapYear ( year : Word) : Boolean; Que retornará TRUE se o ano informado no parâmetro for bissexto.

Upload: nubia-britto

Post on 02-Dec-2014

709 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: Codigo Fontes e Truques Ultilitários para o Delphi 7

Codigo Fontes e Truques Ultilitários para o Delphi 7

Converter Path e nome de Arquivos longos para curtos 

procedure TForm1.Button1Click(Sender: TObject);varBuffer : array [0..255] of char;beginGetShortPathName('C:\Arquivos de programas\Borland\Common Files\BDE\Bde32.hlp',@Buffer,sizeof(Buffer));Memo1.Lines.Add(Buffer);end; 

 

 

Como verificar se o ano é Bisexto 

A função para verificar se o ano é bissexto é a IsLeapYear ( year : Word) : Boolean;Que retornará TRUE se o ano informado no parâmetro for bissexto.

 

Impedir que o usuário mude de página no TabbedNotebook 

Page 2: Codigo Fontes e Truques Ultilitários para o Delphi 7

No evento OnChange do TabbedNotebook coloque :

AllowChange := False; 

 

 

Criar janela redonda 

No OnCreate do Form coloque

VarHr : Thandle;Begin{ Cria uma Região elíptica }Hr := CreateEllipticRgn(0,0,100,200);SetWindowRgn(Handle, hr, true);End;

 

 

Detectar finalização do Windows 

Procedure TForm1.WMEndsession ( var Msg : TWMEndSession);

Page 3: Codigo Fontes e Truques Ultilitários para o Delphi 7

BeginIf Msg.Endsession = True thenShowmessage('O windows está finalizando ' + #13 + 'às' + Formatdatetime('c',Now);Inherited;End;

 

 

Exibir ano com 4 Dígitos 

No evento OnCreate do Formulário Principal coloque a clásula

SHORTDATEFORMAT:= 'dd/mm/yyyy'; 

 

 

Listar todas as janelas abertas 

Para listar todas janelas abertas, deve-se usar a funcao da API EnumWindows, que usa uma funcao Callback, comdois parâmetros, um Handle para a janela e um ponteiro. Voce pode usá-la com um código semelhante a este (Estelista as janelas abertas, mesmo invisíveis, em uma listbox): 

function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean; Export; {$ifdef

Page 4: Codigo Fontes e Truques Ultilitários para o Delphi 7

Win32} StdCall; {$endif} var Buffer : Array[0..99] of char; begin GetWindowText(Wnd,Buffer,100); if StrLen(Buffer) <> 0 then Form.ListBox1.Items.Add(StrPas(Buffer)); Result := True; end; 

procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumWindowsProc,LongInt(Self)); end; 

 

Alterar Fonte do Hint 

Para testar este exemplo inclua no seu form alguns componentes. Nestes componentes coloque informações napropriedade Hint de cada componente e altere a propriedade ShowHint para True.

unit Unit1;

interface

usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;

typeTForm1 = class(TForm)Edit1: TEdit;Edit2: TEdit;Edit3: TEdit;procedure FormCreate(Sender: TObject);private{ Private declarations }

Page 5: Codigo Fontes e Truques Ultilitários para o Delphi 7

public{ Public declarations }procedure MyShowHint(var HintStr: string;var CanShow: Boolean;var HintInfo: THintInfo);end;

varForm1: TForm1;

implementation

{$R *.DFM}

// Função que irá alterar a fonte do Hintprocedure TForm1.MyShowHint(var HintStr: string;var CanShow: Boolean;var HintInfo: THintInfo);var i : integer;beginfor i := 0 to Application.ComponentCount - 1 doif Application.Components[i] is THintWindow thenwith THintWindow(Application.Components[i]).Canvas dobeginFont.Name := 'Arial';Font.Size := 18;Font.Style := [fsBold];HintInfo.HintColor := clWhite;end;end;

// Evento OnCreate do Formprocedure TForm1.FormCreate(Sender: TObject);begin// Ativa a função que irá alterar o formato do HintApplication.OnShowHint := MyShowHint;end; 

 

 

Mostrar Hint independente para cada célula da Stringgrid 

Page 6: Codigo Fontes e Truques Ultilitários para o Delphi 7

Para testar o exemplo abaixo inclua no seu form um componente StringGrid

unit Unit1;

interface

usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Grids;

typeTForm1 = class(TForm)StringGrid1: TStringGrid;procedure FormCreate(Sender: TObject);procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);private{ Private declarations }public{ Public declarations }Col : integer; // Declarar esta variávelRow : integer; // Declarar esta variávelend;

varForm1: TForm1;

implementation

{$R *.DFM}

// Evento OnCreate do Formprocedure TForm1.FormCreate(Sender: TObject);beginStringGrid1.Hint := '0 0';StringGrid1.ShowHint := True;end;

// Evento OnMouseMove do componente StringGridprocedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer);varr : integer;c : integer;beginStringGrid1.MouseToCell(X, Y, C, R);if ((Row <> r) or (Col <> c)) then

Page 7: Codigo Fontes e Truques Ultilitários para o Delphi 7

beginRow := r; Col := c;Application.CancelHint;StringGrid1.Hint := 'Linha: '+IntToStr(r) + #32 + 'Coluna: '+IntToStr(c);end;end; 

 

Arrastar Form sem clicar na Barra de Título 

private{ Private declarations }procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM} 

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);begininherited; { Chama o manipulador de mensagem herdado }if M.Result = htClient then { Verifica se está na area cliente do Form }M.Result := htCaption; { Neste caso faz o Windows pensar que está na barra de Título. }end; 

 

 

Page 8: Codigo Fontes e Truques Ultilitários para o Delphi 7

 

Escrevendo texto na Diagonal 

procedure TForm1.Button2Click(Sender: TObject);varlf : TLogFont;tf : TFont;beginwith Form1.Canvas dobeginFont.Name := 'Arial';Font.Size := 15;tf := TFont.Create;tf.Assign(Font);GetObject(tf.Handle, sizeof(lf), @lf);lf.lfEscapement := 300;lf.lfOrientation := 300;tf.Handle := CreateFontIndirect(lf);Font.Assign(tf);tf.Free;TextOut(20, Height div 2,'Exemplo de texto');end;end; 

 

 

Fazendo o Enter funcionar como Tab 

Para dar ao Enter a funcionalidade do Tab (ou seja, passar ao componente seguinte), digite a seguinte rotina noevento OnKeyPress do form: 

Page 9: Codigo Fontes e Truques Ultilitários para o Delphi 7

procedure TNomeDoForm.NomeDoFormKeyPress(Sender: TObject; var Key: Char); begin if key = #13 then begin key := #0; perform (WM_NextDlgCtl, 0, 0); end; end; 

Em seguida coloque a propriedade KeyPriview do Form = TRUE e certifique-se que todos os botões do Formestejam com a propriedade Default = FALSE.

 

 

Criar tela Splash 

Para criar um form inicial, como o form de entrada do Word, primeiramente vá em Project|Options e remova o nomedo form inicial (clique no nome do form e clique em ">"). Depois, vá em View|Project Source e antes do primeiroApplication.CreateForm (NomeDoForm...), digite: frmSplash := TfrmSplash.Create (Application); frmSplash.Show; frmSplash.Update; 

E para remover o form da memória, digite após o último CreateForm: 

frmSplash.Free; 

Nota: não se esqueça de alterar a propriedade BorderStyle para bsNone, e Position para poScreenCenter

 

Page 10: Codigo Fontes e Truques Ultilitários para o Delphi 7

 

 

Alterando Fonte de determinado registro no DBGrid 

Para trocar a fonte de um DBGrid, utilize a rotina abaixo no evento OnDrawDataCell: 

if Tabela.FieldByName ('Salario').Value >= 10000 then begin DbGrid1.Canvas.Font.Color := clRed; DbGrid1.Canvas.Font.Style := [fsBold]; end; DbGrid1.DefaultDrawDataCell(Rect, Field, State); 

No caso, somente os registros com salário maior que R$ 10.000,00 ficarão com cor vermelha e em negrito. 

Nota: Não é necessário mover o ponteiro da tabela para colorir os registros. 

 

 

Trocar ponto por Vírgula 

A maioria dos teclados possui apenas o ponto no teclado numérico. Mas se você precisar utilizar a vírgula comoseparador decimal, utilize a seguinte rotina no evento OnKeyPress do Edit: (lembre-se que DecimalSeparatorcontém o separador decimal (que não necessariamente está em português). Veja em Internacional no Painel de

Page 11: Codigo Fontes e Truques Ultilitários para o Delphi 7

Controle). begin if key = '.' then key:= DecimalSeparator; end; 

 

 

 

Descobrir posição do cursor em um Memo 

Para descobrir a linha e a coluna atuais de um componente TMemo, utilize a seguinte procedure:

with Memo do begin Linha := Perform (EM_LINEFROMCHAR, SelStart, 0); Coluna := SelStart - Perform (EM_LINEINDEX, Line, 0); end; 

 

 

Limpar todos os Edits de um Form 

Page 12: Codigo Fontes e Truques Ultilitários para o Delphi 7

Para limpar todos os Edits de um form, use a seguinte rotina: 

procedure TNomeDoForm.NomeDoBotaoClick(Sender: TObject); var I : integer; begin for I := 0 to ComponentCount - 1 do if (Components [I] is TEdit) then (Components [I] as TEdit).Clear; end; 

Para fazer qualquer operação em outro tipo de objeto, é só trocar TEdit pelo tipo de componente que você quermanipular. 

 

Trocar cursor do mouse 

Existem vários cursores no Delphi (crDefault é o cursor padrão, crHourGlass é a ampulheta, crHandPoint é a"mãozinha", etc). Para alterá-lo, basta escolher um na propriedade Cursor do componente em que você quermudar o cursor (troque no form para trocar o do form inteiro). Mas, se você quiser colocar um cursor diferente,siga os procedimentos abaixo: Na seção interface da unit que contém o form, coloque as seguintes linhas: 

const crSeuCursor = 1; // Tem que ser um valor maior que 0 (zero) 

No evento OnCreate do form, digite as seguintes linhas: 

Screen.Cursors [crSeuCursor] := LoadCursorFromFile ('Cursor.ani'); // O cursor pode ser dos tipos comum (*.cur) ou animado (*.ani) // Lembre-se: o arquivo tem que estar na mesma pasta do programa // ou digite o nome do caminho dele. 

Page 13: Codigo Fontes e Truques Ultilitários para o Delphi 7

Na hora de trocar de cursor, use o seguinte comando: 

Objeto.Cursor := crSeuCursor; 

onde Objeto é o nome do objeto que vai ter o cursor alterado (o form, por exemplo). 

 

 

 

Extrair primeiro nome de uma pessoa 

Para pegar o primeiro nome de uma pessoa, crie a seguinte função: 

function PrimeiroNome (Nome : String) : String; var PNome : String; begin PNome := ''; if pos (' ', Nome) <> 0 then PNome := copy (Nome, 1, pos (' ', Nome) - 1); Result := PNome; end; 

 

 

Descobrir qual Ícone foi selecionado no List View 

Page 14: Codigo Fontes e Truques Ultilitários para o Delphi 7

Indice := ListView.Selected.Index; 

Lembre-se que o primeiro item possui índice igual a 0 (zero), o segundo vale 1, etc. Se quiser descobrir o rótulo (otexto que fica abaixo do ícone), troque Index por Caption, assim: 

Rotulo := ListView.Selected.Caption; 

 

 

Criar atalho no Desktop 

Coloque essas units na seção implementation : 

uses ShlObj, ActiveX,ComObj, Registry; Por último, crie uma procedure que faça o trabalho: procedure CreateShortcut (FileName, Parameters, InitialDir, ShortcutName, ShortcutFolder : String); var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; with MySLink do begin SetArguments(Parameters); SetPath(PChar(FileName)); SetWorkingDirectory(PChar(InitialDir)); 

Page 15: Codigo Fontes e Truques Ultilitários para o Delphi 7

end; MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer'); Directory := MyReg.ReadString ('Shell Folders','Desktop',''); WFileName := Directory + '\' + ShortcutName + '.lnk'; MyPFile.Save (PWChar (WFileName), False); MyReg.Free; end;

 

 

Criar atalho no menu Iniciar 

Para criar um atalho para um programa, primeiramente coloque essas units na seção implementation de seu form: uses ShlObj, ActiveX, ComObj, Registry; 

Por último, crie uma procedure que faça o trabalho: 

procedure CreateShortcut (FileName, Parameters, InitialDir, ShortcutName, ShortcutFolder : String); var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; with MySLink do begin SetArguments(Parameters); SetPath(PChar(FileName)); SetWorkingDirectory(PChar(InitialDir)); end; 

Page 16: Codigo Fontes e Truques Ultilitários para o Delphi 7

MyReg := TRegIniFile.Create ('Software\MicroSoft\Windows\CurrentVersion\Explorer'); Directory := MyReg.ReadString('Shell Folders','Start Menu','') + '\' + ShortcutFolder; CreateDir(Directory); WFileName := Directory + '\' + ShortcutName + '.lnk'; MyPFile.Save (PWChar (WFileName), False); MyReg.Free; end; 

 

 

Mudando texto do TEdit no OnChange 

Se o texto de um TEdit for mudado no seu evento OnChange, este evento será chamado recursivamente atéacabar com o espaço de pilha. Para fazer isso, deve-se setar o evento OnChange para NIL antes de mudar o texto,voltando ao original depois, desta maneira:

procedure Edit1Change(Sender : TObject); begin Edit1.OnChange := NIL; if Edit1.Text = 'Texto' then Edit1.Text := 'Novo Texto'; Edit1.OnChange := Edit1Change; end;

Esta dica também vale para evento OnValidate. 

 

 

Page 17: Codigo Fontes e Truques Ultilitários para o Delphi 7

Encolhendo o executável 

Em Delphi 1.0, marcando a checkbox Optimize for size and load time, em Options/Project/Linker não funciona(aparece uma mensagem de disco cheio, mesmo com muito espaço). Delphi 1.0 vem com um programa DOS,W8LOSS, que faz o mesmo. Para usá-lo, deve-se teclar o seguinte:

W8LOSS programa.exe

Isto encolherá o executável em aproximadamente 20%, diminuindo o tempo de carga. 

 

 

Posicionando cursor na linha de um Memo ou Richedit 

Para posicionar o cursor em uma linha de um Memo ou RichEdit, deve-se utilizar o seguinte:

With Memo1 do SelStart := Perform(EM_LINEINDEX, Linha, 0); 

 

 

 

Page 18: Codigo Fontes e Truques Ultilitários para o Delphi 7

Escondendo janelas filhas minimizadas 

Para esconder janelas filhas minimizadas, basta capturar a mensagem WM_Size, desta maneira: 

type TForm1 = class(TForm) public procedure WMSize(var M : TWMSIZE);Message WM_Size; end; 

implementation 

procedure TForm1.WMSize(var M:TWMSIZE); begin if M.SizeType=Size_Minimized then showwindow(Handle,Sw_Hide); end; 

 

 

Executando operações padrão de um Ole Container 

Para executar ações padrão de um Ole Container (abrir um documento Word ou Excel ou rodar uma apresentaçãoPowerpoint), pode-se usar este código: 

procedure TForm1.Button1Click(Sender: TObject); begin OleContainer1.DoVerb(ovprimary); end; 

Page 19: Codigo Fontes e Truques Ultilitários para o Delphi 7

 

 

Alinhar Itens do menu principal à direita 

Para alinhar itens do menu principal à direita, deve-se utilizar o seguinte código:

{Isto justifica todos itens à direita do selecionado} 

procedure SetJustify(Menu: TMenu; MenuItem: TMenuItem; Justify: Byte); {$IFDEF WIN32} var ItemInfo: TMenuItemInfo; Buffer: array[0..80] of Char; {$ENDIF} begin {$IFDEF VER80} MenuItem.Caption := Chr(8) + MenuItem.Caption; {$ELSE} ItemInfo.cbSize := SizeOf(TMenuItemInfo); ItemInfo.fMask := MIIM_TYPE; ItemInfo.dwTypeData := Buffer; ItemInfo.cch := SizeOf(Buffer); GetMenuItemInfo(Menu.Handle, MenuItem.Command, False, ItemInfo); if Justify = 1 then ItemInfo.fType := ItemInfo.fType or MFT_RIGHTJUSTIFY; SetMenuItemInfo(Menu.Handle, MenuItem.Command, False, ItemInfo); {$ENDIF} end; 

 

Usando JPG no Delphi 3 

Page 20: Codigo Fontes e Truques Ultilitários para o Delphi 7

Para colocar um arquivo qualquer dentro de um arquivo .exe, primeiramente crie um arquivocom extensão .rc no Bloco de Notas. O formato de um arquivo .rc é o seguinte: 

1 RCDATA "MyPic.jpg" 

onde "1" é o índice do arquivo, "RCDATA" é significa que é um tipo de arquivo não-padrão (ospadrões são bitmaps, ícones e cursores) e ""MyPic.jpg"" é o nome do arquivo. Salve e execute oprograma BRCC32.EXE que fica no subdiretório Bin do Delphi (BRCC32 arquivo.rc). Serácriado um arquivo .res (arquivo.res) cujo conteúdo terá o próprio JPG. 

Nota: Você pode colocar mais de um arquivo no arquivo .res, desde que os índices sejam diferentes. 

Para colocá-lo no executável, coloque a linha: 

{$R arquivo.res} 

após a linha: 

{$R *.DFM} 

Ok, ele já vai ficar no executável. E como eu rodo esse JPG? Simples: 

procedure LoadJPEGfromEXE; var MyJPG : TJPEGImage; ResStream : TResourceStream; Index : Integer; begin Index := 1; try MyJPG := TJPEGImage.Create; ResStream := TResourceStream.CreateFromID (HInstance, Index,RT_RCDATA); MyJPG.LoadFromStream (ResStream); Canvas.Draw (12, 12, MyJPG); finally MyJPG.Free; ResStream.Free; end; end; 

Page 21: Codigo Fontes e Truques Ultilitários para o Delphi 7

Troque o valor de Index pelo valor do índice que você criou para o arquivo que deseja abrir. 

 

 

Calculando feriado da Páscoa 

Para calcular o feriado da Páscoa, use a rotina abaixo: 

function CalcEaster : String; var B,D,E,Q : Integer; GF : String; begin B := 225 - 11 * (Year mod 19); D := ((B-21) mod 30) + 21; if D > 48 then Dec (D); E := (Year + (Year div 4) + D + 1) mod 7; Q := D + 7 - E; if Q < 32 then begin if ShortDateFormat [1] = 'd' then Result := IntToStr(Q) + '/3/' + IntToStr(Year) else Result := '3/' + IntToStr(Q) + '/' + IntToStr(Year); end else begin if ShortDateFormat [1] = 'd' then Result := IntToStr (Q - 31) + '/4/' + IntToStr(Year) else Result := '4/' + IntToStr (Q - 31) + '/' + IntToStr(Year); end; 

if Q < 32 then begin if ShortDateFormat [1] = 'd' then 

Page 22: Codigo Fontes e Truques Ultilitários para o Delphi 7

GF := IntToStr(Q-2) + '/3/' + IntToStr(Year) else GF := '3/' + IntToStr(Q-2) + '/' + IntToStr(Year); end else begin if ShortDateFormat [1] = 'd' then GF := IntToStr (Q - 31 - 2) + '/4/' + IntToStr(Year) else GF := '4/' + IntToStr (Q - 31 - 2) + '/' + IntToStr(Year); end; end; 

 

 

Extrair ícones de uma DLL ou de um EXE 

Para tirar um ícone de um arquivo .exe ou .dll, use a procedure abaixo (coloque a unit ShellAPI na cláusula Usesda sua unit): 

procedure ExtrairIcone; var IconIndex : Word; h : hIcon; begin IconIndex := 0; h := ExtractAssociatedIcon (hInstance, 'C:\Windows\Notepad.exe',IconIndex); DrawIcon (Form1.Canvas.Handle, 10, 10, h); end; 

 

Page 23: Codigo Fontes e Truques Ultilitários para o Delphi 7

Colocar monitor em estado de redução de energia 

//Para reduzir o consumo de energia do monitor, use o seguinte comando: 

SendMessage (Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); 

//Para voltar ao normal: 

SendMessage (Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); 

 

 

Acessar tabela Paradox em rede 

Para acessar bancos de dados Paradox em uma rede utilizando Windows, faça o seguinte: 

Abra o BDE Administrator; Na aba Configuration, escolha a "pasta" Drivers|Native|PARADOX e altere NetDir para o nome do servidor (no formato de rede :\\Servidor\Compartilhamento); 

Na "pasta" System|INIT, altere LocalShare para True; Altere o diretório do alias para o nome do servidor (também no formato de rede). 

Page 24: Codigo Fontes e Truques Ultilitários para o Delphi 7

 

 

Descobrir nome do usuário atual da Rede 

function NetUser : string; var szNetName: array [0..48] of char; iResult: DBIResult; begin iResult := DBIGetNetUserName (szNetName); if iResult <> DBIErr_None then DBIError (iResult) else Result := StrPas (szNetName); end; 

Não se esqueça de colocar cláusula Uses do form as units DBIProcs, DBITypes, DB e DBIErrs. 

 

Compartilhar Pastas 

var Erro : DWord; PServer, PSenha, PLetra : PChar; begin PServer := '\\NomeDaMaquina\Caminho' + #0; { NomeDaMaquina é o nome da máquina } 

Page 25: Codigo Fontes e Truques Ultilitários para o Delphi 7

PLetra := 'Z:'; // Z: será a letra da pasta PSenha := ''; // Digite uma senha aqui, se quiser ERR := WNetAddConnection (PServer , PSenha , PLetra); case Erro of ERROR_ACCESS_DENIED : ShowMessage ('Acesso negado.'); ERROR_ALREADY_ASSIGNED : ShowMessage ('A letra do drive especificadajá está conectada.'); ERROR_BAD_DEV_TYPE : ShowMessage ('O tipo de dispositivo e o tipo derecurso não são compatíveis.'); ERROR_BAD_DEVICE : ShowMessage ('Letra de unidade inválida.'); ERROR_BAD_NET_NAME : ShowMessage ('O nome da máquina não é válida ounão pode ser localizada.' ); ERROR_BAD_PROFILE : ShowMessage ('Formato incorreto de parâmetros.');ERROR_CANNOT_OPEN_PROFILE : ShowMessage ('Conexão permanente nãodisponível.'); ERROR_DEVICE_ALREADY_REMEMBERED : ShowMessage ('Uma entrada para odispositivo especificado já está no perfil do usuário.'); ERROR_EXTENDED_ERROR : ShowMessage ('Erro de rede.'); ERROR_NO_NETWORK : ShowMessage ('A rede não está presente.'); else if Erro > 0 then ShowMessage ('Erro número ' + IntToStr (Erro) + '.'); end; end;