0% acharam este documento útil (0 voto)
798 visualizações63 páginas

Delphi Funcoes

Este documento fornece várias dicas e funções úteis para programação no Delphi, incluindo como acessar arquivos em rede, criar telas de abertura, validar entradas, capturar telas, trabalhar com datas, configurar impressoras, procurar arquivos e executar programas externos.

Enviado por

ronaldobastos
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
798 visualizações63 páginas

Delphi Funcoes

Este documento fornece várias dicas e funções úteis para programação no Delphi, incluindo como acessar arquivos em rede, criar telas de abertura, validar entradas, capturar telas, trabalhar com datas, configurar impressoras, procurar arquivos e executar programas externos.

Enviado por

ronaldobastos
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 63

Funes para o Delphi

APOSTILA
DICAS DE PROGRAMAO DELPHI

Professor Edgar Caldeira da Cruz

Araras/SP 2013
Pgina 1

Funes para o Delphi

SUMRIO
Acessando arquivos Paradox em rede ............................................................................................................. 5 Confirmar o diretrio............................................................................................................................................. 5 Hint com quebra de linha ..................................................................................................................................... 5 Testa se existe disco no drive A ...................................................................................................................... 5 Verifica se o Form j est ativo .......................................................................................................................... 6 Pegando o nome do usurio e o nome da empresa no Windows ................................................................ 6 Como criar uma tela de abertura (Splash Screen) .......................................................................................... 7 Como validar a entrada de uma caixa de texto................................................................................................ 7 A tecla ENTER para funcionar como TAB.................................................................................................. 7 Capturar tela .......................................................................................................................................................... 8 Subtrair/adicionar N meses a uma data ............................................................................................................ 8 Data por extenso................................................................................................................................................... 8 Habilitar e desabiliar a senha do protetor de tela ............................................................................................ 8 Sobrescrevendo um evento ................................................................................................................................ 9 Como evitar a mensagem de erro Key Violation ............................................................................................. 9 Como evitar a mensagem de erro Key Violation ............................................................................................. 9 Executar um PACK em tabelas Paradox ........................................................................................................ 10 Verificar se o registro est travado .................................................................................................................. 10 Cursor customizado ........................................................................................................................................... 12 Criando atalhos ................................................................................................................................................... 12 Emular o pressionamento de uma tecla .......................................................................................................... 13 Fechar um aplicativo a partir do Delphi ........................................................................................................... 13 Configurar o Delphi para acessar tabelas do Access ................................................................................... 13 Apagar um subdiretrio...................................................................................................................................... 14 Testar a impressora ........................................................................................................................................... 14 Validar datas........................................................................................................................................................ 15 Procurar arquivos ............................................................................................................................................... 15 Abrir arquivos com aplicativo associado ......................................................................................................... 16 Fazer um TEdit aceitar apenas nmeros ........................................................................................................ 17 Alterar o papel de parede do Windows ........................................................................................................... 17 Extrair o nmero de cores do modo de vdeo corrente................................................................................. 17 Habilitar e desabilitar barra de tarefas............................................................................................................. 17 Habilitar e desabilitar ctrl+alt+del ..................................................................................................................... 18 Alterar a data e a hora do sistema ................................................................................................................... 18 Extrair o tamanho de um arquivo ..................................................................................................................... 19 Extrair o cone de um executvel ..................................................................................................................... 19 Verificando a memria ....................................................................................................................................... 19 Nmero de srie do hd ...................................................................................................................................... 20 Mapear uma pasta na rede ............................................................................................................................... 20 Pegar nome do usurio na rede ....................................................................................................................... 21 saber o estado das teclas Num lock, Caps lock e Scroll lock ...................................................................... 21 Testando drives................................................................................................................................................... 21 Executando programas externos ..................................................................................................................... 22 Reproduzindo sons wav, sem o componente mediaplayer .......................................................................... 22 Manipular arquivos INI ....................................................................................................................................... 22 Exponenciao.................................................................................................................................................... 23 Aguardar um determinado n de segundos .................................................................................................... 24 Tecla ENTER funcionar como TAB ................................................................................................................. 24 Utilizar ponto para separar decimais ............................................................................................................... 24 Criando um Splash Screen (abertura) ............................................................................................................. 24 Como limpar todos os edits de um form ........................................................................................................ 25

Pgina 2

Funes para o Delphi


Formatar nmeros com zeros esquerda ...................................................................................................... 26 Obrigar a digitao de caracteres maisculos num campo memo ............................................................. 26 Imprimindo um campo memo via Canvas ....................................................................................................... 26 Procura e substituio de string num campo memo ..................................................................................... 27 Pegando a linha e coluna atuais de um memo .............................................................................................. 27 Trocando a cor de uma clula num DBGrid ................................................................................................... 27 Trocando a cor da fonte num DBGrid .............................................................................................................. 28 Gerenciando mais de uma linha selecionada num DBGrid (Multiselect) ................................................... 28 Commit (Delphi 3) ............................................................................................................................................... 29 Commit (Delphi 2) ............................................................................................................................................... 29 Extrair o nmero do registro atual em tabelas Paradox ou Dbase ............................................................. 29 Alterando Idapi32.Cfg Via Programa ............................................................................................................... 30 Criando tabelas ................................................................................................................................................... 30 Data por extenso no Quickreport ..................................................................................................................... 31 Filtrando registros com o Quickreport (Delphi 2) ........................................................................................... 31 Extraindo o ano, ms ou dia de uma data via SQL ....................................................................................... 32 Cria um clone Monocromtico de um outro Bitmap ...................................................................................... 32 Gerar Planilha no Excel ..................................................................................................................................... 33 DBGrid, Ocultando Colunas Dinamicamente com Popup ............................................................................ 34 Transformar de minutos para horas................................................................................................................. 35 Campo auto incremento no Oracle e no Interbase ........................................................................................ 35 Como desativar a proteo de tela .................................................................................................................. 36 Gira o texto .......................................................................................................................................................... 37 Hint Redondo ...................................................................................................................................................... 37 Informar a velocidade do Processador ............................................................................................................ 40 Instalar quickreport no delphi 7 ........................................................................................................................ 41 Mostra e esconde cones da rea de trabalho ............................................................................................... 41 Alterando o papel de parede ............................................................................................................................. 41 Salvar a tela em BMP ........................................................................................................................................ 42 Usando o Word dentro do Delphi ..................................................................................................................... 43 Funo para validar o PIS ................................................................................................................................. 43 Calcular a idade usando o MaskEdit ............................................................................................................... 44 Como definir seu prprio hotkey (Tecla Quente) ........................................................................................... 45 Como interceptar as teclas de funes no programa ................................................................................... 46 DbGrid zebrado ................................................................................................................................................... 46 Retorna o espao livre em disco ...................................................................................................................... 47 Para que o seu Form no seja redimensionado ............................................................................................ 47 Como mover um componente em Run-time ................................................................................................... 48 Como verificar se a tecla TAB foi pressionada .............................................................................................. 50 Executar um AVI no Form ................................................................................................................................. 50 Colocar zeros a esquerda de um valor digitado no componente Edit ........................................................ 51 Cancelar o pressionamento de uma tecla ...................................................................................................... 51 Utilizar o MessageBox com parmetros.......................................................................................................... 51 Retorna a cor de um determinado componente no formato string.............................................................. 51 Verifica se existe o diretrio .............................................................................................................................. 52 Bloquear a tecla Ctrl+Del do DBGrid ............................................................................................................... 52 Para criar uma janela no retangular .............................................................................................................. 52 Fecha todos os arquivos.................................................................................................................................... 52 Hint com quebra de linhas ................................................................................................................................. 52 Imprimindo sem passar pelo gerenciador de impresso .............................................................................. 53 Fechar um aplicativo Delphi a partir de outro aplicativo Delphi ................................................................... 53 Mostrar o HINT num Panel................................................................................................................................ 53 Retornar o nome do usurio que esta editando o registro ........................................................................... 54 Retornar o nome do usurio que esta com a tabela Exclusiva ................................................................... 54

Pgina 3

Funes para o Delphi


Configurao do BDE para ambiente de rede ............................................................................................... 54 Como criar um Form de Apresentao (Splash Form) como o do WORD ................................................ 56 Verifica se o Form, j esta ativo, Delphi1, Delphi2 e Delphi3 ...................................................................... 56 Converter a primeira letra de um Texto em maiscula ................................................................................. 56 Verifica se o Form, j esta ativo ....................................................................................................................... 57 Mostrar as fontes TrueType instaladas no Windows .................................................................................... 57 ShowMessage com quebra de linhas .............................................................................................................. 58 Veja abaixo como retornar informaes do ambiente DOS ......................................................................... 58 Como colocar um componente ComboBox em um componente StringGrid ............................................. 59 Como retornar A coluna ativa do DBGrid........................................................................................................ 60 Como mover o conteudo da calculadora do Windows para um Edit .......................................................... 61

