Você está na página 1de 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