Fungées para o Delphi
APOSTILA
DICAS DE PROGRAMAGAO DELPHI
Professor Edgar Caldeira da Cruz
Araras/SP
2013
Pagina 1Fungées para o Delphi
SUMARIO
Acessando arquivos Paradox em rede
Confirmar o diretério.
Hint com quebra de linha
Testa se existe disco no drive “A”
Verifica se o Form ja est ativo
Pegando o nome do usuario ¢ o name da empresa no Windows
Como criar uma tela de abertura (Splash Screen)
Como validar a entrada de uma caixa de texto.
Atecla “ENTER” para funcionar como "TAB"
Capturar tela
Subtrairladicionar N meses a uma data
Data por extenso
Habilitar e desabiliar a senha do protetor de tela
Sobrescrevendo um evento
Como evitar a mensagem de erro Key Violation
Como evitar a mensagem de erro Key Violation
Executar um PACK em tabelas Paradox
Verificar se o registro esta travado
Cursor customizado
Criando atalhos
Emular o pressionamento de uma tecla
Fechar um aplicativo a pattir do Delphi
Configurar o Delphi para acessar tabelas do Access
Apagar um subdiretério,
Testar a impressora
Validar datas.
Procurar arquivos
Abrir arquivos com aplicativo associado
Fazer um TEdit aceitar apenas nimeros
Alterar 0 papel de parede do Windows
Extrair o nlimeto de cores do modo de video corrente
Habilitar e desabiltar barra de tarefas,
Habiltar e desabiltar ctrl+alt+del
Alterar a data e a hora do sistema
Enxtrair o tamanho de um arquivo
Enxtrair o icone de um executavel
Verificando a meméria
Numero de série do hd
Mapear uma pasta na rede
Pagar nome do usuario na rede
saber o estado das teclas Num lack, Caps lock e Scroll lock
Testando drives
Executando programas externos
Reproduzindo sons wav, sem o componente mediaplayer.
Manipular arquivos INI
Exponenciacao
Aguardar um determinado n® de segundos
Tecla ENTER funcionar como TAB
Utilizar ponto para separar decimais
Criando um Splash Screen (abertura).
Como limpar todos os edits de um form
Pagina 2Fungées para o Delphi
Formatar numeros com zeros a esquarda
Obrigar a digitagao de caracteres maiisculos num campo memo
Imprimindo um campo memo via Canvas
Procura e substituigéo de string num campo memo
Pegando a linha e coluna atuais de um memo.
Trocando a cor de uma célula num DBGrid
Trocando a cor da fonte num DBGrid
Gerenciando mais de uma linha selecionada num DBGrid (Muttiselect)
Commit (Delphi 3)
Commit (Delphi 2)
Extrair o nlimero do registro atual em tabelas Paradox ou Dbase
Alterando Idapi32.Cfg Via Programa
Criando tabelas
Data por extenso no Quickreport
Filtrando registros com 0 Quickreport (Delphi 2)
Extraindo o ano, més ou dia de uma data via SQL.
Cria um clone Monocromético de um outro Bitmap
Gerar Planilha no Excel
DBGrid, Ocultando Colunas Dinamicamente com Popup,
Transformar de minutos para horas,
Campo auto incremento no Oracle e no Interbase
Como desativar a protecdo de tela
Gira o texto
Hint Redondo
Informar a velocidade do Processador
Instalar quickreport no delphi 7
Mostra e esconde icones da area de trabalho
Alterando o papel de parede
Salvar a tela em BMP
Usando 0 Word dentro do Delphi
Funedo para validar 0 PIS
Calcular a idade usando o MaskEdit
Como definir seu préprio hotkey (Tecla Quente)
Como interceptar as teclas de fungdes no programa
DbGrid zebrado
Retorna o espaco livre em disco
Para que 0 seu Form nao seja redimensionado
Como mover um componente em Run-time
Como verificar se a tecla TAB foi pressionada
Executar um AVI no Form
Colocar zeros a esquerda de um valor digitado no componente Edit
Cancelar o pressionamento de uma tecla
Utilizar 0 MessageBox com parmetros
Retorna a cor de um determinado componente no formato string
Verifica se existe o diretério
Bloquear a tecla Ctrl+Del do DBGrid
Para criar uma janela no retangular
Fecha todos os arquivos.
Hint com quebra de linhas,
Imprimindo sem passar pelo gerenciador de impressao
Fechar um aplicativo Delphi a partir de outro aplicativo Delphi.
Mostrar o HINT num Panel
Retomnar o nome do usuario que esta editando o registro
Retomnar o nome do usuario que esta com a tabela Exclusiva
6
26
26
27
21
27
28
28
29
29
29
30
30
31
31
32
32
33
34
35
35
36
37
37
40
4
Al
Al
a
4B
8
44
45
46
46
a1
47
48
50
50
St
St
St
St
2
2
2
2
2
3
3
3
54
34
Pagina 3Fungées para o Delphi
Configuragao do BDE para ambiente de rede
Como criar um Form de Apresentacdo (Splash Form) como o do WORD
Verifica se o Form, ja esta ativo, Delphit , Delphi2 e Delphi3
Converter a primeira letra de um Texto em maiiscula
Verifica se 0 Form, ja esta ativo
Mostrar as fontes TrueT ype instaladas no Windows
ShowMessage com quebra de linhas.
Veja abaixo como retotnar informagdes do ambiente DOS,
Como colocar um componente ComboBox em um componente StringGrid
Como retornar A coluna ativa do DBGrid
Como mover o conteudo da calculadora do Windows para um Edit
54
56
56
56
31
‘7
58
58
59
60
61
Pagina 4Fungées para o Delphi
Acessando arquivos Paradox em rede
Arquivos Paradox podem ser compartilhados em rede. Para que isto ocorra
devemos:
1. Adicionar 0 DATABASE ENGINE CONFIGURATION (BDE CONFIG)
2. Selecionar a pagina DRIVERS
3. Selecionar o driver PARADOX e alterar o parémetro NET DIR para o local onde
sero gravados os arquivos de controle para campartilhamenta. Por exemplo
"G:’\MEUAPLIC’, onde G : correspande ao drive de rede e MEUAPLIC, o diretério
aonde esta 0 aplicativa (executavel)
Depois selecionar a pagina SYSTEM
Alterar 0 parametro LOCAL SHARE para TRUE. Apés isto 0 BDE controlara o
compartilhamento de arquivas PARADOX em rede
os
Confirmar o diretério
procedure TFormt Button Click(Sender. TObject);
begin
if DirectoryExists(Edit! Text) then
Label! Caption := Editt Text +' exists’
else Label! Caption := Edit Text + ' does not exist’,
end;
Hint com quebra de linha
Para incluir mais de uma linha no Hint vocé deve utilizar 0 evento OnMouseMove
de cada componente. Veja abaixo como ficara 0 codigo em um Edit por exemplo
procedure TForm! EditiMouseMove(Sender: TObject; Shift: TShiftState; X, Y:
Integer);
begin
Edit hint := 'Primeira Linha'+#13+'Segunda Linha'+#13+ Terceira
Linha'+#13+'Quarta Linha’
end;
Obs. No esquecer de mudar para TRUE 0 evento ShowHint.
Testa se existe disco no drive “A”
function TForm1.TemDiscoNoDrive(const drive : char): boolean;
var
DriveNumero : byte;
EMode : word;
begin
result := false;
DriveNumero := ord(Drive);
if DriveNumero >= ord('a’) then
Pagina 5Fungées para o Delphi
dec(DriveNumero $20);
EMode := SetErrorMode(SEM_FAILCRITICALERRORS)
try
if DiskSize(DriveNumera-$40) <> -1 then
Result -= true else messagebeep(0)
finally
SetErrorMode(EMode);
end
end;
procedure TForm! Button| Click(Sender. TObject);
begin
if TemDiscoNoDrive('a') then
ShowM essage('Tem disco no drive A:')
else ShowMessage('Naa tem disco no drive A)
end,
Verifica se o Form ja esta ativo
procedure TFormt Button Click(Sender. TObject);
var
Found : Integer,
begin
Found :=-1;
for i:= 0 to Screen.FormCount - 1 do
if Screen Forms[i] is TForm?2 then Found := i
if Found >= 0 then Screen.Forms{F ound].Show
else
begin
Form? := TForm2.Create(Self);
Form2.Show,
end;
end.
Pegando o nome do usual
Uses Registry;
Procedure GetUserCompany; var reg: TRegIniFile;
begin
reg := TReglniFile.create('SOFTWARE\MICROSOF IMS SETUP (ACME)\');
Edit! Text = reg ReadString('USER INFO’ 'DefName',"),
Edit2.Text := reg ReadString(’USER INFO’ 'DefCompany’,");
reg free;
end.
e 0 nome da empresa no Windows
Pagina 6Fungées para o Delphi
Como criar uma tela de abertura (Splash Screen)
Apés ter criado o formulario principal, crie um Formulario para a Splah Screen que
iremos chamar de FormAbertura (dé 0 nome que vocé quiser)
Depois de criar os dois forms, clique no menu View, na apedo Project Source
Encontranda a linha em que o form de abertura é criado e apague-a
Linha que deve ser apagada:
begin
Application CreateF orm(TF ormabertura, FormAbertura); {Esta linha deve ser
apagada}
end;
Agora insira as linhas abaixa antes da criagdo dos demais form do seu aplicativo
begin
AberturaF orm:=TF ormAbertura.Create(Application);
AberturaF orm show, {Os autros form devem ser criados a partir daqui}
FormAbertura Hide; {Esconde o FormAbertura}
FormAbertura Free; {Libera Memoria}
Application Run:
End;
Como validar a entrada de uma caixa de texto
procedure Edit! KeyPress(Sender: TObject, var Key: Char);
begin
If not(key in['0'.’9' #8]) then
begin
beep;{somente delphi 2.0 au 3.0} key:=#0
end.
end
Atecla “ENTER” para funcionar como “TAB”
obs.:(1) a propriedade KEYPREVIEW do form sera igual TRUE,
obs..(2) a propriedade DEFAULT dos botées sera igual FALSE,
procedure TForm! FarmKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
Begin
Key:=#0;
if (Sender is TEdit) and (Sender is TComboBox) then
TEdit( Sender) Perform(WM_KeyDown,VK_Tab 0)
Else
Perform(Wm_NextDIgCt,0,0)
End;
Pagina 7Fungées para o Delphi
Capturar tela
procedure TFormt Button Click(Sender. TObject);
var
BackgroundCanvas : TCanvas,
Background : TBitmap; {bitmap holding the background }
DC : hDC;
begin
1/ get the background bitmap
Background:= TBitmap Create;
Background Width:= Width;
Background Height = Height,
DC:= GetDC (0)
BackgroundCanvas:= TCanvas.Create;
BackgroundCanvas Handle:= DC;
/ stretch the bitmap to the display size (it could be much smaller (preview)
Background.Canvas.CopyRect(Rect (0, 0, Width, Height), BackgroundCanvas, Rect
(0, 0, Screen Width, Screen Height));
BackgroundCanvas Free;
image 1 Picture.Bitmap:= Background
end.
Subtrair/adicionar N meses a uma data
1/ Para acrescentar 1 més a data de hoje:
Edit! text:= DATETOSTR(INCMONTH (DATE, 1));
// Para subtrair é sé colocar 0 numero de meses negativo
Data por extenso
Edit! text:= FormatDateTime("Sao Paulo, "dddd’, "d" de "mmmm" de "yyyy' date)
Habilitar e desabiliar a senha do protetor de tela
Inclua a unit REGISTRY na clausula uses do seu form
I Habilita
var
Registry: TRegistry,
begin
Registry = TRegistry.Create;
Registry RootKey ‘= HKEY_CURRENT_USER;
Registry. OpenKey('\Contral PaneliDesktop’, TRUE),
Registry Writelnteger('ScreenSaveUsePassword' $0)
Registry.CloseKey;
Registry Free;
end,
Pagina 8Fungées para o Delphi
1 Desabilita
procedure TForm! Button2Click(Sender: TObject);
var
Registry: TRegistry,
begin
Registry = TRegistry.Create;
Registry RootKey ‘= HKEY_CURRENT_USER;
Registry. OpenKey('\Contral PaneliDesktop’, TRUE),
Registry Writelnteger('ScreenSaveUsePassword' $1)
Registry.CloseKey;
Registry Free;
end,
Sobrescrevendo um evento
Para executar algo antes do evento Showmodal por exemplo, utilize o seguinte
public
function showmodal: integer,
function TMeuForm.Showmodal : integer,
begin
{Aqui vai tudo que se precisa fazer antes }
result := inherited showmodal,
end.
Como evitar a mensagem de erro Key Violation
No evento OnEnter do TEdit coloque:
procedure TForm1 EditiEnter(Sender: TObject)
begin
Edit! Selstart:= Length(Edit1 text);
end.
Como evitar a mensagem de erro Key Violation
Inclua a unit DBITYPES na clausula uses do seu form.
procedure TForm! Table 1PostError(DataSet: TDataSet, E: EDatabaseError, var
Action: TDataAction);
begin
if EDBEngineError(E) Errors[0].ErrorCode = 9729 then
ShowMessage('Registro ja existe!’);
Action:= daAbort;
end,
Pagina 9Fungées para o Delphi
Executar um PACK em tabelas Paradox
Inclua a unit DBIPROCS na clausula uses do seu form
procedure TForm! ParadoxPack(Table : Table).
var
TBDese : CRTbIDesc;
hDb: hDbiDb;
TablePath: array[0..dbiMaxPathLen] of char,
begin
Table Open;
FillChar(TBDesc Sizeof(TBDesc) 0);
with TBDesc do
begin
StrPCopy(szTbIName Table. TableName)
StrCopy(szTbIType,szParadox);
bPack := True;
end,
hDb == nif
Check(DbiGetDirectory(Table DBHandle, True, TablePath));
Table Close;
Check(DbiOpenDatabase(nil, ‘STANDARD’, dbiReadWrite, dbiOpenxcl,nil,0, nil,
nil, hDb));
Check(DbiSetDirectory(hDb, TablePath));
Check(DBIDoRestructure(hDb, | @TBDesc nil nil,nil False);
Table Open;
end,
Como utilizar:
procedure TForm1 Button| Click(Sender. TObject);
begin
ParadoxPack(table 1);
end.
Verificar se o registro esta travado
Inclua a unit DBITYPES na clausula uses do seu form.
function TForm1 sRecordLocked(Table: TTable; ByAnyane: boolean): Boolean;
var
Locked: BOOL;
hCur, DBICur,
rsit: DBIResult;
begin
Table UpdateCursorPos,
Ils the record locked by the current session.
Check(DbilsRecordLocked(Table Handle, Locked));
Pagina 10Fungées para o Delphi
Result := Locked;
IIIf the current session does not have a lack and the ByAnyone varable is,
set to check all sessions, continue check
if (Result = False) and (ByAnyone = True) then
begin
11 Get a new cursor to the same record
Check(DbiCloneCursor(Table Handle, False, False, hCur));
try
I Try and get the record with a write lock
rsit = DbiGetRecord(hCur, dbiWRITELOCK, nil, nil);
if rsit <> DBIERR_NONE then
begin
if an error occured and its a lock error, return true
if HiByte(rsit) = ERRCAT_LOCKCONELICT then
Result -= True
else
If some other error happened, throw an exception
Check(rsit);
end
else
/ Release the lock in this session if the function was successful
Check(DbiRelRecordLock(hCur, False);
finally
I Close the cloned cursor.
Check(DbiCloseCursor(hCur))
end
end
end
Como utilizar:
procedure TForm! Button' Click(Sender: TObject);
begin
If IsRecordLocked(Table1,True) then
Showmessage(‘Registro Travado!’)
end,
Pagina 17Fungées para o Delphi
Cursor customizado
Criar um arquivo de recurso com 0 cursor (vamos chamé-lo de teste.res)
Vamos chamar o recurso de CUR_1
Coloque {$R teste res} na seco implementation
procedure InsereCursar(Num : Smallint);
begin
Screen.Cursors[Num|:= LoadCursor(hinstance, PChar(’CUR_1"));
Screen.Cursor ‘= Num,
end
Criando atalhos
Inclua as units ShIObj, ActiveX, ComObj, Registry na clausula uses do seu form.
Na sepao type coloque
TShortcutPlace = (stDesktop, stStartMenu);
E por fim a procedure para realizar o trabalho:
procedure TForm! CreateShortcut (FileName, Parameters, InitialDir, ShortcutName,
ShortcutF older : String; Place: TShortcutPlace);
var
MyObject : Unknown;
MySLink : IShellLink;
MyPFile : |PersistFile;
Directory : String;
FileName : WideString;
MyReg : TReginiFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as |ShellLink,
MyPFile := MyObject as IPersistFile
with MySLink do
begin
SetArguments(PChar(Parameters));
SetPath(PChar(FileName));
SetWorkingDirectory(PChar(InitialDir));
end,
MyReg ‘=
TReginiFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer’)
if Place = stDesktop then
Directory “= MyReg .ReadString (‘Shell Folders’ /Desktop’,");
if Place = stStartMenu then
begin
Pagina 12Fungées para o Delphi
Directory == MyReg ReadString('Shell Folders’, ‘Start Menu’,") + 'V + ShortcutF older,
CreateDir(Directory);
end.
WFileName := Directory + 'V + ShortcutName + ‘Ink’;
MyPFile Save (PWChar (WFileName), False)
MyReg Free
end.
Emular 0 pressionamento de uma tecla
keybd_event(85,0,0,0);
Sera enviado 0 'A' para o componente que estiver em foco.
Fechar um aplicativo a partir do Delphi
procedure TFormt Button Click(Sender. TObject);
var
hHandle : THandle;
begin
hHandle := FindWindow( nil, 'Formt');
if hHandle <> 0 then
SendMessage( hHandle, WM_CLOSE, 0, 0);
end.
Configurar o Delphi para acessar tabelas do Access
+ Execute 0 BDE, abra a paleta CONFIGURATION,
* Click em Drivers — Native - MsAccess
Uma janela de configuracao com varias opgdes sera aberta
* Configure a DLL32 para IDDA032.DLL ACESS 95 ou IDDA3532.DLL ACESS 97
+ Na opeao SYSTEM DATABASE, aponte para 0 arquivo System.mdw do Acess
que geralmente esta no subdiretorio \Msoffice\Access.
* Salve a configuracao e apds isto € sé criar seu alias (se ja ouver algum criado
delete e configure de novo)
* Com essa informagao em mos, faca o programa nao pedir 0 prompt de login (a
da senha), colocanda um TDatabase no projeto.
+ Escolha 0 alias que vocé criau na propriedade AliasName
* Altere LoginPrompt para False
+ Na propriedade DatabaseName, coloque um nome qualquer (serviré como
substituto do alias em todas as TTable e TQuery que acessem esse BD)
+ Altere a propriedade AliasName de todas as TTables e TQueries que acessem
essas tabelas para o nome que vocé definiu em DatabaseName no TDatabase.
Pagina 13Fungées para o Delphi
Apagar um subdireto:
Inclua a unit SHELLAPI na clausula uses do seu form.
procedure DeleteDir( Handle : THandle; Const sPath : String );
var
OpStruc: TSHFileOpStruct;
FromBuffer, ToBuffer: Array[0..128] of Char,
begin
fillChar( OpStruc, Sizeof(OpStruc), 0 );
FillChar( FromBuffer, Sizeof(FromBuffer), 0 );
FillChar( ToBuffer, Sizeof(ToButfer), 0 );
StrCopy( FromBuffer, sPath);
With OpStruc Do
Begin
Whd:= hHandle;
wFunc:=F O_DELETE;
pFrom:= @FromButfer;
pTo:= @ToBuffer;
flags= FOF_NOCONFIRMATION;
fAnyOperationsAborted:=False;
hNameMappings:=nil
MMpszPragressTitle:=nil;
End;
ShF ileOperation(OpStruc);
end,
Como utilizar:
procedure TForm! Button' Click(Sender: TObject);
begin
DeleteDir( Self Handle 'C:\TESTE’);
end
Testar a impressora
Function TFormt PrinterOnLine : Boolean.
Const
PrnStint : Byte = $17;
StRq : Byte = $02;
PrnNum : Ward
Var
nResult : byte;
Begin
Asm
mov ah,StRq;
mov dx,PmNum;
Int $17;
; {0 para LPT1, 1 para LPT2, ete. }
Pagina 14Fungées para o Delphi
mov nResult,ah;
end:
PrinterOnLine := (nResult and $80) = $80;
end.
Como utilizar:
procedure TForm! Button' Click(Sender: TObject);
begin
If not PrinterOnLine then ShowMessage('Verifique a Impressoral’);
end.
Validar datas
try
StrToDate(Edit! Text);
except
on EConvertError do
ShowMessage (‘Data Invalida!’);
end.
Procurar arquivos
procedure TFormt DirList( ASource : string; ADirList : TStringList );
var
SearchRec : TSearchRec;
Result: integer,
begin
Result := FindFirst( ASource, faAnyFile, SearchRec );
if Result = 0 then
while (Result = 0) do
begin
if (SearchRec Name+" ')[1] ="' then
{Se pegou nome de SubDiretorio }
begin
Result := FindNext( SearchRec );
Continue
end.
ADirList Add( SearchRec.Name );
Result := FindNext( SearchRec );
end
FindClose( SearchRec );
ADirList Sort,
end.
Pagina 15Fungées para o Delphi
Como utilizar:
procedure TForm1 Buttont Click(Sender: TObject);
var
contador: Integer,
lista: TStringlist;
begin
lista:= TStringlist.create;
DirList('C:\**, lista);
end.
Abrir arquivos com aplicativo associado
Inclua a unit SHELLAPI na clausula uses do seu form.
procedure TForm! ExecFile(F: String);
var
r: String;
begin
case ShellExecute(Handle, nil, PChar(F), nil, nil, SW_SHOWNORMAL) of
ERROR_FILE_NOT_FOUND: r:='The specified file was not found.
ERROR_PATH_NOT_FOUND: r:= ‘The specified path was not found.’;
ERROR_BAD_FORMAT: r:= The EXE file is invalid (non-Win32 EXE or error in
EXE image).',
SE_ERR_ACCESSDENIED: r:= ‘Windows 95 only: The operating system denied
access to the specified file.’
SE_ERR_ASSOCINCOMPLETE: r:= The filename association is incomplete or
invalid.
SE_ERR_DDEBUSY: r:= ‘The DDE transaction could not be completed because
other DDE transactions were being processed."
SE_ERR_DDEFAIL: r= 'The DDE transaction failed.’;
SE_ERR_DDETIMEOUT: r= 'The DDE transaction could not be completed because
the request timed out.’
SE_ERR_DLLNOTFOUND: r= 'Windaws 95 only: The specified dynamic-link library
was not found.
SE_ERR_NOASSOC: r:= There is no application associated with the given filename
extension”.
SE_ERR_OOM: r:= 'Windows 95 only: There was not enough memory to complete
the operation."
SE_ERR_SHARE: r:='A sharing violation occurred.’
else
Exit,
end
ShowMessage(r);
end,
Pagina 16Fungées para o Delphi
Como utilizar:
procedure TForm! Button' Click(Sender: TObject);
begin
ExecFile('c:\windowslladrilhos.bmp');
end,
Fazer um TEdit aceitar apenas numeros
Na rotina abaixo, o TEdit sé aceitara numeros de 0 a 9 e 0 BackSpace (Chr(8)). Se
vocé quiser a virgula também, coloque dentro do colchete DecimalSeparator
procedure TForm! EditiKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key inf'0'.’'9',Chr(8)]) then Key:= #0;
end.
Alterar o papel de parede do Windows
procedure TFormt Button Click(Sender. TObject);
var
Arquivo: String
begin
Arquivo:= 'c:\windows\bitmap~1 bmp’:
SystemParametersinfo(SPl_SetDeskWallPaper, 0, PChar(Arquivo), 0)
end:
Extrair o numero de cores do modo de video corrente
var
hnd: THandle;
bitsPorPixel: integer;
begin
hnd:= GetDC( Handle );
bitsPorPixel:= GetDeviceCaps( hnd, BITSPIXEL );
18 = 256 cores, 16 = high color, 24 = true color
end.
Habilitar e desabi
I/ desabilita
procedure hideTaskbar,
var wndHandle : THandle;
wndClass : array[0..50] of Char,
begin
StrCopy(@wndClass(0], '‘Shell_TrayWha');
wndHandle:= FindWindow(@wndClass(0], nil);
ShowWindaw(wndHandle, SW_HIDE),
end.
barra de tarefas
Pagina 17Fungées para o Delphi
Whabilita
procedure showTaskbar,
var wndHandle : THandle;
wndClass : array[0..50] of Char,
begin
Str Copy(@wndClass{0], 'Shell_TrayWhd');
wndHandle:= FindWindow(@wndClass(0}, nil);
ShowWindaw(wndHandle, SW_RESTORE),
end,
Habilitar e desabilitar ctri+alt+del
I/ desabilita
procedure TFormt Button Click(Sender. TObject);
var
numero: integer,
begin
SystemParametersinfo(97,Word(true) @numero,0);
end:
Whabilita
procedure TForm! Button2Click(Sender: TObject);
var
numero: integer:
begin
SystemParametersinfa(97,Word(false) @numero,0);
end.
Alterar a data e a hora do sistema
procedure TFormt Button Click(Sender: TObject);
var
SystemTime : TSystemTime;
begin
With SystemTime do begin
HDefinindo o dia do sistema
wYear= 1996;
wMonth:= 5;
wOay:= 10;
MDefinindo a hora do sistema
wHour:= 20; //hora
wMinute:= 50; //minutos
wSecond:= 59; //segundos
end.
NColocar a hora e data do sistema
SetLocalTime(SystemTime);
end
Pagina 18Fungées para o Delphi
Extrair o tamanho de um arquivo
function TForm1.TamArquivo(Arquivo: string): Integer,
begin
with TFileStream.Create(Arquivo, fmOpenRead or fmShareExclusive) do
try
Result := Size;
finally
Free
end.
end.
Como utilizar:
procedure TF orm! Button| Click(Sender: TObject);
begin
edit! text'= inttostr(TamArquivo(‘CAMINHO\NOMEDOARQUIVO));
end,
Extrair 0 icone de um executavel
Inclua a unit Shellapi na clausula uses do seu form.
Image Picture.|con Handle:= Extractlcon(Handle PChar(‘c:\windows\calc.exe'),0);
Verificando a memoria
var
MemoryStatus: TMemoryStatus;
begin
MemoryStatus.dwLength:= sizeof(MemoryStatus);
GlobalMemoryStatus(MemoryStatus);
Label! Caption := Total de memiaria fisica : ' +
IntToStr(MemoryStatus.dwTotalPhys)
end.
{typedef struct_MEMORYSTATUS
DWORD dwLenath; // sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; // percentual de memoria em uso
DWORD dwTotalPhys; // bytes de meméria fisica
DWORD dwAvailPhys; // bytes livres de meméria fisica
DWORD dwTotalPageFile; // bytes de paginacdo de arquivo
DWORD dwAvailPageF ile; // bytes livres de paginacao de arquivo
DWORD dwTotalVirtual; // bytes em uso de espago de endereco
DWORD dwAvailVirtual; // bytes livres}
Pagina 19Fungées para o Delphi
Numero de série do hd
Function TF ormt .SerialNum(FDrive:String) :String;
var
Serial: DWord:
DirLen, Flags: DWord:
DLabel : Array(0..1 1] of Char,
GetVolumelnformation(PChar(FDrive+'\'),dLabel,12,@Serial DirLen Flags,nil,0);
Result := IntToHex(Serial,8);
Except
Result =
end,
end
Mapear uma pasta na rede
var
err: DWord;
PServer, PSenha, PLetra : PChar,
Begin
PServer := \\Caminho\Caminho' + #0;
PLetra
PSenha :=""
ERR := WNetAddConnection ( PServer , PSenha , PLetra );
CASE ERR of
ERROR_ACCESS_DENIED : ShowMessage ( ‘Acesso negado.' );
ERROR_ALREADY_ASSIGNED : ShowMessage ( ‘A letra do drive especificada ja
esta conectada’ )
ERROR_BAD_DEV_TYPE : ShowMessage ( 'O tipa de dispositive e o tipo de
recurso naa so compativeis.’
ERROR_BAD_DEVICE : ShowMessage ( ‘Letra invalida');
ERROR_BAD_NET_NAME:: ShowMessage (Nome do servidor nao é valid au nao
pode ser lacalizado.");
ERROR_BAD_PROFILE : ShowMessage ( ‘Formato incarreto de parametras.’ );
ERROR_CANNOT_OPEN_PROFILE : ShowMessage ( ‘Conexao permanente nao
disponivel.’ )
ERROR_DEVICE_ALREADY_REMEMBERED : ShowMessage (‘Uma entrada para
0 dispositive especificado ja esta no perfil do usuario.’ )
ERROR_EXTENDED_ERROR : ShowMessage ( 'Erro de rede.’ );
ERROR_INVALID_PASSWORD : ShowMessage ( 'Senha especificada invalida.’ )
ERROR_NO_NET_OR_BAD_PATH : ShowMessage ( ‘A operacao ndo foi concluida
porque a rede nao foi inicializada ou caminho ¢ invalido.' );
ERROR_NO_NETWORK : ShowMessage ( ‘A rede nao esta presente! )
Pagina 20Fungées para o Delphi
else if Err > 0 then
ShowMessage (IntToStr(Er);
end,
end
Pegar nome do usuario na rede
function TForm( usuario : string:
var
NomedoUsuario : array{0..255] of char;
buffSize : DWORD;
begin
buffSize := sizeOf(NomedoUsuario)
GetUserName(@NomedoUsuario, buffSize)
result:= NomedoUsuario;,
end.
Como utilizar:
procedure TForm! Button' Click(Sender: TObject);
begin
ShowM essage (usuario)
end,
saber o estado das teclas Num lock, Caps lock e Scroll lock
Para saber 0 estado das teclas acima citadas, utilize a fungao getkeystate em
conjunto com o cédigo das teclas, ela retorna 0 se a tecla estiver OFF e 1 se a tecla
estiver ON, assim
If getkeystate
If getkeystate
If getkeystate
If getkeystate
If getkeystate
If getkeystate
(vk_numlack) = 0 then // Num lock esta OFF
(vk_numlock) = 1 then // Num lock esta ON
(vk_scroll) = 0 then // Scroll lack esta OFF
(vk_scroll) = 1 then // Scroll lack esta ON
(vk_CAPITAL) = 0 then // Caps lock esta OFF
(vk_CAPITAL) = 1 then // Caps lock esta ON
Testando drives
function TForm1.TemDiscoNoDrive(const drive : char): boolean;
var
DriveNumero : byte;
EMode : word;
begin
result := false;
DriveNumero := ord(Drive);
if DriveNumero >= ord('a’) then
dec(DriveNumero $20),
EMode := SetErrorMode(SEM_FAILCRITICALERRORS).
Pagina 21Fungées para o Delphi
try
if DiskSize(DriveNumero-$40) <> -1 then
Result -= true
else
messagebeep(0);
finally
SetErrorMode(EMode),
end
end
Como utilizar:
procedure TForm! Button' Click(Sender: TObject);
begin
if TemDiscoNoDrive('a') then
ShowMessage('Tem disco no drive A:')
else
ShowMessage('Nao tem disco no drive A:");
end,
Executando programas externos
Winexec('Command.com /C Teste.exe’,Tipo_de_Janela);
Tipo_de_Janela
SW_SHOWNORMAL - Visualizagao normal da janela
SW_MAXIMIZE - Janela maximizada
SW_MINIMIZE - Janela minimizada
SW_HIDE - Escondido
Reproduzindo sons wav, sem 0 componente mediaplayer
Coloque na clasula Uses a unit MMSystem
SndPlaySound('C:\Windows\Media\Som wav',SND_ASYNC);
Manipular arquivos INI
Inclua a unit IniFiles na clausula uses do seu form.
Procedure TFormt Gravalni( Numera : Longint ; Texto : String ; Condicao : Boolean)
var
Arqlni : TiniFile;
begin
Arqini := TiniFile.Create('c:\windowsitemp\Teste..Ini');
Try
ArqiniWriteInteger('Dados’, ‘Numero’, Numero);
Arqini WriteString('Dados’, ‘Texto’, Texto);
Pagina 22Fungées para o Delphi
ArqiniWriteBool(‘Dados’, 'Condigao', Condicao);
Finally
Arqini.Free;
end,
end
Procedure TForm! Lelni( Var Numero : Longint ; Var Texto : String ; Var Condicao
Boolean).
var
Arqlni : tiniFile;
begin
Argini := tiniFile Create('c:\windowsitemp\Teste.Ini);
Try
Numero := Arqini.Readinteger('Dados’, ‘Numero', Numero );
Texto := Arqini.ReadString('Dados’, ‘Texto’, Texto ))
Condicao := Arqini ReadBoal('Dados’, 'Condicao', Condicao );
Finally
Argini-Free;
end
end
Como utilizar:
procedure TForm! Buttont Click(Sender: TObject);
begin
Gravaini( 1234, TESTE’ True);
end.
procedure TForm! Button2Click(Sender: TObject);
var
N: Integer,
T: String;
C: Boolean;
begin
Lelni(N,TC)
Showmessage(IntToStr(N}+" '+T);
end,
Exponenciacao
Inclua a unit Math na clausula uses do seu form. Depais disso utilize a fun¢do Power.
Edit! text:= FloatToStr(Power(2,4));
Pagina 23Fungées para o Delphi
Aguardar um determinado n° de segundos
procedure TFormt Delay(Tempo: Word)
var x1: Double;
begin
x1= now,
repeat until ((now-x1)*86400) > Tempo;
end.
Tecla ENTER funcionar como TAB
Setar a propriedade KeyPreview do Form para True
Setar a propriedade Default de tados os botées do Form para False.
Criar um evento OnKeyPress para o Form como este
Procedure Tform1 FormKeyPress(Sender: Tobject; var Key: Char);
begin
if key = #13 then
Begin
Key:= #0;
Perform(Wm_NextDigCt,0,0)
end,
end
Utilizar ponto para separar decimais
Vocé pode combinar a variavel DecimalSeparator, ThousandSeparator do Delphi
com a evento OnKeyPress:
procedure TForm! EditiKeyPress(Sender: TObject; var Key: Char);
begin
If key ="! then key:= DecimalSeparator,
end;
Criando um Splash Screen (abertura)
Vocé pode criar uma tela de abertura no seu programa em Delphi. Apés ter criado
um formulario principal, crie um formulario para a tela de abertura. Aqui iremos
chama-lo de ABERTURAFORM
Depois de criar os dois formularios, clique no menu VIEW, na opeéo PROJECT
SOURCE, que permite que seja exibido 0 cédigo do arquivo principal do projeto.
Localize no cédigo a linha em que o formularia de abertura é criado e apague-a (ou
coloque em mado de abservacdo, inserindo // no inicio da linha)
Linha que deve ser apagada:
begin
Pagina 24Fungées para o Delphi
Application CreateF orm(TAberturaf orm, AberturaF orm); // Esta linha deve ser
apagada
end:
Apés remover a linha acima, insira as linhas abaixo antes da criacdo dos demais
formularios do seu aplicativo
Linhas que devem ser inseridas:
begin
AberturaF orm:= TAberturaF orm.Create(Application)
AberturaF orm.show
{Os demais formularios devem ser criados aqui}
AberturaF orm Hide:
AberturaF orm Free
Application Run.
End;
Os comandos.
AberturaF orm:= TAberturaF orm.Create(Application); - cria o farmulario
AberturaF orm.Show - exibe o formulario de abertura na tela
AberturaF orm Hide; - esconde o farmulario de abertura
AberturaF orm Free; - tira 0 formulario da memoria
Como limpar todos os edits de um form
procedure TFormt Button Click(Sender. TObject);
var i: integer,
begin
for i:= 0 to ComponentCount-1 do
begin
\f Components{ij.ClassName = 'TEdit' then
Tedit(Componentsfi)).clear, // ou TEdit(components[i)) text'="
end:
end.
Pagina 25Fungées para o Delphi
Formatar nimeros com zeros a esquerda
var
Numero: Integer,
begin
Numero:= 123:
Edit! text:= Format('%5 5d’ [Numera]); // resulta '00123'
end.
Obrigar a digitacao de caracteres mailisculos num campo memo
procedure TForm! Memo1KeyPress(Sender. TObject, var Key: Char),
begin
Key:= Upcase(Key)
end.
Imprimindo um campo memo via Canvas
Coloque na clasula Uses a unit printers
procedure TForm! Buttont Click(Sender: TObject);
var
i, altura : Integer,
sMemo : String;
begin
With Printer do
begin
Title:= 'Imprimindo memo’,
BeginDoc;
With Canvas do
begin
altura := TextHeight(’A’)
for i:= 1 to Memot Lines.Count do
begin
sMemo := Memot Lines{l];
TextOut(1, (i- 1) * Altura, sMemo);
end.
end
EndDoc;
end,
end
Pagina 25Fungées para o Delphi
Procura e substitui¢ao de string num campo memo
Procedure FindReplace (const Enc, subs: String; Var Texto: TMema);
Var
i, Posicao: Integer,
Linha: string:
Begin
For i:= 0 to Texto Lines.count- 1 do
begin
Linha := Texto. Lines[i}
Repeat
Posicao:=Pos(Ene,Linha);
if Posicao > 0 then
Begin
Delete(Linha Posicao,Length(Ene));
Insert(Subs Linha Posicao);
Texto Lines{i}'=Linha,
end,
until Posicao = 0;
end,
end
Como utilizar:
Procedure TFormt Button Click (Sender: TObject);
Begin
FindReplace(Edit! Text Edit2 Text, Memot);
end:
Pegando a linha e coluna atuais de um memo
With Memot do
begin
Line:= Perform(EM_LINEFROMCHAR SelStart, 0);
Column:= SelStart - Perform(EM_LINEINDEX, Line, 0);
end.
Trocando a cor de uma célula num DBGrid
No evento onDrawColumnCell do dbgrid colaque 0 cédigo para mudar a cor da fonte
do dbgrid e a chave do método para “desenhar" os dados.
procedure TFormt.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect,
DataCol: Integer, Column: TColumn; State: TGridDrawState )
begin
if (Column Field FieldName = 'NOMEDOCAMPO)) then
begin
if condigao then // coloque aqui sua condiraa
begin
Pagina 27Fungées para o Delphi
DBGrid1.Canvas.Brush.Color:= clAqua
DBGrid1 Canvas ont.Color:= clWindawText;
DBGrid1 Canvas FillRect(Rect);
DBGrid1 DefaultDrawCalumnCell(Rect, DataCal, Column, State);
end.
end
end
Trocando a cor da fonte num DBGrid
Coloque a propriedade defaultdrawdata do dbgrid em FALSE,
No evento onDrawColumnCell do dbgrid coloque 0 codigo para mudar a cor do font
do dbgrid e a chave do método para “desenhar" os dados.
procedure TForm! DBGrid{DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer, Column: TColumn;
State: TGridDrawState);
begin
If Condicao then Dbgrid1 .Canvas.Font.Color:= clFuchsia; // coloque aqui a cor
desejada
Dbgrid1 DefaultDrawDataCell(Rect, dogrid1 .columns{datacol] field, State)
end:
Gerenciando mais de uma linha selecionada num DBGrid
(Multiselect)
O DBGrid tem uma propriedade nao documentada chamada SelectedRows
(Toookmark). Com ela vocé pode gerenciar Multiselect da seguinte forma’
var
contador: Integer,
begin
With Dbgridt do
Begin
for contador:= 0 to Pred(SelectedRows.Count) do
Begin
Datasource Dataset Bookmark:= SelectedRows{contador}; // posiciona nos registros
selecionados do DBGrid
end,
end
Pagina 28Fungées para o Delphi
Commit (Delphi 3)
Inclua DBISaveChanges(Nome da Tabela handle) no evento After Post. Inclua em
uses a biblioteca DBIProcs.
procedure TForm! Table 1AfterPost(DataSet TDataSet),
begin
DBISaveChanges(TTable(Dataset) handle);
end
Commit (Delphi 2)
Inclua DBISaveChanges(Nome da Tabela handle) no evento After Post. Inclua em
uses a biblioteca DBIProcs.
procedure TForm! Table 1AfterPost(DataSet TDataSet),
begin
DBISaveChanges(Table! handle);
end.
Extrair o numero do registro atual em tabelas Paradox ou Dbase
Inclua a unit BDE na clausula uses do seu form.
procedure TForm! DataSource !DataChange(Sender: TObject; Field: TField);
var
CP: CurProps;
RP: RecPraps;
ReclD: Longint
begin
with Tablet do
begin
UpdateCursorPos,
Check(DbiGetCursorProps(Handle, CP);
Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RP));
if StrComp(CP.szTableType, szDBASE) = 0 then
ReclD := RP iPhyRecNum
else if StrComp(CP.szTableType, s2PARADOX) = 0 then
ReclD := RP.iSeqNum
else raise EDatabaseError.Create((ERRO! Nao é uma tabela Paradox ou dBASE.)
end.
Label! Caption:= IntToStr(ReclD) +' de ‘+ IntToStr(Table .recordcount);
end.
Pagina 29Fungées para o Delphi
Alterando Idapi32.Cfg Via Programa
Substitua AliasName pelo name do alias que vocé quer criar e em AliasPath pelo
path dos arquivos de dados que vocé quer no seu alias
Inclua na clausula "USES" as units BD e BDE
Check(DbiAddAlias(Nil, PChar(' AliasName '), Nil, PChar(' AliasPath’), True));
Criando tabelas
var
Tabela: Table;
Indices: TindexOptions;
begin
Tabela:= TTable.Create;
Indices:= [ixPrimary, IxUnique],
with Tabela do
begin
active:= false;
databasename:= 'c:\teste',
tablename:= 'Tabela’,
tabletype:= ttDefault;
fielddets.clear,
fielddets.add(‘Codigo’, ftinteger, 0, false)
indexdefs.clear,
indexdefs.add('Cadigo_Chave', ‘codigo’, Indices);
CreateTable
end.
Pagina 30Fungées para o Delphi
Data por extenso no Quickreport
var
nrdia: Integer;
diasemana: array[{..7] of String;
meses: array{1..12] of String;
dia, mes, ano: Ward;
begin
diasemanaft]:= ‘Domingo’;
diasemana[2]:= 'Segunda-feira’,
diasemanaf3}:= 'Terca-feira’
diasemanald]:= 'Quarta-feira’,
diasemanafs]:= 'Quinta-feira’
diasemanafé):= 'Sexta-feira’
diasemanaf/]:= 'Sabado’
meses[! ‘
meses[2
meses[3
meses[4
meses[5.
meses(6
meses[7
meses(8
meses(9
meses[! 0}:= ‘Outubro’,
meses[! 1]:= 'Novembra',
meses[!2]:= ‘Dezembro’,
DecodeDate(DATE,ano,mes,dia);
nrdia:= DayOfWeek(DATE);
QRLabel!.Caption:= diasemana(nrdia}+', 'INTTOSTR(dia)*" de '+meses[mes]+" de
‘'4INTTOSTR(ano).
Filtrando registros com o Quickreport (Delphi 2)
Vocé deve usar 0 evento OnFilter do componente Quickreport. O mesmo possui a
variavel PrintRecord do tipo Boolean. Para que o registro nao seja impresso, basta
atribuir False a esta variavel
procedure TForm! QuickReport Filter(var PrintRecord: Boolean);
begin
PrintRecord:= ( table 1 salario.value > 200 );
end:
Pagina 31Fungées para o Delphi
Extraindo o ano, més ou dia de uma data via SQL
Select * from nome_tabela where extract(year from campo_data) = 1997
Vacé pode extrair o més (MONTH) ou o dia (DAY).
Cria um clone Monocromatico de um outro Bitmap
function CreateDisabledBitmap(FOriginal: TBitmap; OutlineColor: TCalor): TBitmap
1/ Use-a assim
/image2 picture Bitmap °= CreateDisabledBitmap(Image Picture Bitmap,
clBtnF ace);
const
ROP_DSPDxax = $00E20746;
var
MonoBmp: TBitmap
IRect TRect;
begin
(Rect = Rect(0, 0, FOriginal Width, FOriginal Height);
Result := TBitmap.Create;
try
Result Width := FOriginal Width;
Result Height = F Original Height,
MonoBmp := TBitmap.Create;
try
with MonoBmp do
begin
Assign(F Original)
{SIFDEF S_D3}
Handle Type := bmDDB;
{SENDIF}
Canvas Brush Color := ciBlack;
if Monochrome then
begin
Canvas Font Color := clWhite;
Monochrome := False;
Canvas Brush Color := clWhite;
end
Monochrome := True;
end
with Result.Canvas do
begin
Brush Color := OutlineColor;
FillRect(IRect);
Brush Color := clBtnHighlight
SetTextColor(Handle, clBlack);
SetBkColor(Handle, clWhite);
Pagina 32Fungées para o Delphi
BitBIt(Handle, 1, 1, [Rect Right - IRect Left, [Rect Bottom - IRect.Top
MonoBmp.Canvas. Handle, 0, 0, ROP_DSPDxax);
Brush Color := clBtnShadow,
SetTextColor(Handle, clBlack);
SetBkColor(Handle, clWhite);
BitBIt(Handle, 0, 0, [Rect Right - IRect Left, [Rect Bottom - IRect.Top
MonoBmp.Canvas. Handle, 0, 0, ROP_DSPDxax);
End;
finally
MonoBmp Free;
end,
except
Result Free;
raise;
end.
end
Gerar Planilha no Excel
Var
Excel : Variant,
Linha : Inteiro;
begin
QryExtrato.Open;
Excel := Create OleObject('Excel Application’);
Excel. Visible := True
Excel Workbooks Add;
Excel WorkBooks[!] Sheets[1].Cellsft,1] := ‘Codigo’;
Excel WorkBooks[!] Sheets[1 ].Cellsf1 2] := 'Vendedor’
Excel WorkBooks[!] Sheets[!].Cells{t 3] := Tipo Negaciagao';
Excel WorkBoaks[!] Sheets[1].Cells{t 4] -= ‘Cliente’,
1
Excel WorkBooks[!].Sheets[1].Cells{1,5] := 'N° Tit
I adicione os campos desejados, seguindo a sequéncia acima
Linha := 2; 1 comegando a langar dados na segunda linha
With QryExtrato do
while not EOF do
begin
Excel. WorkBooks[1] Sheets[1].Cells[Linha,1] :=
QuotedStr(FieldByName(‘cdbeneficiario’) AsString);
Excel. WorkBooks|1] Sheets(1].Cells[Linha, 2
FieldByName('novendedor) Value
Excel. WorkBooks{1] Sheets[1] Cells[Linha,3] :=
FieldByName('notiponegociacao’) Value;
Excel. WorkBooksf1] Sheets[1].Cells[Linha 4] := FieldByName(‘nome').Value
Pagina 33Fungées para o Delphi
Excel. WorkBooksf1] Sheetsf1].Cells[Linha,5] :=
FieldByName('num_titular’) Asinteger,\
I adicione os campos desejados, seguindo a sequéncia acima
Linha := Linha + 1
Next;
end;
Excel WorkBooks[1],SaveAs('caminho do arquivo a ser salvo’);
DBGrid, Ocultando Colunas Dinamicamente com Popup
procedure Tform! AjustarColunasDoGrid( Grid : TDBGrid; PopMenu
TPopupMenu);
var
vitemMenu : TMenultem;
vCont : Integer;
begin
{Faz um loop nas colunas do menu }
for vCont := 0 to Grid.Columns.Count-1 do
begin
{Cria um item de menu e define algumas propriedades }
vitemMenu := TMenultem Create(Self)
vitemMenu.Caption := Grid.Columnsf vCant] DisplayName; { Caption }
vitemMenu.Checked := True; { Marcado }
vitemMenu Name := 'PM! + Grid. Name +'_' + IntToStr(vCont);
{Nome naa muito aconselhavel por o name, mas fica mais facil achar ele
depois }
vitemMenu.OnClick := MenuClick; { Associa 0 evento do clique }
PopMenu.ltems.Add( vitemMenu); { Adiciona o mesmo ao menu }
end;
{Associa o grid ao menu }
Grid PopupMenu := PopMenu;
end;
procedure Tform! MenuClick(Sender : TObject);
var
vNomeMenu : String;
vNomeGrid : String
vNroCalum : Integer;
VGrid : TDBGrid;
begin
{Aqui pega o nome do item de menu }
vNomeMenu := (Sender as TMenultem) Name;
{Pega o nome do grid }
Pagina 34Fungées para o Delphi
vNomeGrid := Copy(vNomeMenu, 3, Pos('_', vNomeMenu) - 3)
{Pega o numero da coluna, aumente o 3 no final se tiver mais que 999 colunas...}
vNroColum := StrToint( Copy( vNomeMenu, Pos('_', vNomeMenu) + 1 , 3));
{Pega uma referencia 0 componente grid associado }
VGrid := (Self FindComponent(vNameGrid) as TDBGrid)
{Ajusta 0 check do iter de menu
marca se estiver desmarcado ou vice versa }
(Sender as TMenultem).Checked := not (Sender as TMenultem).Checked;
{enfim, mostra ou aculta a coluna de acordo com o menu }
VGrid.Columnsf vNroColurn] Visible := (Sender as TMenultem).Checked;
end;
procedure Tform! FormCreate(Sender: TObject):
begin
{Chame a fungao passando apenas 0 nome do grid e do popup menu }
AjustarColunasDoGrid{ grdiProduto, PopupMenu)
end;
Transformar de minutos para horas
function MinutesToHaurs(const Min: integer): string;
const MinSeparator: array[boolean] of string = ('",0');
begin
Result := FormatFloat(’0,’, Min div 60) + MinSeparator[Min mod 60 < 10] +
IntToStr(Min mod 60);
end;
Campo auto incremento no Oracle e no Interbase
E interessante colocar o cédigo no evento BeforeOpen ou em OnNewRecord
Exemplo no Oracle:
Var
qry_Codigo : TADOQuery;
begin
if DseVenda state in [Dsinsert] then
begin
lRecupera 0 cédigo da venda do banco de dados utilizando a sequencia criada
aty_Cadigo := TADOQuery.Create(Selt);
aty_Cadigo.Connection := frm_Menu.Connection;
ary_Cadigo.SQL Add('Select custom.seq_venda.nextval fram dual’)
aty_Cadigo.Open;
DseVenda FieldByName('cdvenda’).Value :=
Pagina 35Fungées para o Delphi
ary_Codigo FieldByName('NEXTVAL') Value;
‘ary_Cadigo Free;
end;
Exemplo no Interbase:
Var
Qry_ID : TADOQuery;
begin
Try
Qry_ID := TADOQuery Create (Self);
Qry_ID.Connection := frm_Menu.Connection
Qry_ID. SQL Add('select gen_id(GEN_CLIENTE, 1) from rdb$database’)
Qry_1D.Open;
DsePrincipal FieldByName(id') Asinteger :=
Qry_ID FieldByName('gen_id') Asinteger,
DsePrincipal FieldByNama('dtcadastro’) AsDateTime := Date;
CmbClassificacao SetFocus,
Qry_ID Free;
except
‘ShowMessage('Erro ao gerar ID. Contacte 0 suporte técnico.’);
Qry_ID Free;
end;
Como desativar a protecao de tela
Na seeao Private do form adicione
procedure AppMsg(var Msg: TMsg; var Handled: Boolean);
Na seeao Implementation adicione
procedure TForm! AppMsg{var Msg: TMsg; var Handled: Boolean)
begin
if (Msg. Message = wm_SysCommand) and (Msg.wParam = sc_ScreenSave) then
Handled := true;
end;
No evento OnCreate do form adicione:
Application. OnMessage := AppMsg
Colaque 0 seguinte cédigo no evento onClick de um TButton:
procedure TForm! Button! Click(Sender: TObject);
begin
SendMessage(Application Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
end;
Pagina 36Fungées para o Delphi
Gira o texto
Procedure TFormt Button Click(Sender: TObject);
var
if: TLogFont;
tf: TFont
i: integer,
begin
with Formt.Canvas do
begin
Font Name := Verdana!
Font Size = 16;
tf:= TFont.Create;
tf Assign(Font);
GetObject(tf Handle, sizeof( lf), @If);
if fOrientation := 1000;
end.
For i:= 80000 Downto 1 do
Begin
if fEscapement := i;
tf Handle -= CreateFontindirect(I);
Formt Canvas Font Assign({t)
Form1 Canvas. TextOut(200, Height div 2, ‘Edgar da Cruz’)
WSleep(10); Este pode cria um Delay na execucao
end.
tf Free;
end.
Hint Redondo
unit Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrs, Comet, ExtCtrls;
type
TForm! = class(TForm)
Memat: TMemo;
Button: TButton;
Button2: TButton;
Button3: TButton;
Panell: TPanel;
procedure FormCreate(Sender: TObject);
Pagina 37Fungées para o Delphi
private
{Private declarations }
public
{Public declarations }
end.
const
TTS_BALLOON = $40;
TTM_SETTITLE = (WM_USER + 32);
var
Formt: TFormt
Tooltip: Cardinal;
ti: TToalInto;
buffer : array[0..258] of char,
implementation
{$R* DFM}
procedure CreateToalTips(hWnd: Cardinal);
begin
hToolTip += CreateWindowEx(0, Tooltips_Class32', nil, TTS_ALWAYSTIP or
TTS_BALLOON,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT) Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT), hWnd, 0, hinstance, nil);
if hToolTip <> 0 then
begin
SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or
SWP_NOSIZE or SWP_NOACTIVATE),
ti.cbSize := SizeOf(TToolinfo);
tiuFlags ‘= TTF_SUBCLASS;
ti hinst = hinstance;
end,
end
procedure AddToolTip(hwnd: dword; Ipti: PToolinfo; IcanType: Integer; Text, Title
PChar)
var
Item: THandle;
Rect TRect;
begin
Item := hWnd;
if (Item <> 0) AND (GetClientRect{Item, Rect) then
Pagina 38Fungées para o Delphi
begin
Ipti.hwnd := Item;
Ipti.Rect := Rect,
Ipti.lpszText := Text;
SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(Ipti));
FillChar(butffer, sizeof(butfer), #0);
Istrepy(buffer, Title);
if (IconType > 3) or (IconType <0) then IconType := 0:
SendMessage(hToolTip, TTM_SETTITLE, lcanType, integer(@buffer));
end.
end
procedure TForm1 FarmCreate(Sender: TObject);
begin
CreateToo!Tips(F orm! Handle);
1A linha abaixo usa 0 hint definido no abjeto
IA linha abaixo usa um hint mais personalizado
AddToolTip(Memo1 Handle, @ti, 0, 'Saiba mais..."chr(13)+
‘Esta caixa cantém algumas dicas sobre:"+chr(13)+
‘Como enviar sua mensagem...'+chr(13)+
‘Como receber suas mensagens...+chr(13)+
‘e muito mais...’, 'Mensagem a ser enviada’);
AddToo!Tip(Button1 Handle, @ti, 1, 'Incluir dados’, ");
W
AddToo!Tip(Button2 Handle, @ti, 2, 'Excluir dados’, ");
W
AddToo!Tip(Button3 Handle, @ti, 2, ‘Alterar dados’, ‘Mensagem’
end:
end.
end.
Observagao:
TipoDolcone pode ser:
0-Semicone
1 - Informacao
2- Aviso
3- Ero
A unit COMMCTRL deve ser acrescentada
Pagina 39Fungées para o Delphi
Informar a velocidade do Processador
Esta interessante fun¢ao recupera a velocidade de processamento aproximada da
CPU
const
ID_BIT=$200000; // EFLAGS ID bit
function GetCPUSpeed: Double
const
DelayTime = 500
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer.
begin
try
PriorityClass ‘= GetPriorityClass(GetCurrentProcess),
Priority == GetThreadPriority(GetCurrentThread),
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS)
SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10)
asm
dw 310Fh // rdtse
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh I! rdtse
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
except end;
end;
No evento OnClick, basta atribuir a saida da funcao a uma string
procedure TForm! Buttont Click(Sender: TObject);
Pagina 40Fungées para o Delphi
var cpuspeed: string;
begin
cpuspeed:=F ormat('%f MHz’, [GetCPUSpeed])
edit! text := cpuspeed:
end,
Instalar quickreport no delphi 7
Vai erm Component / Install Packages, clique em "ADD" abra seguinte pasta
C:\Arquivos ProgramasBorlandDelphi7_in
selecione 0 arquivo " delqrt70. bp! "
clique em Abrir
Pronto!
CRIANDO UMA MARCA D’AGUA
Procedure TFormt Button Click(Sender: TObject);
var
X,Y: Integer,
begin
brush.style := bsClear,
for y:=0 to image height-1 do
for x:=0 to image width-1 do
begin
if (x mod 2)=(y mod 2) then
image canvas pixels[x y]:=clWhite;
end:
end;
Mostra e esconde icones da area de trabalho
Para esconder:
ShowWindaw(FindWindow(nil,'Program Manager'),SW_HIDE);
Para mostrar:
ShowWindaw(FindWindow(nil
‘Program Manager’) SW_SHOW),
Alterando o papel de parede
Program wallpapr;
uses Registry, WinPracs;
procedure SetWallpaper(sWallpaper8MPPath : String; bTile : boolean )
var
reg: TReginiFile;
begin
Pagina 47Fungées para o Delphi
1 Mudando 0 Registro HKEY_CURRENT_USER
1! Contral Panel\Desktop
1 TileWallpaper (REG_SZ)
1! Wallpaper (REG_SZ)
reg := TReglniFile Create('Control PanelDesktop’ );
with reg do begin
WriteString{ ", ‘Wallpaper’, sWallpaperBMPPath )
if( bTile )then begin
WriteString( ", TileWallpaper', 1" )
end else begin
WriteString("", TileWallpaper'
end.
end
regFree;
1/ Mostrar que 0 parametro do sistema foi alterado
SystemParametersinfa( SPI_SETDESKWALLPAPER 0, Nil,
SPIF_SENDWININICHANGE }
end,
begin
SetWallpaper( 'c:\winnt\winnt.bmp’, False );
end
0)
Salvar a tela em BMP
function CaptureScreenRect( ARect: TRect ): TBitmap;
var
ScreenDC: HDC
begin
Result := TBitmap Create;
with Result, ARect do
begin
Width := Right - Left;
Height := Bottom - Top;
ScreenDC := GetDC( 0 )
try
BitBlt( Canvas Handle, 0, 0, Width, Height, ScreenDC, Left, Top, SRCCOPY );
finally
ReleaseDC( 0, ScreenDC );
end
1/ Palette := GetSystemPalette;
end
end;
Como utilizar:
Image picture Assign (CaptureScreenRect(Rect(0,0, Width Height)));
Pagina 42Fungées para o Delphi
Usando o Word dentro do Delphi
procedure TFrmFactoring ActnContratoExecute(Sender: TObject),
var
MSWord : variant
begin
Msword:=createaleObject("Word. Basic’),
Msword.AppShow,
Msword fileopen(c: actoringdocscontrato.doc’);
end.
Observagao: Incluir COMOB\ na clausula Uses.
Usando as setas para navegar nos campos
procedure TFrm._Exemplo_KeyDawn(Sender: TObject; var Key: Word; Shift:
TShiftState);
begin
if (key = 40) then // seta para baixa
begin
key = 0;
Selectnext((Sender As TWinControl) true true); / proximo
end;
if (key = 38) then // seta para cima
begin
key = 0;
Selectnext((Sender As TWinControl) false true); // anterior
end;
end:
Observagao: Usar na evento KeyDown de um determinado Edit
Fungo para validar o PIS
function validapis(Dado : String) : boolean
{Testa se o numero do pis é valida au nao}
var
i, wsoma, Wmi 1, Wdv,wdigito : Integer;
begin
if AllTrim(Dado) <>" Then
begin
wdv := strtoint(copy(Dado, 11, 1));
wsorna := 0;
wm t := 2;
fori:=1 to 10 do
Pagina 43Fungées para o Delphi
begin
wsorna := wsoma + (wm1 1 *strtoint(copy(Dado,11 - I, 1)));
if wm11 <9 then
begin
wm 1 = wmt1+1
end
else
begin
wmtt := 2;
end;
end,
wdigito := 11 - (wsoma MOD 11);
if wdigito > 9 then
begin
wdigito -= 0;
end;
if wdv = wdigito then
begin
validapis “= true
end
else
begin
validapis “= false
end;
end,
end.
Calcular a idade usando o MaskEdit
Primeiro coloque em seu form um componente MaskEdit e mude a mascara dele no
campo Edita Mask, para ##/#t/#####, depois coloque um edit e um button altere os
nomes deles como o exemplo abaixo
procedure TForm! Buttont Click(Sender: TObject);
var
DataHoje DataNase-TDate:
HAno,HMes HDia,NAno,NMes,NDia:Word;
Dia Mes,Ano:Integer,
begin
DataHoje:=Now,
DecodeDate(DataHoje,HAna HMes HDia)
DataNasc:=StrToDate(Nasc.Text);
DecodeDate(DataNasc NAno,NMes,NDia);
Dia:=(HDia - NDia);
Pagina 44Fungées para o Delphi
Mes:=(HMes - NMes);
Ano:=(HAno - NAno);
if(Mes < O)and(Dia < 0)then
begin
1D Clear;
1D.Text'=IntToStr(Ano - 1);
end
else if (Mes < O)and(Dia >=0)then
begin
ID Clear;
1D.Text'=IntToStr(Ano - 1);
end
else if (Mes > O)and(Dia >= 0)then
begin
ID Clear;
1D.Text:=IntToStr(Ano);
end
else if (Mes > O)and(Dia < O)then
begin
1D Clear;
1D.Text:=IntToStr(Ano);
end
else if(Mes = O)and(Dia >= 0)then
begin
1D Clear;
1D.Text:=IntToStr(Ano);
end
else if(Mes = O)and(Dia < Q)then
begin
1D Clear;
1D.Text'=IntToStr(Ano - 1);
end,
end;
Como definir seu proprio hotkey (Tecla Quente)
Primeiro fixe a propriedade KeyPreview do Form para TRUE
procedure TForm! FarmKeyDown(Sender: TObject; var Key: Word;
Shift. TShiftState);
begin
if (SsCtel in Shift) and (chr(Key) in ['A’, ‘a’]) then
ShowM essage(‘Ctr-A');
end,
Pagina 45Fungées para o Delphi
Como interceptar as teclas de fung6es no programa
Primeiro, colaque a propriedade KeyPreview da farmulario como TRUE. Depois,
insira este cédigo no evento OnKeyDown do farmulario:
procedure TForm! FormKeyDown(Sender: TObject; var Key: Word; Shift
TShiftState);
begin
if Key = VK_FS then
shawMessage('I pressed the F5 key’);
end:
\Vacé também pade usar as variéveis VK_F1 até VK_F 12 referentes as outras teclas
de funcao
DbGrid zebrado
exemplo abaixo mostra como deixar cada linha do componente DBGrid de uma
cor diferente, dando assim um efeito zebrado. O controle é feito no evento
OnDrawCalumnCell
unit Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids, StdCtris;
type
TForm! = class(TForm)
Button: TButton;
DBGrid1: TOBGrid;
Tablet: TTable,
DataSource 1: DataSource
procedure DBGrid { DrawColumnCell(Sender: TObject; const Rect TRect;
DataCol: Integer, Column: TColumn, State: TGridDrawState_)
private
{ Private declarations }
public
{ Public declarations }
end
var
Form: TFormt
implementation
{$R*. DFM}
procedure TForm1 DBGrid!DrawColumnCell(Sender: TObject; const Rect: TRect
DataCol: Integer, Column: TColumn; State: TGridDrawState_)
begin
Pagina 46Fungées para o Delphi
If odd(Table1.RecNo) then
begin
DBGrid1 Canvas Font.Color:
DBGrid1.Canvas.Brush Color:
end
else
begin
DBGrid1 Canvas Font.Color: ‘
DBGrid1.Canvas.Brush.Color:= clWhite;
end.
DBGrid1 Canvas FillRect(Rect);
DBGrid1 .Canvas.TextOut(Rect Left+2,Rect Top Column Field AsString);
end;
White;
clGreen
Retorna o espago livre em disco
Esta fungao sé funciona em Fat16
function DiskSpace( drive: byte ): String
var
bytes: longint
begin
bytes := DiskFree(drive);
if (bytes >= 0 ) then
result := inttostr( bytes div 1024 ) +’ KB’
else
result = '> 2GB’
end.
Para que o seu Form nfo seja redimensionado
Inclua o cédigo abaixo na Form que nao deseja redimensionar
type
TForm! = class(TForm)
private
{Private declarations }
procedure WMGetMinMaxinfo(var Msg: TWMGetMinMaxinfo),
message WM_GETMINMAXINFO;
procedure WMlinitMenuPopup(var Msg: TWMinitMenuPopup);
message WM_INITMENUPOPUP;
procedure WNINCHitTest(var Msg: TWMNCHitTest);
message WM_NCHitTest,
public
{ Public declarations }
end
var
Formt: TFormt
Pagina 47Fungées para o Delphi
implementation
{$R* DFM}
procedure TForm!.WMGetMinMaxinfo(var Msg: TWMGetMinMaxinfo),
begin
inherited;
with Msg.MinMaxinfo* do
begin
ptMinTrackSize x
ptMaxTrackSize
ptMinTrackSize y
ptMaxTrackSize
end.
end
procedure TForm!.WMinitMenuPapup(var Msg: TWMInitMenuPopup);
begin
inherited;
if Msg.SystemMenu then
EnableMenulter(Msg.MenuPopup, SC_SIZE, MF_BYCOMMAND or MF_GRAYED)
end,
procedure TForm!.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
with Msg do
if Result in [HTLEFT, HTRIGHT, HTBOTTOM
HTBOTTOMRIGHT HTBOTTOMLEFT, HTTOP,
HTTOPRIGHT, HTTOPLEFT] then
Result= HTNOWHERE
end:
Como mover um componente em Run-time
No exempla abaixo deve ser incluido um componente Button. Para testar este
exemplo mantenha a tecla CTRL pressionada clique com 0 mouse no componente
Button. Feito isto, basta arrastar 0 componente Button para qualquer lado
type
TForm! = class(TForm)
Button: TButton;
procedure Button! MouseDown(Sender: TObject, Button: TMouseButton;
Shift: TShiftState; X, Y: Integer),
procedure Button !MouseMove(Sender: TObject; Shift: TShiftState; x,
Y: Integer);
procedure Button !MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{Private declarations }
Pagina 48Fungées para o Delphi
public
{Public declarations }
MouseDownSpot : TPoint;
Capturing : bool;
end,
var
Formt: TFormt
implementation
{$R* DFM}
1/ Evento OnMouseDown do Farm
procedure TForm! Button! MouseDown(Sender: TObject; Button: TMouseButton;
Shift TShiftState; X, Y: Integer);
begin
if ssCtel in Shift then begin
SetCapture(Button! Handle)
Capturing := true;
MouseDownSpot X := x
MouseDownSpot Y “= Y;
end:
end;
1/ Evento OnMouseMove do Form
procedure TForm! Button MouseMove(Sender:
TObject; Shift TShiftState; X, Y: Integer);
begin
if Capturing then begin
Button Left'= Button’ Left-(MouseDownSpot x-x);
Button! Top:= Button! Top - (MouseDownSpat-y);
end.
end;
1/ Evento OnMouseUp do Form
procedure TForm! Button MouseUp(Sender: TObject; Button: TMouseButton:
Shift TShiftState; X, Y: Integer);
begin
if Capturing then begin
ReleaseCapture;
Capturing := false
Button t Left := Button Left - (MouseDownSpotx -x):
Button! Top := Button’ Top - (MauseDownSpat y - y}
end.
end
Pagina 49Fungées para o Delphi
Como verificar se a tecla TAB foi pressionada
Para testar 0 exemplo abaixo inclua alguns camponentes Edit em seu form
type
TFormt = class(TForm)
Edit: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
private
{Private declarations }
procedure ProcessaMsa(var Msg: TMsg; var Handled: Boolean);
public
{Public declarations }
end:
var
Formt: TFormt
implementation
{$R* DFM}
procedure TForm! ProcessaMsg(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_KEYDOWN then
begin
if Msg.wParam = VK_TAB then
Caption := Tecla Tab’;
end.
end
1/ Evento OnCreate
procedure TForm1 FarmCreate(Sender: TObject);
begin
Application.OnMessage := ProcessaMsg
end,
Executar um AVI no Form
procedure TForm1 BitBtn 1 Click(Sender: TObject);
begin
with MediaPlayert do
begin
FileName := ‘c:\windows\help\scroll avi’
Open
Display := Form2;
Form2.Show;
Play;
end;
end
Pagina 60Fungées para o Delphi
Colocar zeros a esquerda de um valor digitado no
componente Edit
procedure TForm1 Edit Exit(Sender: TObject)
begin
Edit! Text := FormatFloat(‘000000' StrToFloat(Edit! Text))
end.
Cancelar o pressionamento de uma tecla
procedure TForm! EditiKeyPress(Sender: TObject; var Key: Char);
begin
if Key =" then
Key *= #0;
end,
Obs. O exemplo acima cancela o pressionamento de uma virgula em um
componente EDIT
Utilizar o MessageBox com parametros
var
Button: Integer,
Mensagemi : Array(0..79] of Char;
Mensagem2 : Array[0..79] of Char,
begin
StrCopy(Mensagemt, Edit! Text + '* + Edit2 Text);
StrPCopy(Mensagem2, Edit3.Text + '* + Edit Text);
Button := Application MessageBox (Mensagem2,Mensagem!
MB_YESNOCANCEL+
mb_DefButton1 +MB_ICONQUESTION).
end
Retorna a cor de um determinado componente no formato
string
procedure TFormt BitBtn 1 Click(Sender: TObject);
begin
1 Retorna a cor do form
Caption := ColorToString(F ormt Color)
1 Muda a cor da form
Formt Color := StringToColor('ciBlack’);
end:
Pagina 81Fungées para o Delphi
Verifica se existe o diretério
procedure TFormt Button Click(Sender. TObject);
begin
if DirectoryExists(Edit! Text) then
Label! Caption °= Editt Text + exists’
else
Label! Caption := Edit! Text + ‘ does not exist’
end.
Bloquear a tecla CtritDel do DBGrid
procedure TForm! DBGridiKeyDown(Sender: TObject; var Key: Word;
Shift TShiftState);
begin
if ((Shift = [ssCtrl]) and (key = vk_delete)) THEN.
Abort,
end,
Para criar uma janela nao retangular
Vacé deve criar uma Regiao do Windows e usar a funcdo da API SetWindowRgn,
desta maneira (isto funciona apenas em D2/D3)
var
hR : THandle:
begin {cria uma Regiao eliptica}
hR := CreateEllipticRan(0,0,100,200),
SetWindowRgn(Handle,hR, True);
end;
Fecha todos os arquivos
var
it integer,
begin
with Session do
for i= 0 to DatabaseCount - 1 do
Databases[!].Close;
end.
Hint com quebra de linhas
Para incluir mais de uma linha no Hint vacé deve utilizar a evento OnMouseMave de
cada componente
Veja abaixo como ficara 0 cédigo em um Edit por exemplo
procedure TForm! EditiMouseMove(Sender: TObject; Shift: TShiftState; X,
Pagina 62Fungées para o Delphi
Y: Integer);
begin
Edit! hint = ‘Primeira Linha'+#13+'Segunda Linhal+#13+
“Terceira Linhal+#13+ Quarta Linha’;
end;
Obs. Nao esquecer de mudar para TRUE 0 evento ShowHint.
Imprimindo sem passar pelo gerenciador de impressao
procedure TForm! Buttont Click(Sender: TObject);
var
F : TextFile;
i: integer;
begin
AssignFile(F 'LPT1')
Rewrite(F)
i=,
Writeln
Writeln
Writeln
Writeln
F Teste de impressao - Linha 0’);
F Teste de impressao - Linha 1')
F #27#15+'Teste de Impressdo - Linha 2')
F Teste de impressao - Linha 3');
Writeln(F #27#18+'Teste de Impressao - Linha 4’)
Writeln(F "Teste de impressao - Linha 5’)
Writeln(F #12); // Ejeta a pagina
CloseFle(F))
end.
Fechar um aplicativo Delphi a partir de outro aplicativo
Delphi
procedure TForm1 Button| Click(Sender: TObject);
var
Win: THandle;
begin
Win := FindWindow(nil,'Formt");
if Win <> 0 then
PostMessage(Win, WM_CLOSE,0,0)
else
ShowMessage(‘Programa nao encontrado’);
end;
Obs. No exemplo acima foi utilizado o POSTMESSAGE para enviar uma mensagem
WM_CLOSE para a janela principal
Mostrar o HINT num Panel
procedure TFormt FormCreate(Sender: TObject);
begin
Pagina 63Fungées para o Delphi
Application.OnHint := DisplayHint;
end,
procedure TForm! DisplayHint(Sender: TObject)
begin
Panel! Caption := Application Hint,
end;
Obs. Nao é necessério Atribuir True para o ShawHint
Retornar o nome do usuario que esta editando o registro
procedure TForm1 BitBtn 1 Click(Sender: TObject);
begin
try
Table Edit;
except on E:EDBEngineError do
if E.Errors[0].ErrorCade = 10241 then
begin
ShowM essage(‘Mensagem de erro’+E.Errors{0] Message );
ShowMessage( ‘Arquivo com erro'+€ Errars{1] Message }
ShowMessage( ‘Nome do usuario'+ E.Errors[2]. Message );
end,
end
end
Retornar o nome do usuario que esta com a tabela
Exclusiva
procedure TForm1 Bit&tn1 Click(Sender: TObject);
begin
try
Tablet Close;
Table 1 Exclusive := True;
Table! Open,
except on E:EDBEngineError do
if E.Errors[0].ErrorCade = 10243 then
begin
ShowM essage(‘Mensagem de erro’+E.Errors{0] Message );
ShowMessage( ‘Arquivo com erro'+€ Errars{1] Message }
ShowMessage( ‘Nome do usuario'+ E.Errors[2]. Message );
end
end;
end
Configuragao do BDE para ambiente de rede
Para o seu aplicativo feito em Delphi radar em rede, vocé deve instalar 0 BDE em
todas as estapdes. No BDE de cada estacao, vocé deve colocar no parametra NET
Pagina 64Fungées para o Delphi
DIR do drive PARADOX o local ande estao as bases de dados e na PATH do Alias
especificar 0 caminho das base de dados. Mas muita atencdo, todas as estacdes
devem estar com a mesma configurapa0 do BDE. Veja o exemplo abaixo para
configuraco do parametro NET DIR do drive PARADOX e o PATH do Alias.
Estacao n.1
NET DIR FA
Path do Alias F:\DIRETORIO
Estagao n.2
NET DIR FA
Path do Alias F:\DIRETORIO
Estacao n.3
NET DIRFA\
Path do Alias F:\DIRETORIO
Nao é aconselhavel que os aplicativos feitos em Delphi 1, sejam executados no
servidor da base de dados, pois o PARADOX apresenta problemas de corrupeao de
arquivos e indices neste caso. E aconselhavel que no servidor vacé coloque
somente as bases de dados. Mas caso vocé tenha necessidade de utilizar o servidar
vocé pode utilizar uma salucdo alternativa para o prablema do PARADOX, esta
solugao esta sendo satisfatéria na maioria dos casos. Digamos que a letra do drive
de rede que vocé vai acessar a servidor, seja a letra “F:", entdo, faca o seguinte
Coloque a linha abaixa no arquivo AUTOEXEC BAT, do servidor.
SUBST F: C
Configure 0 BDE do servidor para que ele acesse o drive "F:”
Esta linha devera ser colocada apenas no servidor, com isso vacé passa a ter em
seu servidor, um drive virtual para acessar 0
drive C:, evitando 0 problema do PARADOX.
No Delphi 2 e Delphi 3, vocé deve utilizar um instalador de programas. No CD do
Delphi 2 e Delphi 3 existe um instalador
chamado InstallShield para fazer a instalagao e configuragao do aplicativo e do BDE
Veja abaixa as exemplos da configuraraa do BDE p/ Delphi 2 e 3:
Servidor Estarao 1
NET DIR \\SERVIDORIC NET DIR \\SERVIDORIC
PATH DO ALIAS \\SERVIDORICIDIRETORIO PATH DO ALIAS
\\SERVIDORICIDIRETORIO
LOCAL SHARE TRUE LOCAL SHARE FALSE
Estacao 2 Estacao 3
NET DIR \\SERVIDORIC NET DIR \\SERVIDORIC
PATH DO ALIAS \\SERVIDORICIDIRETORIO PATH DO ALIAS
\\SERVIDORICIDIRETORIO
LOCAL SHARE FALSE LOCAL SHARE FALSE
DICA:
O executavel pode ser calocado em cada maquina da rede, diminuinda assim 0
trafego de rede
Pagina 55Fungées para o Delphi
Como criar um Form de Apresentagao (Splash Form) como
o do WORD
Para voeé criar um pequeno Form de apresentacdo enquanto seu pragrama é
carregado au enquanto sua aplicacao gera indices, etc. Crie seu Form de
Apresentacdo (ApresF orm) e depais no menu View opeao Project Source, inclua a
seguinte codigo
program Mastapp;
uses
Forms,
Apres in ‘APRES PAS’ {ApresF orm}
Aplicacao01 in ‘APLICO1.PAS’ {Aplic1F orm}
Aplicacao02 in ‘APLICO2.PAS’ {AplicO2F orm}
{$R* RES}
begin
ApresF orm := TApresF orm Create(Application)
ApresF orm.Show
ApresF orm.Update
Application.CreateF orm(TAplic01F orm, AplicO1F orm);
Application CreateF orm(TAplic01F arm, Aplic02F orm);
ApresF orm Hide
ApresForm-Free,
Application Run:
end
Verifica se o Form, ja esta ativo, Delphi1, Delphi2 e Delphi3
procedure TForm1 Button' Click(Sender. TObject);
var Found j : Integer;
begin
Found
for i:= 0 to Screen FormCount- 1 do
if Screen Forms] is TF orm? then
Found :=
if Found >= 0 then
Screen.Forms[F ound] Shaw
else
begin
Form2 := TForm2.Create(Self);
Form2.Show;
end;
end
Converter a primeira letra de um Texto em maiuscula
procedure TForm! EditiKeyPress(Sender: TObject; var Key: Char);
begin
Pagina 56Fungées para o Delphi
with Sender as TEdit do
if (SelStart = 0) or (Text{SelStart] = "*) then
if Key in ['a’.’z] then
Key := UpCase(Key);
end:
Verifica se o Form, ja esta ativo
procedure TForm1 Button' Click(Sender. TObject);
var Found j : Integer;
begin
Found :=-1
for i:= 0 to Screen.FormCount- 1 do
if Screen Forms] is TF orm? then
Found
if Found >= 0 then
Screen.Forms[F ound] Shaw
else
begin
Form? := TForm2.Create(Self);
Form2.Show;
end;
end
Mostrar as fontes TrueType instaladas no Windows
Para testar 0 exemplo abaixo inclua em seu formularia um componente ListBox, um
componente Label e um campanente ListBox
11 Evento OnClick do componente LisBox
procedure TForm! ListBox! Click(Sender: TObject);
begin
{Atribui a propriedade Caption do componente Label o name da fonte selecionada
apenas para visualizacao}
Label! Caption := ListBox! Items[ListBox1 Itemindex];
{Atribui ao componente Label! na propriedade Name da propriedade Font o nome
da fonte selecionada
para que o componente Label para utilizar a mesma fonte }
Label! Font Name := ListBox Items[ListBox1 Itemindex];
end;
1/ Evento OnClick do componente Button.
procedure TForm1 Button! Click(Sender. TObject);
begin
{Carrega as fontes instaladas no Windows para 0 companente ListBox}
ListBoxt Items := Screen Fonts
end.
Pagina 87Fungées para o Delphi
ShowMessage com quebra de linhas
procedure TForm! Button' Click(Sender. TObject);
var
MSG : String;
begin
MSG := ‘Mensagem da Primeira Linha'+#13+'Mensagem da Segunda
Linha’+#13+’Mensagem da Terceira Linha’,
ShowMessage(MSG);
end,
ATENCAO. A quebra foi possivel através do codigo #13
Veja abaixo como retornar informagées do ambiente DOS
No exempla abaixo deve ser incluido na form um componente Button, um
componente StringGrid e um componente ListBox
type
TFormt = class(TForm)
ListBox1: TListBox;
Button: TButton;
StringGrid1: TStringGrid
procedure Button {Click(Sender: TObject):
private
{Private declarations }
public
{Public declarations }
end;
var
Formt: TFormt
implementation
{$R* DFM}
1/ Evento OnClick do componente Button
procedure TForm! Button' Click(Sender: TObject);
var
Env: PChar,
i: Integer,
S : String;
PosEq : Integer,
begin
Env := GetEnvironmentStrings;
With ListBox1,StringGrid1 do begin
While Env' <> #0 do begin
Items Add(StrPas(Env));
Inc(Env,StrLen(Env)+1
end.
RowCount := Items.Count,
for i:= 0 to Pred(Items.Count) do begin
Pagina 88Fungées para o Delphi
PosEq := Pos('=" Items[i);
Cells{0 \i] := Copy(Itemsfi],1,PosEq-1);
Cells(t i
Copy(Items[i], PosEq+ Length(Items{i));
end:
end;
end
Como colocar um componente ComboBox em um
componente StringGrid
Inclua no seu Form um componente ComboBox e um companente StringGrid
type
TForm! = class(TForm)
StringGrid1: TStringGrid
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure ComboBox! Change(Sender: TObject),
procedure ComboBox Exit(Sender: TObject);
procedure StringGrid 1 SelectCell
(Sender: TObject, Col, Row: Integer;
var CanSelect: Boolean);
private
{Private declarations }
public
{ Public declarations }
end
var
Formt: TFormt
implementation
{$R * DFM}
I/ Evento OnCreate do Form
procedure TForm! FormCreate(Sender: TObject);
begin
{Ajusta a altura do ComboBox coma altura da linha do StringGrid}
StringGrid1.DefaultRowHeight -= ComboBox! Height,
{Esconde 0 ComboBox}
ComboBox! Visible = False;
end
11 Evento OnChange do componente ComboBox
procedure TForm! ComboBox! Change
(Sender: TObject);
begin
StringGrid1 .Cells[StringGrid1 Col StringGrid'1 Row]
= ComboBox1 tems{ComboBox! Itemindex],
Pagina 69Fungées para o Delphi
ComboBox! Visible = False;
StringGrid1 SetFocus;
end:
1/ Evento OnExit do componente ComboBox
procedure TForm! ComboBox 1Exit
(Sender: TObject);
begin
StringGrid1 .Cells[StringGrid1 Col, StringGrid1 Row]
= CombaBoxt Items{ComboBoxt Itemindex];
ComboBox! Visible = False;
StringGrid1 SetFocus;
end.
1/ Evento OnSelectCell do componente StringGrid
procedure TForm! StringGrid1SelectCell(Sender: TObject; Col, Row: Integer;
var CanSelect: Boolean);
var
R: TRect
begin
if ((Col = 3) AND
(Row <> 0)) then begin
R= StringGrid1 CellRect(Col, Row);
R Left = R.Lett + StringGrid1 Left
R Right = Right + StringGrid! Left;
RTop := R.Top + StringGrid1 Top;
R Bottom := R-Battom + StringGrid1 Top;
ComboBox! Left := R.Left + 1;
ComboBox! Top := R.Top +1
ComboBox! Width := (R Right + 1) - R Left
ComboBox1 Height := (R Bottom + 1) - R-Top;
ComboBox! Visible = True;
ComboBox! SetFocus;
end,
CanSelect := True;
end.
Como retornar A coluna ativa do DBGrid
unit Unit;
interface
use
Windows, Messages, SysUtils, Classes, Graphics
Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids;
type
TFormt = class(TForm)
DBGrid1: TDBGrid;
Pagina 60Fungées para o Delphi
Table: TTable;
DataSource 1: TDataSource
procedure DBGrid1Col€nter(Sender: TObject);
end
var
Formt: TFormt
implementation
{$R* DFM}
procedure TForm! DBGrid1ColEnter(Sender. TObject)
begin
Caption := DBGrid1 SelectedField FieldName;
end.
Como mover o conteudo da calculadora do Windows para
um Edit
Neste exemplo deve ser incluido um componente Timer.
type
TFormt = class(TForm)
Timer: TTimer,
procedure Timer! Timer(Sender: TObject);
procedure FormPaint(Sender: TObject),
procedure FormCreate(Sender: TObject),
procedure FormResize(Sender: TObject),
private
Hour, Minute, Second: Word; {hora corrente}
XCenter, YCenter, Radius: Integer, {tamanho atual do formulario}
public
procedure DrawHand (XCenter, YCenter, Radius,
BackRadius: Integer, Angle: Real),
end;
var
Formt: TFormt
implementation
{$R * DFM}
1/ Evento OnTimer do componente Timer
procedure TFormt Timer! Timer(Sender: TObject);
var
HSec: Word; {valor temporario, nao utilizado}
begin
{obtém a hora do sistema}
DecodeTime (Time, Hour, Minute, Second, HSec);
Refresh;
end;
11 Evento OnPaint do componente Form
Pagina 61Fungées para o Delphi
procedure TForm! FormPaint(Sender: TObject);
var
Angle: Real
1,X, Y, Size: Integer,
begin
{ealcula 0 centro do formulario}
XCenter := ClientWidth div 2;
YCenter = ClientHeight div 2;
if XCenter > YCenter then
Radius := YCenter- 10
else
Radius := XCenter- 10
{0. Desenha o marcador de horas}
Canvas Pen.Color := clYellow,
Canvas Brush Color := clYellow,
Size != Radius div 60 + 1
for |:= Oto 11 do
begin
Angle := 2* Pit! / 12;
X = XCenter - Round (Radius * Cos (Angle));
Y := YCenter - Round (Radius * Sin (Angle)}
Canvas Ellipse (x - Size, Y - Size, X +
Size, Y + Size),
end,
{1. Desenha o ponteira dos minutos}
Canvas Pen Width = 2;
Canvas Pen.Color := ciBlue;
Angle := 2* Pi* Minute / 60;
DrawHand (XCenter, YCenter, Radius * 90 div 100, 0, Angle);
{2. Desenha o ponteiro das horas: percentual dos minutos adicionado a hora para
mover o ponteiro suavemente}
Angle := 2* Pi* (Hour + Minute / 60) / 12;
DrawHand (XCenter, YCenter,
Radius * 70 div 100, 0, Angle);
{3. Desenha o ponteira dos segundos}
Canvas Pen Width := 1;
Canvas Pen Color := clRed;
Angle := 2* Pi* Second / 60;
DrawHand (XCenter, YCenter, Radius,
Radius * 30 div 100, Angle);
end;
procedure TForm1 DrawHand (XCenter, YCenter,
Radius, BackRadius: Integer, Angle: Real);
begin
Angle := (Angle + 3*Pi/2);
Pagina 62Fungées para o Delphi
Canvas MoveTo (
XCenter - Round (BackRadius * Cos (Angle)
YCenter - Round (BackRadius * Sin (Angle))
Canvas LineTo (
XCenter + Round (Radius * Cos (Angle)
YCenter + Round (Radius * Sin (Angle)))
end;
1/ Evento OnCreate do Form
procedure TForm! FarmCreate(Sender: TObject);
begin
{18 as horas antes do formulario ser exibido}
Timer Timer (self);
end;
1/ Evento OnResize do Form
procedure TForm! FormResize(Sender: TObject):
begin
Refresh;
end:
),
)
Pagina 63