Pgina 4

Funes para o Delphi

Acessando arquivos Paradox em rede


Arquivos Paradox podem ser compartilhados em rede. Para que isto ocorra devemos: 1. Adicionar o DATABASE ENGINE CONFIGURATION (BDE CONFIG) 2. Selecionar a pgina DRIVERS 3. Selecionar o driver PARADOX e alterar o parmetro NET DIR para o local onde sero gravados os arquivos de controle para compartilhamento. Por exemplo, "G:\MEUAPLIC", onde G : corresponde ao drive de rede e MEUAPLIC, o diretrio aonde est o aplicativo (executvel) 4. Depois selecionar a pgina SYSTEM 5. Alterar o parmetro LOCAL SHARE para TRUE. Aps isto o BDE controlar o compartilhamento de arquivos PARADOX em rede.

Confirmar o diretrio
procedure TForm1.Button1Click(Sender: TObject); begin if DirectoryExists(Edit1.Text) then Label1.Caption := Edit1.Text + ' exists' else Label1.Caption := Edit1.Text + ' does not exist'; end;

Hint com quebra de linha


Para incluir mais de uma linha no Hint voc deve utilizar o evento OnMouseMove de cada componente. Veja abaixo como ficar o cdigo em um Edit por exemplo. procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Edit1.hint := 'Primeira Linha'+#13+'Segunda Linha'+#13+ 'Terceira Linha'+#13+'Quarta Linha'; end; Obs. No esquecer de mudar para TRUE o 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 Pgina 5

Funes para o Delphi dec(DriveNumero,$20); EMode := SetErrorMode(SEM_FAILCRITICALERRORS); try if DiskSize(DriveNumero-$40) <> -1 then Result := true else messagebeep(0); finally SetErrorMode(EMode); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if TemDiscoNoDrive('a') then ShowMessage('Tem disco no drive A:') else ShowMessage('No tem disco no drive A:'); end;

Verifica se o Form j est ativo


procedure TForm1.Button1Click(Sender: TObject); var Found : Integer; begin Found := -1; for i := 0 to Screen.FormCount - 1 do if Screen.Forms[i] is TForm2 then Found := i; if Found >= 0 then Screen.Forms[Found].Show else begin Form2 := TForm2.Create(Self); Form2.Show; end; end;

Pegando o nome do usurio e o nome da empresa no Windows


