Delphi Funcoes
Delphi Funcoes
Delphi Funcoes
APOSTILA
DICAS DE PROGRAMAO DELPHI
Araras/SP 2013
Pgina 1
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
Pgina 3
Pgina 4
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;
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;
Pgina 6
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;
Pgina 8
// 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;
Pgina 9
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
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;
Pgina 13
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;
Pgina 16
Funes para o Delphi Como utilizar: procedure TForm1.Button1Click(Sender: TObject); begin ExecFile('c:\windows\ladrilhos.bmp'); 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;
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
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;
Funes para o Delphi else if Err > 0 then ShowMessage (IntToStr(Err)); end; 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;
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 ... 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
Pgina 25
Pgina 26
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;
Pgina 28
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;
Pgina 29
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
Pgina 31
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;
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');
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;
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;
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 var cpuspeed:string; begin cpuspeed:=Format('%f MHz', [GetCPUSpeed]); edit1.text := cpuspeed; end;
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.
Pgina 42
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;
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;
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;
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;
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
Pgina 50
Pgina 51
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.
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
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 with Sender as TEdit do if (SelStart = 0) or (Text[SelStart] = ) then if Key in [a..z] then Key := UpCase(Key); end;
Pgina 57
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;
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;
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;
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