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

S-ar putea să vă placă și