Uses Registry; Procedure GetUserCompany; var reg: TRegIniFile; begin reg := TRegIniFile.create('SOFTWARE\MICROSOFT\MS SETUP (ACME)\'); Edit1.Text := reg.ReadString('USER INFO','DefName',''); Edit2.Text := reg.ReadString('USER INFO','DefCompany',''); reg.free; end;

Pgina 6

Funes para o Delphi

Como criar uma tela de abertura (Splash Screen)


Aps ter criado o formulrio principal, crie um Formulrio para a Splah Screen que iremos chamar de FormAbertura (d o nome que voc quiser). Depois de criar os dois forms, clique no menu View, na opo Project Source. Encontrando a linha em que o form de abertura criado e apague-a. Linha que deve ser apagada: begin Application.CreateForm(TFormabertura, FormAbertura); {Esta linha deve ser apagada} end; Agora insira as linhas abaixo antes da criao dos demais form do seu aplicativo: begin AberturaForm:=TFormAbertura.Create(Application); AberturaForm.show; {Os outros form devem ser criados a partir daqui} FormAbertura.Hide; {Esconde o FormAbertura} FormAbertura.Free; {Libera Memria} Application.Run; End;

Como validar a entrada de uma caixa de texto


procedure Edit1KeyPress(Sender: TObject; var Key: Char); begin If not(key in['0'..'9',#8]) then begin beep;{somente delphi 2.0 ou 3.0} key:=#0; end; end

A tecla ENTER para funcionar como TAB


obs.:(1) a propriedade KEYPREVIEW do form ser igual TRUE; obs.:(2) a propriedade DEFAULT dos botes ser igual FALSE; procedure TForm1.FormKeyPress(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_NextDlgCtl,0,0); End; Pgina 7

Funes para o Delphi

Capturar tela
procedure TForm1.Button1Click(Sender: TObject); var BackgroundCanvas : TCanvas; Background : TBitmap; {bitmap holding the background } DC : hDC; begin // 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; image1.Picture.Bitmap:= Background; end;

Subtrair/adicionar N meses a uma data


// Para acrescentar 1 ms a data de hoje: Edit1.text:= DATETOSTR(INCMONTH(DATE,1)); // Para subtrair s colocar o nmero de meses negativo

Data por extenso


Edit1.text:= FormatDateTime('"So 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. // Habilita var Registry: TRegistry; begin Registry := TRegistry.Create; Registry.RootKey := HKEY_CURRENT_USER; Registry.OpenKey('\Control Panel\Desktop', TRUE); Registry.WriteInteger('ScreenSaveUsePassword',$0); Registry.CloseKey; Registry.Free; end;

Pgina 8

Funes para o Delphi

// Desabilita procedure TForm1.Button2Click(Sender: TObject); var Registry: TRegistry; begin Registry := TRegistry.Create; Registry.RootKey := HKEY_CURRENT_USER; Registry.OpenKey('\Control Panel\Desktop', TRUE); Registry.WriteInteger('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.Edit1Enter(Sender: TObject); begin Edit1.Selstart:= Length(Edit1.text); end;

Como evitar a mensagem de erro Key Violation


Inclua a unit DBITYPES na clausula uses do seu form. procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin if EDBEngineError(E).Errors[0].ErrorCode = 9729 then ShowMessage('Registro j existe!'); Action:= daAbort; end;

Pgina 9

Funes para o Delphi

Executar um PACK em tabelas Paradox


Inclua a unit DBIPROCS na clausula uses do seu form. procedure TForm1.ParadoxPack(Table : TTable); var TBDesc : CRTblDesc; hDb: hDbiDb; TablePath: array[0..dbiMaxPathLen] of char; begin Table.Open; FillChar(TBDesc,Sizeof(TBDesc),0); with TBDesc do begin StrPCopy(szTblName,Table.TableName); StrPCopy(szTblType,szParadox); bPack := True; end; hDb := nil; Check(DbiGetDirectory(Table.DBHandle, True, TablePath)); Table.Close; Check(DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite, dbiOpenExcl,nil,0, nil, nil, hDb)); Check(DbiSetDirectory(hDb, TablePath)); Check(DBIDoRestructure(hDb,1,@TBDesc,nil,nil,nil,False)); Table.Open; end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin ParadoxPack(table1); end;

Verificar se o registro est travado


Inclua a unit DBITYPES na clausula uses do seu form. function TForm1.IsRecordLocked(Table: TTable; ByAnyone: boolean): Boolean; var Locked: BOOL; hCur: hDBICur; rslt: DBIResult; begin Table.UpdateCursorPos; // Is the record locked by the current session... Check(DbiIsRecordLocked(Table.Handle, Locked)); Pgina 10

Funes para o Delphi Result := Locked; // If the current session does not have a lock and the ByAnyone varable is // set to check all sessions, continue check... if (Result = False) and (ByAnyone = True) then begin // Get a new cursor to the same record... Check(DbiCloneCursor(Table.Handle, False, False, hCur)); try // Try and get the record with a write lock... rslt := DbiGetRecord(hCur, dbiWRITELOCK, nil, nil); if rslt <> DBIERR_NONE then begin // if an error occured and it is a lock error, return true... if HiByte(rslt) = ERRCAT_LOCKCONFLICT then Result := True else // If some other error happened, throw an exception... Check(rslt); end else // Release the lock in this session if the function was successful... Check(DbiRelRecordLock(hCur, False)); finally // Close the cloned cursor... Check(DbiCloseCursor(hCur)); end; end; end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin If IsRecordLocked(Table1,True) then Showmessage('Registro Travado!'); end;

Pgina 11

Funes para o Delphi

Cursor customizado
Criar um arquivo de recurso com o cursor (vamos cham-lo de teste.res) Vamos chamar o recurso de CUR_1 Coloque {$R teste.res} na seo implementation procedure InsereCursor(Num : Smallint); begin Screen.Cursors[Num]:= LoadCursor(hInstance, PChar('CUR_1')); Screen.Cursor := Num; end;

Criando atalhos
Inclua as units ShlObj, ActiveX, ComObj, Registry na clausula uses do seu form. Na seo type coloque: TShortcutPlace = (stDesktop, stStartMenu); E por fim a procedure para realizar o trabalho: procedure TForm1.CreateShortcut (FileName, Parameters, InitialDir, ShortcutName, ShortcutFolder : String; Place: TShortcutPlace); var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; with MySLink do begin SetArguments(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 Pgina 12

Funes para o Delphi Directory := MyReg.ReadString('Shell Folders', 'Start Menu','') + '\' + ShortcutFolder; CreateDir(Directory); end; WFileName := Directory + '\' + ShortcutName + '.lnk'; MyPFile.Save (PWChar (WFileName), False); MyReg.Free; end;

Emular o pressionamento de uma tecla


keybd_event(65,0,0,0); Ser enviado o 'A' para o componente que estiver em foco.

Fechar um aplicativo a partir do Delphi


procedure TForm1.Button1Click(Sender: TObject); var hHandle : THandle; begin hHandle := FindWindow( nil, 'Form1'); if hHandle <> 0 then SendMessage( hHandle, WM_CLOSE, 0, 0); end;

Configurar o Delphi para acessar tabelas do Access


Execute o BDE, abra a paleta CONFIGURATION, Click em Drivers Native MsAccess Uma janela de configurao com vrias opes ser aberta. Configure a DLL32 para IDDA032.DLL ACESS 95 ou IDDA3532.DLL ACESS 97. Na opo SYSTEM DATABASE, aponte para o arquivo System.mdw do Acess que geralmente est no subdiretrio \Msoffice\Access. Salve a configurao e aps isto s criar seu alias (se j ouver algum criado, delete e configure de novo). Com essa informao em mos, faa o programa no pedir o prompt de login (a da senha), colocando um TDatabase no projeto. Escolha o alias que voc criou 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.

Pgina 13

Funes para o Delphi

Apagar um subdiretrio
Inclua a unit SHELLAPI na clausula uses do seu form. procedure DeleteDir( hHandle : 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(ToBuffer), 0 ); StrPCopy( FromBuffer, sPath); With OpStruc Do Begin Wnd:= hHandle; wFunc:=FO_DELETE; pFrom:= @FromBuffer; pTo:= @ToBuffer; fFlags:= FOF_NOCONFIRMATION; fAnyOperationsAborted:=False; hNameMappings:=nil; //lpszProgressTitle:=nil; End; ShFileOperation(OpStruc); end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin DeleteDir( Self.Handle,'C:\TESTE'); end;

Testar a impressora
Function TForm1.PrinterOnLine : Boolean; Const PrnStInt : Byte = $17; StRq : Byte = $02; PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2, etc. } Var nResult : byte; Begin Asm mov ah,StRq; mov dx,PrnNum; Int $17; Pgina 14

Funes para o Delphi mov nResult,ah; end; PrinterOnLine := (nResult and $80) = $80; end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin If not PrinterOnLine then ShowMessage('Verifique a Impressora!'); end;

Validar datas
try StrToDate(Edit1.Text); except on EConvertError do ShowMessage ('Data Invlida!'); end;

Procurar arquivos
procedure TForm1.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;

Pgina 15

Funes para o Delphi Como utilizar: procedure TForm1.Button1Click(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 TForm1.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 := 'Windows 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;

Pgina 16

Funes para o Delphi Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin ExecFile('c:\windows\ladrilhos.bmp'); end;

Fazer um TEdit aceitar apenas nmeros


Na rotina abaixo, o TEdit s aceitar nmeros de 0 a 9 e o BackSpace (Chr(8)). Se voc quiser a vrgula tambm, coloque dentro do colchete DecimalSeparator procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in['0'..'9',Chr(8)]) then Key:= #0; end;

Alterar o papel de parede do Windows


procedure TForm1.Button1Click(Sender: TObject); var Arquivo: String; begin Arquivo:= 'c:\windows\bitmap~1.bmp'; SystemParametersInfo(SPI_SetDeskWallPaper, 0, PChar(Arquivo), 0); end;

Extrair o nmero de cores do modo de vdeo corrente


var hnd: THandle; bitsPorPixel: integer; begin hnd:= GetDC( Handle ); bitsPorPixel:= GetDeviceCaps( hnd, BITSPIXEL ); // 8 = 256 cores; 16 = high color; 24 = true color end;

Habilitar e desabilitar barra de tarefas


// desabilita procedure hideTaskbar; var wndHandle : THandle; wndClass : array[0..50] of Char; begin StrPCopy(@wndClass[0], 'Shell_TrayWnd'); wndHandle:= FindWindow(@wndClass[0], nil); ShowWindow(wndHandle, SW_HIDE); end;

Pgina 17

Funes para o Delphi // habilita procedure showTaskbar; var wndHandle : THandle; wndClass : array[0..50] of Char; begin StrPCopy(@wndClass[0], 'Shell_TrayWnd'); wndHandle:= FindWindow(@wndClass[0], nil); ShowWindow(wndHandle, SW_RESTORE); end;

Habilitar e desabilitar ctrl+alt+del


// desabilita procedure TForm1.Button1Click(Sender: TObject); var numero: integer; begin SystemParametersInfo(97,Word(true),@numero,0); end; // habilita procedure TForm1.Button2Click(Sender: TObject); var numero: integer; begin SystemParametersInfo(97,Word(false),@numero,0); end;

Alterar a data e a hora do sistema


procedure TForm1.Button1Click(Sender: TObject); var SystemTime : TSystemTime; begin With SystemTime do begin //Definindo o dia do sistema wYear:= 1996; wMonth:= 5; wDay:= 10; //Definindo a hora do sistema wHour:= 20; //hora wMinute:= 50; //minutos wSecond:= 59; //segundos end; //Colocar a hora e data do sistema SetLocalTime(SystemTime); end; Pgina 18

Funes 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 TForm1.Button1Click(Sender: TObject); begin edit1.text:= inttostr(TamArquivo('CAMINHO\NOMEDOARQUIVO')); end;

Extrair o cone de um executvel


Inclua a unit Shellapi na clusula uses do seu form. Image1.Picture.Icon.Handle:= ExtractIcon(Handle,PChar('c:\windows\calc.exe'),0);

Verificando a memria
var MemoryStatus: TMemoryStatus; begin MemoryStatus.dwLength:= sizeof(MemoryStatus); GlobalMemoryStatus(MemoryStatus); Label1.Caption := 'Total de memria fsica : ' + IntToStr(MemoryStatus.dwTotalPhys); end; {typedef struct _MEMORYSTATUS DWORD dwLength; // sizeof(MEMORYSTATUS) DWORD dwMemoryLoad; // percentual de memria em uso DWORD dwTotalPhys; // bytes de memria fsica DWORD dwAvailPhys; // bytes livres de memria fsica DWORD dwTotalPageFile; // bytes de paginao de arquivo DWORD dwAvailPageFile; // bytes livres de paginao de arquivo DWORD dwTotalVirtual; // bytes em uso de espao de endereo DWORD dwAvailVirtual; // bytes livres}

Pgina 19

Funes para o Delphi

Nmero de srie do hd
Function TForm1.SerialNum(FDrive:String) :String; var Serial: DWord; DirLen, Flags: DWord; DLabel : Array[0..11] of Char; begin Try GetVolumeInformation(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 := 'L:'; PSenha := ''; ERR := WNetAddConnection ( PServer , PSenha , PLetra ); CASE ERR of ERROR_ACCESS_DENIED : ShowMessage ( 'Acesso negado.' ); ERROR_ALREADY_ASSIGNED : ShowMessage ( 'A letra do drive especificada j est conectada.' ); ERROR_BAD_DEV_TYPE : ShowMessage ( 'O tipo de dispositivo e o tipo de recurso no so compatveis.' ); ERROR_BAD_DEVICE : ShowMessage ( 'Letra invlida.' ); ERROR_BAD_NET_NAME : ShowMessage ( 'Nome do servidor no vlido ou no pode ser localizado.' ); ERROR_BAD_PROFILE : ShowMessage ( 'Formato incorreto de parmetros.' ); ERROR_CANNOT_OPEN_PROFILE : ShowMessage ( 'Conexo permanente no disponvel.' ); ERROR_DEVICE_ALREADY_REMEMBERED : ShowMessage ( 'Uma entrada para o dispositivo especificado j est no perfil do usurio.' ); ERROR_EXTENDED_ERROR : ShowMessage ( 'Erro de rede.' ); ERROR_INVALID_PASSWORD : ShowMessage ( 'Senha especificada invlida.' ); ERROR_NO_NET_OR_BAD_PATH : ShowMessage ( 'A operao no foi concluda porque a rede no foi inicializada ou caminho invlido.' ); ERROR_NO_NETWORK : ShowMessage ( 'A rede no est presente.' ); Pgina 20

Funes para o Delphi else if Err > 0 then ShowMessage (IntToStr(Err)); end; end;

Pegar nome do usurio na rede


function TForm1.usuario : string; var NomedoUsuario : array[0..255] of char; buffSize : DWORD; begin buffSize := sizeOf(NomedoUsuario); GetUserName(@NomedoUsuario, buffSize); result:= NomedoUsuario; end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(usuario) end;

saber o estado das teclas Num lock, Caps lock e Scroll lock
Para saber o estado das teclas acima citadas, utilize a funo getkeystate em conjunto com o cdigo das teclas, ela retorna 0 se a tecla estiver OFF e 1 se a tecla estiver ON, assim: If getkeystate(vk_numlock) = 0 then // Num lock est OFF If getkeystate(vk_numlock) = 1 then // Num lock est ON If getkeystate(vk_scroll) = 0 then // Scroll lock est OFF If getkeystate(vk_scroll) = 1 then // Scroll lock est ON If getkeystate(vk_CAPITAL) = 0 then // Caps lock est OFF If getkeystate(vk_CAPITAL) = 1 then // Caps lock est 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); Pgina 21

Funes para o Delphi try if DiskSize(DriveNumero-$40) <> -1 then Result := true else messagebeep(0); finally SetErrorMode(EMode); end; end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin if TemDiscoNoDrive('a') then ShowMessage('Tem disco no drive A:') else ShowMessage('No tem disco no drive A:'); end;

Executando programas externos


Winexec('Command.com /C Teste.exe',Tipo_de_Janela); Tipo_de_Janela : SW_SHOWNORMAL - Visualizao normal da janela SW_MAXIMIZE - Janela maximizada SW_MINIMIZE - Janela minimizada SW_HIDE - Escondido

Reproduzindo sons wav, sem o componente mediaplayer


Coloque na clsula 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 TForm1.GravaIni( Numero : Longint ; Texto : String ; Condicao : Boolean); var ArqIni : TIniFile; begin ArqIni := TIniFile.Create('c:\windows\temp\Teste.Ini'); Try ArqIni.WriteInteger('Dados', 'Numero', Numero); ArqIni.WriteString('Dados', 'Texto', Texto); Pgina 22

Funes para o Delphi ArqIni.WriteBool('Dados', 'Condio', Condicao); Finally ArqIni.Free; end; end; Procedure TForm1.LeIni( Var Numero : Longint ; Var Texto : String ; Var Condicao : Boolean); var ArqIni : tIniFile; begin ArqIni := tIniFile.Create('c:\windows\temp\Teste.Ini'); Try Numero := ArqIni.ReadInteger('Dados', 'Numero', Numero ); Texto := ArqIni.ReadString('Dados', 'Texto', Texto ); Condicao := ArqIni.ReadBool('Dados', 'Condio', Condicao ); Finally ArqIni.Free; end; end; Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin GravaIni(1234,'TESTE',True); end; procedure TForm1.Button2Click(Sender: TObject); var N: Integer; T: String; C: Boolean; begin LeIni(N,T,C); Showmessage(IntToStr(N)+' '+T); end;

Exponenciao
Inclua a unit Math na clausula uses do seu form. Depois disso utilize a funo Power. Edit1.text:= FloatToStr(Power(2,4));

Pgina 23

Funes para o Delphi

Aguardar um determinado n de segundos


procedure TForm1.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 todos os botes 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_NextDlgCtl,0,0); end; end;

Utilizar ponto para separar decimais


Voc pode combinar a varivel DecimalSeparator, ThousandSeparator do Delphi com o evento OnKeyPress: procedure TForm1.Edit1KeyPress(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. Aps ter criado um formulrio principal, crie um formulrio para a tela de abertura. Aqui iremos cham-lo de ABERTURAFORM. Depois de criar os dois formulrios, clique no menu VIEW, na opo PROJECT SOURCE, que permite que seja exibido o cdigo do arquivo principal do projeto. Localize no cdigo a linha em que o formulrio de abertura criado e apague-a (ou coloque em modo de observao, inserindo // no incio da linha). Linha que deve ser apagada: begin Pgina 24

Funes para o Delphi ... Application.CreateForm(TAberturaForm, AberturaForm); // Esta linha deve ser apagada ... end; Aps remover a linha acima, insira as linhas abaixo antes da criao dos demais formulrios do seu aplicativo: Linhas que devem ser inseridas: begin AberturaForm:= TAberturaForm.Create(Application); AberturaForm.show {Os demais formulrios devem ser criados aqui} ... AberturaForm.Hide; AberturaForm.Free; Application.Run; End; Os comandos... AberturaForm:= TAberturaForm.Create(Application); - cria o formulrio AberturaForm.Show - exibe o formulrio de abertura na tela AberturaForm.Hide; - esconde o formulrio de abertura AberturaForm.Free; - tira o formulrio da memria

Como limpar todos os edits de um form


procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i := 0 to ComponentCount-1 do begin If Components[i].ClassName = 'TEdit' then Tedit(Components[i]).clear; // ou TEdit(components[i]).text:= '' end; end;

Pgina 25

Funes para o Delphi

Formatar nmeros com zeros esquerda


var Numero: Integer; begin Numero:= 123; Edit1.text:= Format('%5.5d',[Numero]); // resulta '00123'; end;

Obrigar a digitao de caracteres maisculos num campo memo


procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); begin Key:= Upcase(Key); end;

Imprimindo um campo memo via Canvas


Coloque na clsula Uses a unit printers procedure TForm1.Button1Click(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 Memo1.Lines.Count do begin sMemo := Memo1.Lines[I]; TextOut(1, (i - 1) * Altura, sMemo); end; end; EndDoc; end; end;

Pgina 26

Funes para o Delphi

Procura e substituio de string num campo memo


Procedure FindReplace (const Enc, subs: String; Var Texto: TMemo); Var i, Posicao: Integer; Linha: string; Begin For i:= 0 to Texto.Lines.count - 1 do begin Linha := Texto. Lines[i]; Repeat Posicao:=Pos(Enc,Linha); If Posicao > 0 then Begin Delete(Linha,Posicao,Length(Enc)); Insert(Subs,Linha,Posicao); Texto.Lines[i]:=Linha; end; until Posicao = 0; end; end; Como utilizar: Procedure TForm1.Button1Click (Sender: TObject); Begin FindReplace(Edit1.Text,Edit2.Text, Memo1); end;

Pegando a linha e coluna atuais de um memo


With Memo1 do begin Line:= Perform(EM_LINEFROMCHAR,SelStart, 0); Column:= SelStart - Perform(EM_LINEINDEX, Line, 0); end;

Trocando a cor de uma clula num DBGrid


No evento onDrawColumnCell do dbgrid coloque o cdigo para mudar a cor da fonte do dbgrid e a chave do mtodo para "desenhar" os dados. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (Column.Field.FieldName = 'NOMEDOCAMPO') then begin if condio then // coloque aqui sua condio begin Pgina 27

Funes para o Delphi DBGrid1.Canvas.Brush.Color:= clAqua; DBGrid1.Canvas.Font.Color:= clWindowText; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, 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 o cdigo para mudar a cor do font do dbgrid e a chave do mtodo para "desenhar" os dados. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin If Condio then Dbgrid1.Canvas.Font.Color:= clFuchsia; // coloque aqui a cor desejada Dbgrid1.DefaultDrawDataCell(Rect, dbgrid1.columns[datacol].field, State); end;

Gerenciando mais de uma linha selecionada num DBGrid (Multiselect)


O DBGrid tem uma propriedade no documentada chamada SelectedRows (Tbookmark). Com ela voc pode gerenciar Multiselect da seguinte forma: var contador: Integer; begin With Dbgrid1 do Begin for contador:= 0 to Pred(SelectedRows.Count) do Begin Datasource.Dataset.Bookmark:= SelectedRows[contador]; // posiciona nos registros selecionados do DBGrid end; end;

Pgina 28

Funes para o Delphi

Commit (Delphi 3)
Inclua DBISaveChanges(Nome da Tabela.handle) no evento After Post. Inclua em uses a biblioteca DBIProcs. procedure TForm1.Table1AfterPost(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 TForm1.Table1AfterPost(DataSet: TDataSet); begin DBISaveChanges(Table1.handle); end;

Extrair o nmero do registro atual em tabelas Paradox ou Dbase


Inclua a unit BDE na clausula uses do seu form. procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); var CP: CurProps; RP: RecProps; RecID: Longint; begin with Table1 do begin UpdateCursorPos; Check(DbiGetCursorProps(Handle, CP)); Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RP)); if StrComp(CP.szTableType, szDBASE) = 0 then RecID := RP.iPhyRecNum else if StrComp(CP.szTableType, szPARADOX) = 0 then RecID := RP.iSeqNum else raise EDatabaseError.Create('ERRO! No uma tabela Paradox ou dBASE.'); end; Label1.Caption:= IntToStr(RecID) +' de '+ IntToStr(Table1.recordcount); end;

Pgina 29

Funes para o Delphi

Alterando Idapi32.Cfg Via Programa


Substitua AliasName pelo nome do alias que voc quer criar e em AliasPath pelo path dos arquivos de dados que voc quer no seu alias. Inclua na clusula "USES" as units BD e BDE. Check(DbiAddAlias(Nil, PChar(' AliasName '), Nil, PChar(' AliasPath'), True));

Criando tabelas
var Tabela: TTable; Indices: TIndexOptions; begin Tabela:= TTable.Create; Indices:= [ixPrimary, IxUnique]; with Tabela do begin active:= false; databasename:= 'c:\teste'; tablename:= 'Tabela'; tabletype:= ttDefault; fielddefs.clear; fielddefs.add('Codigo', ftInteger, 0, false); ... indexdefs.clear; indexdefs.add('Codigo_Chave', 'codigo', Indices); CreateTable; end;

Pgina 30

Funes para o Delphi

Data por extenso no Quickreport


var nrdia: Integer; diasemana: array[1..7] of String; meses: array[1..12] of String; dia, mes, ano: Word; begin diasemana[1]:= 'Domingo'; diasemana[2]:= 'Segunda-feira'; diasemana[3]:= 'Tera-feira'; diasemana[4]:= 'Quarta-feira'; diasemana[5]:= 'Quinta-feira'; diasemana[6]:= 'Sexta-feira'; diasemana[7]:= 'Sbado'; meses[1]:= 'Janeiro'; meses[2]:= 'Fevereiro'; meses[3]:= 'Maro'; meses[4]:= 'Abril'; meses[5]:= 'Maio'; meses[6]:= 'Junho'; meses[7]:= 'Julho'; meses[8]:= 'Agosto'; meses[9]:= 'Setembro'; meses[10]:= 'Outubro'; meses[11]:= 'Novembro'; meses[12]:= 'Dezembro'; DecodeDate(DATE,ano,mes,dia); nrdia:= DayOfWeek(DATE); QRLabel1.Caption:= diasemana[nrdia]+', '+INTTOSTR(dia)+' de '+meses[mes]+' de '+INTTOSTR(ano);

Filtrando registros com o Quickreport (Delphi 2)


Voc deve usar o evento OnFilter do componente Quickreport. O mesmo possui a varivel PrintRecord do tipo Boolean. Para que o registro no seja impresso, basta atribuir False a esta varivel. procedure TForm1.QuickReport1Filter(var PrintRecord: Boolean); begin PrintRecord:= ( table1salario.value > 200 ); end;

Pgina 31

Funes para o Delphi

Extraindo o ano, ms ou dia de uma data via SQL


Select * from nome_tabela where extract(year from campo_data) = 1997 Voc pode extrair o ms (MONTH) ou o dia (DAY).

Cria um clone Monocromtico de um outro Bitmap


function CreateDisabledBitmap(FOriginal: TBitmap; OutlineColor: TColor): TBitmap; // Use-a assim: // image2.picture.Bitmap := CreateDisabledBitmap(Image1.Picture.Bitmap, clBtnFace); const ROP_DSPDxax = $00E20746; var MonoBmp: TBitmap; IRect: TRect; begin IRect := Rect(0, 0, FOriginal.Width, FOriginal.Height); Result := TBitmap.Create; try Result.Width := FOriginal.Width; Result.Height := FOriginal.Height; MonoBmp := TBitmap.Create; try with MonoBmp do begin Assign(FOriginal); {$IFDEF S_D3} HandleType := bmDDB; {$ENDIF} Canvas.Brush.Color := clBlack; 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); Pgina 32

Funes para o Delphi BitBlt(Handle, 1, 1, IRect.Right - IRect.Left, IRect.Bottom - IRect.Top, MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax); Brush.Color := clBtnShadow; SetTextColor(Handle, clBlack); SetBkColor(Handle, clWhite); BitBlt(Handle, 0, 0, IRect.Right - IRect.Left, IRect.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 := CreateOleObject('Excel.Application'); Excel.Visible := True; Excel.Workbooks.Add; Excel.WorkBooks[1].Sheets[1].Cells[1,1] := 'Cdigo'; Excel.WorkBooks[1].Sheets[1].Cells[1,2] := 'Vendedor'; Excel.WorkBooks[1].Sheets[1].Cells[1,3] := 'Tipo Negociao'; Excel.WorkBooks[1].Sheets[1].Cells[1,4] := 'Cliente'; Excel.WorkBooks[1].Sheets[1].Cells[1,5] := 'N Tit.'; // adicione os campos desejados, seguindo a seqncia acima Linha := 2; // comeando a lanar 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.WorkBooks[1].Sheets[1].Cells[Linha,4] := FieldByName('nome').Value; Pgina 33

Funes para o Delphi Excel.WorkBooks[1].Sheets[1].Cells[Linha,5] := FieldByName('num_titular').AsInteger;\ // adicione os campos desejados, seguindo a seqncia acima Linha := Linha + 1; Next; end; Excel.WorkBooks[1].SaveAs('caminho do arquivo a ser salvo');

DBGrid, Ocultando Colunas Dinamicamente com Popup


procedure Tform1.AjustarColunasDoGrid( Grid : TDBGrid; PopMenu : TPopupMenu); var vItemMenu : TMenuItem; 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 := TMenuItem.Create(Self); vItemMenu.Caption := Grid.Columns[ vCont].DisplayName; { Caption } vItemMenu.Checked := True; { Marcado } vItemMenu.Name := 'PM' + Grid.Name + '_' + IntToStr(vCont); { Nome no muito aconselhvel por o nome, mas fica mais fcil achar ele depois } vItemMenu.OnClick := MenuClick; { Associa o evento do clique } PopMenu.Items.Add( vItemMenu); { Adiciona o mesmo ao menu } end; { Associa o grid ao menu } Grid.PopupMenu := PopMenu; end; procedure Tform1.MenuClick(Sender : TObject); var vNomeMenu : String; vNomeGrid : String; vNroColum : Integer; vGrid : TDBGrid; begin { Aqui pega o nome do item de menu } vNomeMenu := (Sender as TMenuItem).Name; { Pega o nome do grid } Pgina 34

Funes 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 o componente grid associado } vGrid := (Self.FindComponent(vNomeGrid) as TDBGrid); { Ajusta o check do item de menu... marca se estiver desmarcado ou vice versa } (Sender as TMenuItem).Checked := not (Sender as TMenuItem).Checked; { enfim, mostra ou oculta a coluna de acordo com o menu } vGrid.Columns[ vNroColum].Visible := (Sender as TMenuItem).Checked; end; procedure Tform1.FormCreate(Sender: TObject); begin { Chame a funo passando apenas o nome do grid e do popup menu } AjustarColunasDoGrid( grdiProduto, PopupMenu); end;

Transformar de minutos para horas


function MinutesToHours(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


interessante colocar o cdigo no evento BeforeOpen ou em OnNewRecord Exemplo no Oracle: Var qry_Codigo : TADOQuery; begin if DseVenda.state in [DsInsert] then begin //Recupera o cdigo da venda do banco de dados utilizando a sequencia criada qry_Codigo := TADOQuery.Create(Self); qry_Codigo.Connection := frm_Menu.Connection; qry_Codigo.SQL.Add('Select custom.seq_venda.nextval from dual'); qry_Codigo.Open; DseVenda.FieldByName('cdvenda').Value := Pgina 35

Funes para o Delphi qry_Codigo.FieldByName('NEXTVAL').Value; qry_Codigo.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_ID.Open; DsePrincipal.FieldByName('id').AsInteger := Qry_ID.FieldByName('gen_id').AsInteger; DsePrincipal.FieldByName('dtcadastro').AsDateTime := Date; CmbClassificacao.SetFocus; Qry_ID.Free; except ShowMessage('Erro ao gerar ID. Contacte o suporte tcnico.'); Qry_ID.Free; end;

Como desativar a proteo de tela


Na seo Private do form adicione: procedure AppMsg(var Msg: TMsg; var Handled: Boolean); Na seo Implementation adicione : procedure TForm1.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; Coloque o seguinte cdigo no evento onClick de um TButton: procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0); end; Pgina 36

Funes para o Delphi

Gira o texto
Procedure TForm1.Button1Click(Sender: TObject); var lf : TLogFont; tf : TFont; i : integer; begin with Form1.Canvas do begin Font.Name := 'Verdana'; Font.Size := 16; tf := TFont.Create; tf.Assign(Font); GetObject(tf.Handle, sizeof(lf), @lf); lf.lfOrientation := 1000; end; For i:= 50000 Downto 1 do Begin lf.lfEscapement := i; tf.Handle := CreateFontIndirect(lf); Form1.Canvas.Font.Assign(tf); Form1.Canvas.TextOut(200, Height div 2, 'Edgar da Cruz'); //Sleep(10); Este pode cria um Delay na execuo end; tf.Free; end;

Hint Redondo
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Commctrl, ExtCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Panel1: TPanel; procedure FormCreate(Sender: TObject); Pgina 37

Funes para o Delphi private { Private declarations } public { Public declarations } end; const TTS_BALLOON = $40; TTM_SETTITLE = (WM_USER + 32); var Form1: TForm1; hTooltip: Cardinal; ti: TToolInfo; buffer : array[0..255] of char; implementation {$R *.DFM} procedure CreateToolTips(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); ti.uFlags := TTF_SUBCLASS; ti.hInst := hInstance; end; end; procedure AddToolTip(hwnd: dword; lpti: PToolInfo; IconType: Integer; Text, Title: PChar); var Item: THandle; Rect: TRect; begin Item := hWnd; if (Item <> 0) AND (GetClientRect(Item, Rect)) then Pgina 38

Funes para o Delphi begin lpti.hwnd := Item; lpti.Rect := Rect; lpti.lpszText := Text; SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(lpti)); FillChar(buffer, sizeof(buffer), #0); lstrcpy(buffer, Title); if (IconType > 3) or (IconType < 0) then IconType := 0; SendMessage(hToolTip, TTM_SETTITLE, IconType, Integer(@buffer)); end; end; procedure TForm1.FormCreate(Sender: TObject); begin CreateToolTips(Form1.Handle); //A linha abaixo usa o hint definido no objeto //A linha abaixo usa um hint mais personalizado AddToolTip(Memo1.Handle, @ti, 0, 'Saiba mais...'+chr(13)+ 'Esta caixa contm algumas dicas sobre:'+chr(13)+ 'Como enviar sua mensagem...'+chr(13)+ 'Como receber suas mensagens...'+chr(13)+ 'e muito mais...', 'Mensagem a ser enviada'); AddToolTip(Button1.Handle, @ti, 1, 'Incluir dados', ''); // AddToolTip(Button2.Handle, @ti, 2, 'Excluir dados', ''); // AddToolTip(Button3.Handle, @ti, 2, 'Alterar dados', 'Mensagem'); end; end. end. Observao: TipoDoIcone pode ser: 0 - Sem cone 1 - Informao 2 - Aviso 3 - Erro A unit COMMCTRL deve ser acrescentada.

Pgina 39

Funes para o Delphi

Informar a velocidade do Processador


Esta interessante funo 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 // rdtsc mov TimerLo, eax mov TimerHi, edx end; Sleep(DelayTime); asm dw 310Fh // rdtsc 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 sada da funao a uma string: procedure TForm1.Button1Click(Sender: TObject); Pgina 40

Funes para o Delphi var cpuspeed:string; begin cpuspeed:=Format('%f MHz', [GetCPUSpeed]); edit1.text := cpuspeed; end;

Instalar quickreport no delphi 7


Vai em Component / Install Packages, clique em "ADD" abra seguinte pasta : C:\Arquivos ProgramasBorlandDelphi7_in. selecione o arquivo " dclqrt70.bpl " clique em Abrir Pronto! CRIANDO UMA MARCA DAGUA Procedure TForm1.Button1Click(Sender: TObject); var X, Y : Integer; begin brush.style := bsClear; for y:=0 to image1.height-1 do for x:=0 to image1.width-1 do begin if (x mod 2)=(y mod 2) then image1.canvas.pixels[x,y]:=clWhite; end; end;

Mostra e esconde cones da rea de trabalho


Para esconder: ShowWindow(FindWindow(nil,'Program Manager'),SW_HIDE); Para mostrar: ShowWindow(FindWindow(nil,'Program Manager'),SW_SHOW);

Alterando o papel de parede


Program wallpapr; uses Registry, WinProcs; procedure SetWallpaper(sWallpaperBMPPath : String; bTile : boolean ); var reg : TRegIniFile; begin Pgina 41

Funes para o Delphi // Mudando o Registro HKEY_CURRENT_USER // Control Panel\Desktop // TileWallpaper (REG_SZ) // Wallpaper (REG_SZ) reg := TRegIniFile.Create('Control Panel\Desktop' ); with reg do begin WriteString( '', 'Wallpaper',sWallpaperBMPPath ); if( bTile )then begin WriteString( '', 'TileWallpaper', '1' ); end else begin WriteString( '', 'TileWallpaper', '0' ); end; end; reg.Free; // Mostrar que o parametro do sistema foi alterado SystemParametersInfo( SPI_SETDESKWALLPAPER,0, Nil, SPIF_SENDWININICHANGE ); end; begin SetWallpaper( 'c:\winnt\winnt.bmp', False ); end.

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; // Palette := GetSystemPalette; end; end; Como utilizar: Image1.picture.Assign(CaptureScreenRect(Rect(0,0,Width,Height)));

Pgina 42

Funes para o Delphi

Usando o Word dentro do Delphi


procedure TFrmFactoring.ActnContratoExecute(Sender: TObject); var MSWord : variant; begin Msword:=createoleObject('Word.Basic'); Msword.AppShow; Msword.fileopen('c: actoringdocscontrato.doc'); end; Observao: Incluir COMOBJ na clusula Uses.

Usando as setas para navegar nos campos


procedure TFrm._Exemplo_KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = 40) then // seta para baixo 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; Observao: Usar no evento KeyDown de um determinado Edit

Funo para validar o PIS


function validapis(Dado : String) : boolean; {Testa se o nmero do pis vlido ou no} var i, wsoma, Wm11, Wdv,wdigito : Integer; begin if AllTrim(Dado) <> '' Then begin wdv := strtoint(copy(Dado, 11, 1)); wsoma := 0; wm11 := 2; for i := 1 to 10 do Pgina 43

Funes para o Delphi begin wsoma := wsoma + (wm11 *strtoint(copy(Dado,11 - I, 1))); if wm11 < 9 then begin wm11 := wm11+1 end else begin wm11 := 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 ##/##/####, depois coloque um edit e um button altere os nomes deles como o exemplo abaixo procedure TForm1.Button1Click(Sender: TObject); var DataHoje,DataNasc:TDate; HAno,HMes,HDia,NAno,NMes,NDia:Word; Dia,Mes,Ano:Integer; begin DataHoje:=Now; DecodeDate(DataHoje,HAno,HMes,HDia); DataNasc:=StrToDate(Nasc.Text); DecodeDate(DataNasc,NAno,NMes,NDia); Dia:=(HDia - NDia); Pgina 44

Funes para o Delphi Mes:=(HMes - NMes); Ano:=(HAno - NAno); if(Mes < 0)and(Dia < 0)then begin ID.Clear; ID.Text:=IntToStr(Ano - 1); end else if (Mes < 0)and(Dia >=0)then begin ID.Clear; ID.Text:=IntToStr(Ano - 1); end else if (Mes > 0)and(Dia >= 0)then begin ID.Clear; ID.Text:=IntToStr(Ano); end else if (Mes > 0)and(Dia < 0)then begin ID.Clear; ID.Text:=IntToStr(Ano); end else if(Mes = 0)and(Dia >= 0)then begin ID.Clear; ID.Text:=IntToStr(Ano); end else if(Mes = 0)and(Dia < 0)then begin ID.Clear; ID.Text:=IntToStr(Ano - 1); end; end;

Como definir seu prprio hotkey (Tecla Quente)


Primeiro fixe a propriedade KeyPreview do Form para TRUE procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssCtrl in Shift) and (chr(Key) in [A, a]) then ShowMessage(Ctrl-A); end; Pgina 45

Funes para o Delphi

Como interceptar as teclas de funes no programa


Primeiro, coloque a propriedade KeyPreview do formulrio como TRUE. Depois, insira este cdigo no evento OnKeyDown do formulrio: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F5 then showMessage(I pressed the F5 key); end; Voc tambm pode usar as variveis VK_F1 at VK_F12 referentes as outras teclas de funo.

DbGrid zebrado
O exemplo abaixo mostra como deixar cada linha do componente DBGrid de uma cor diferente, dando assim um efeito zebrado. O controle feito no evento OnDrawColumnCell. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls; type TForm1 = class(TForm) Button1: TButton; DBGrid1: TDBGrid; Table1: TTable; DataSource1: TDataSource; procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin Pgina 46

Funes para o Delphi If odd(Table1.RecNo) then begin DBGrid1.Canvas.Font.Color:= clWhite; DBGrid1.Canvas.Brush.Color:= clGreen; end else begin DBGrid1.Canvas.Font.Color:= clBlack; DBGrid1.Canvas.Brush.Color:= clWhite; end; DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString); end;

Retorna o espao livre em disco


Esta funo 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 no seja redimensionado


Inclua o cdigo abaixo no Form que no deseja redimensionar. type TForm1 = class(TForm) private { Private declarations } procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; procedure WMInitMenuPopup(var Msg: TWMInitMenuPopup); message WM_INITMENUPOPUP; procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHitTest; public { Public declarations } end; var Form1: TForm1; Pgina 47

Funes para o Delphi implementation {$R *.DFM} procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); begin inherited; with Msg.MinMaxInfo^ do begin ptMinTrackSize.x:= form1.width; ptMaxTrackSize.x:= form1.width; ptMinTrackSize.y:= form1.height; ptMaxTrackSize.y:= form1.height; end; end; procedure TForm1.WMInitMenuPopup(var Msg: TWMInitMenuPopup); begin inherited; if Msg.SystemMenu then EnableMenuItem(Msg.MenuPopup, SC_SIZE, MF_BYCOMMAND or MF_GRAYED) end; procedure TForm1.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 exemplo abaixo deve ser includo um componente Button. Para testar este exemplo mantenha a tecla CTRL pressionada clique com o mouse no componente Button. Feito isto, basta arrastar o componente Button para qualquer lado. type TForm1 = class(TForm) Button1: TButton; procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } Pgina 48

