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 21