Funes para o Delphi public { Public declarations } MouseDownSpot : TPoint; Capturing : bool; end; var Form1: TForm1; implementation {$R *.DFM} // Evento OnMouseDown do Form procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ssCtrl in Shift then begin SetCapture(Button1.Handle); Capturing := true; MouseDownSpot.X := x; MouseDownSpot.Y := Y; end; end; // Evento OnMouseMove do Form procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Capturing then begin Button1.Left:= Button1.Left-(MouseDownSpot.x-x); Button1.Top:= Button1.Top - (MouseDownSpot.-y); end; end; // Evento OnMouseUp do Form procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Capturing then begin ReleaseCapture; Capturing := false; Button1.Left := Button1.Left - (MouseDownSpot.x -x); Button1.Top := Button1.Top - (MouseDownSpot.y - y); end; end;

Pgina 49

Funes para o Delphi

Como verificar se a tecla TAB foi pressionada


Para testar o exemplo abaixo inclua alguns componentes Edit em seu form. type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; procedure FormCreate(Sender: TObject); private { Private declarations } procedure ProcessaMsg(var Msg: TMsg; var Handled: Boolean); public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.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; // Evento OnCreate procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := ProcessaMsg; end;

Executar um AVI no Form


procedure TForm1.BitBtn1Click(Sender: TObject); begin with MediaPlayer1 do begin FileName := c:\windows\help\scroll.avi; Open; Display := Form2; Form2.Show; Play; end; end;

Pgina 50

Funes para o Delphi

Colocar zeros a esquerda de um valor digitado no componente Edit


procedure TForm1.Edit1Exit(Sender: TObject); begin Edit1.Text := FormatFloat(000000,StrToFloat(Edit1.Text)); end;

Cancelar o pressionamento de uma tecla


procedure TForm1.Edit1KeyPress(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 parmetros


var Button: Integer; Mensagem1 : Array[0..79] of Char; Mensagem2 : Array[0..79] of Char; begin StrPCopy(Mensagem1, Edit1.Text + + Edit2.Text); StrPCopy(Mensagem2, Edit3.Text + + Edit4.Text); Button := Application.MessageBox (Mensagem2,Mensagem1, MB_YESNOCANCEL+ mb_DefButton1+MB_ICONQUESTION); end;

Retorna a cor de um determinado componente no formato string


procedure TForm1.BitBtn1Click(Sender: TObject); begin // Retorna a cor do form Caption := ColorToString(Form1.Color); // Muda a cor do form Form1.Color := StringToColor(clBlack); end;

Pgina 51

Funes para o Delphi

Verifica se existe o diretrio


procedure TForm1.Button1Click(Sender: TObject); begin if DirectoryExists(Edit1.Text) then Label1.Caption := Edit1.Text + exists else Label1.Caption := Edit1.Text + does not exist; end;

Bloquear a tecla Ctrl+Del do DBGrid


procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ((Shift = [ssCtrl]) and (key = vk_delete)) THEN Abort; end;

Para criar uma janela no retangular


Voc deve criar uma Regio do Windows e usar a funo da API SetWindowRgn, desta maneira (isto funciona apenas em D2/D3): var hR : THandle; begin {cria uma Regio elptica} hR := CreateEllipticRgn(0,0,100,200); SetWindowRgn(Handle,hR,True); end;

Fecha todos os arquivos


var i: integer; begin with Session do for i:= 0 to DatabaseCount - 1 do Databases[I].Close; end;

Hint com quebra de linhas


Para incluir mais de uma linha no Hint voc deve utilizar o evento OnMouseMove de cada componente. Veja abaixo como ficar o cdigo em um Edit por exemplo. procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X, Pgina 52

Funes para o Delphi Y: Integer); begin Edit1.hint := Primeira Linha+#13+Segunda Linha+#13+ Terceira Linha+#13+Quarta Linha; end; Obs. No esquecer de mudar para TRUE o evento ShowHint.

Imprimindo sem passar pelo gerenciador de impresso


procedure TForm1.Button1Click(Sender: TObject); var F : TextFile; i : integer; begin AssignFile(F,LPT1'); Rewrite(F); i := 0; Writeln(F,Teste de impressao - Linha 0'); Writeln(F,Teste de impressao - Linha 1'); Writeln(F,#27#15+Teste de Impresso - Linha 2'); Writeln(F,Teste de impressao - Linha 3'); Writeln(F,#27#18+Teste de Impresso - Linha 4'); Writeln(F,Teste de impressao - Linha 5'); Writeln(F,#12); // Ejeta a pgina CloseFile(F); end;

Fechar um aplicativo Delphi a partir de outro aplicativo Delphi


procedure TForm1.Button1Click(Sender: TObject); var Win : THandle; begin Win := FindWindow(nil,Form1'); if Win <> 0 then PostMessage(Win,WM_CLOSE,0,0) else ShowMessage(Programa no 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 TForm1.FormCreate(Sender: TObject); begin Pgina 53

Funes para o Delphi Application.OnHint := DisplayHint; end; procedure TForm1.DisplayHint(Sender: TObject); begin Panel1.Caption := Application.Hint; end; Obs. No necessrio Atribuir True para o ShowHint

Retornar o nome do usurio que esta editando o registro


procedure TForm1.BitBtn1Click(Sender: TObject); begin try Table1.Edit; except on E:EDBEngineError do if E.Errors[0].ErrorCode = 10241 then begin ShowMessage(Mensagem de erro+E.Errors[0].Message ); ShowMessage( Arquivo com erro+E.Errors[1].Message ); ShowMessage( Nome do usuario+ E.Errors[2].Message ); end; end; end;

Retornar o nome do usurio que esta com a tabela Exclusiva


procedure TForm1.BitBtn1Click(Sender: TObject); begin try Table1.Close; Table1.Exclusive := True; Table1.Open; except on E:EDBEngineError do if E.Errors[0].ErrorCode = 10243 then begin ShowMessage(Mensagem de erro+E.Errors[0].Message ); ShowMessage( Arquivo com erro+E.Errors[1].Message ); ShowMessage( Nome do usuario+ E.Errors[2].Message ); end end; end;

Configurao do BDE para ambiente de rede


Para o seu aplicativo feito em Delphi rodar em rede, voc deve instalar o BDE em todas as estaes. No BDE de cada estao, voc deve colocar no parmetro NET Pgina 54

Funes para o Delphi DIR do drive PARADOX o local onde esto as bases de dados e na PATH do Alias especificar o caminho das base de dados. Mas muita ateno, todas as estaes devem estar com a mesma configurao do BDE. Veja o exemplo abaixo para configurao do parmetro NET DIR do drive PARADOX e o PATH do Alias. Estao n.1 NET DIR F:\ Path do Alias F:\DIRETORIO Estao n.2 NET DIR F:\ Path do Alias F:\DIRETORIO Estao n.3 NET DIR F:\ Path do Alias F:\DIRETORIO No aconselhvel que os aplicativos feitos em Delphi 1, sejam executados no servidor da base de dados, pois o PARADOX apresenta problemas de corrupo de arquivos e ndices neste caso. aconselhvel que no servidor voc coloque somente as bases de dados. Mas caso voc tenha necessidade de utilizar o servidor voc pode utilizar uma soluo alternativa para o problema do PARADOX, esta soluo esta sendo satisfatria na maioria dos casos. Digamos que a letra do drive de rede que voc vai acessar o servidor, seja a letra F:, ento, faa o seguinte: Coloque a linha abaixo no arquivo AUTOEXEC.BAT, do servidor. SUBST F: C: Configure o BDE do servidor para que ele acesse o drive F: Esta linha dever ser colocada apenas no servidor, com isso voc passa a ter em seu servidor, um drive virtual para acessar o drive C:, evitando o 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 instalao e configurao do aplicativo e do BDE. Veja abaixo os exemplos da configurao do BDE p/ Delphi 2 e 3: Servidor Estao 1 NET DIR \\SERVIDOR\C NET DIR \\SERVIDOR\C PATH DO ALIAS \\SERVIDOR\C\DIRETORIO PATH DO ALIAS \\SERVIDOR\C\DIRETORIO LOCAL SHARE TRUE LOCAL SHARE FALSE Estao 2 Estao 3 NET DIR \\SERVIDOR\C NET DIR \\SERVIDOR\C PATH DO ALIAS \\SERVIDOR\C\DIRETORIO PATH DO ALIAS \\SERVIDOR\C\DIRETORIO LOCAL SHARE FALSE LOCAL SHARE FALSE DICA: O executvel pode ser colocado em cada mquina da rede, diminuindo assim o trfego de rede.

Pgina 55

Funes para o Delphi

Como criar um Form de Apresentao (Splash Form) como o do WORD


Para voc criar um pequeno Form de apresentao enquanto seu programa carregado ou enquanto sua aplicao gera indices, etc. Crie seu Form de Apresentao (ApresForm) e depois no menu View opo Project Source, inclua o seguinte cdigo: program Mastapp; uses Forms, Apres in APRES.PAS {ApresForm}, Aplicacao01 in APLIC01.PAS {Aplic01Form}, Aplicacao02 in APLIC02.PAS {Aplic02Form}; {$R *.RES} begin ApresForm := TApresForm.Create(Application); ApresForm.Show; ApresForm.Update; Application.CreateForm(TAplic01Form, Aplic01Form); Application.CreateForm(TAplic01Form, Aplic02Form); ApresForm.Hide; ApresForm.Free; Application.Run; end.

Verifica se o Form, j esta ativo, Delphi1, Delphi2 e Delphi3


procedure TForm1.Button1Click(Sender: TObject); var Found,i : Integer; begin Found := -1; for i := 0 to Screen.FormCount - 1 do if Screen.Forms[i] is TForm2 then Found := i; if Found >= 0 then Screen.Forms[Found].Show else begin Form2 := TForm2.Create(Self); Form2.Show; end; end;

Converter a primeira letra de um Texto em maiscula


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin Pgina 56

Funes 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, j esta ativo


procedure TForm1.Button1Click(Sender: TObject); var Found,i : Integer; begin Found := -1; for i := 0 to Screen.FormCount - 1 do if Screen.Forms[i] is TForm2 then Found := i; if Found >= 0 then Screen.Forms[Found].Show else begin Form2 := TForm2.Create(Self); Form2.Show; end; end;

Mostrar as fontes TrueType instaladas no Windows


Para testar o exemplo abaixo inclua em seu formulrio um componente ListBox, um componente Label e um componente ListBox. // Evento OnClick do componente LisBox procedure TForm1.ListBox1Click(Sender: TObject); begin { Atribui a propriedade Caption do componente Label o nome da fonte selecionada apenas para visualizao} Label1.Caption := ListBox1.Items[ListBox1.ItemIndex]; { Atribui ao componente Label1 na propriedade Name da propriedade Font o nome da fonte selecionada para que o componente Label para utilizar a mesma fonte } Label1.Font.Name := ListBox1.Items[ListBox1.ItemIndex]; end; // Evento OnClick do componente Button. procedure TForm1.Button1Click(Sender: TObject); begin {Carrega as fontes instaladas no Windows para o componente ListBox} ListBox1.Items := Screen.Fonts; end;

Pgina 57

Funes para o Delphi

ShowMessage com quebra de linhas


procedure TForm1.Button1Click(Sender: TObject); var MSG : String; begin MSG := Mensagem da Primeira Linha+#13+Mensagem da Segunda Linha+#13+Mensagem da Terceira Linha; ShowMessage(MSG); end; ATENO. A quebra foi possvel atravs do codigo #13.

Veja abaixo como retornar informaes do ambiente DOS


No exemplo abaixo deve ser includo no form um componente Button, um componente StringGrid e um componente ListBox. type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; StringGrid1: TStringGrid; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} // Evento OnClick do componente Button procedure TForm1.Button1Click(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 Pgina 58

Funes para o Delphi PosEq := Pos(=,Items[i]); Cells[0,i] := Copy(Items[i],1,PosEq-1); Cells[1,i] := Copy(Items[i],PosEq+1,Length(Items[i])); end; end; end;

Como colocar um componente ComboBox em um componente StringGrid


Inclua no seu Form um componente ComboBox e um componente StringGrid. type TForm1 = class(TForm) StringGrid1: TStringGrid; ComboBox1: TComboBox; procedure FormCreate(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure ComboBox1Exit(Sender: TObject); procedure StringGrid1SelectCell (Sender: TObject; Col, Row: Integer; var CanSelect: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} // Evento OnCreate do Form procedure TForm1.FormCreate(Sender: TObject); begin { Ajusta a altura do ComboBox com a altura da linha do StringGrid} StringGrid1.DefaultRowHeight := ComboBox1.Height; {Esconde o ComboBox} ComboBox1.Visible := False; end; // Evento OnChange do componente ComboBox procedure TForm1.ComboBox1Change (Sender: TObject); begin StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex]; Pgina 59

Funes para o Delphi ComboBox1.Visible := False; StringGrid1.SetFocus; end; // Evento OnExit do componente ComboBox procedure TForm1.ComboBox1Exit (Sender: TObject); begin StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex]; ComboBox1.Visible := False; StringGrid1.SetFocus; end; // Evento OnSelectCell do componente StringGrid procedure TForm1.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.Left + StringGrid1.Left; R.Right := R.Right + StringGrid1.Left; R.Top := R.Top + StringGrid1.Top; R.Bottom := R.Bottom + StringGrid1.Top; ComboBox1.Left := R.Left + 1; ComboBox1.Top := R.Top + 1; ComboBox1.Width := (R.Right + 1) - R.Left; ComboBox1.Height := (R.Bottom + 1) - R.Top; ComboBox1.Visible := True; ComboBox1.SetFocus; end; CanSelect := True; end;

Como retornar A coluna ativa do DBGrid


unit Unit1; interface use Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids; type TForm1 = class(TForm) DBGrid1: TDBGrid; Pgina 60

Funes para o Delphi Table1: TTable; DataSource1: TDataSource; procedure DBGrid1ColEnter(Sender: TObject); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DBGrid1ColEnter(Sender: TObject); begin Caption := DBGrid1.SelectedField.FieldName; end;

Como mover o conteudo da calculadora do Windows para um Edit


Neste exemplo deve ser includo um componente Timer. type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(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 formulrio} public procedure DrawHand (XCenter, YCenter, Radius, BackRadius: Integer; Angle: Real); end; var Form1: TForm1; implementation {$R *.DFM} // Evento OnTimer do componente Timer procedure TForm1.Timer1Timer(Sender: TObject); var HSec: Word; {valor temporrio, no utilizado} begin {obtm a hora do sistema} DecodeTime (Time, Hour, Minute, Second, HSec); Refresh; end; // Evento OnPaint do componente Form Pgina 61

Funes para o Delphi procedure TForm1.FormPaint(Sender: TObject); var Angle: Real; I, X, Y, Size: Integer; begin {calcula o centro do formulrio} 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 50 + 1; for I := 0 to 11 do begin Angle := 2 * Pi * I / 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 ponteiro dos minutos} Canvas.Pen.Width := 2; Canvas.Pen.Color := clBlue; Angle := 2 * Pi * Minute / 60; DrawHand (XCenter, YCenter, Radius * 90 div 100, 0, Angle); {2. Desenha o ponteiro das horas: percentual dos minutos adicionado 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 ponteiro 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); Pgina 62

Funes 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; // Evento OnCreate do Form procedure TForm1.FormCreate(Sender: TObject); begin {l as horas antes do formulrio ser exibido} Timer1Timer (self); end; // Evento OnResize do Form procedure TForm1.FormResize(Sender: TObject); begin Refresh; end;

Pgina 63

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy