Dicas de DELPHI
Contribua você também com uma dica
Atenção algumas funcionam somente com Delphi 3 ou 4


ESCONDENDO, MOSTRANDO, HABILITANDO E DISABILITANDO O BOTÃO INICIAR DO WINDOWS

var
Rgn : hRgn;

// Escondendo
Rgn := CreateRectRgn(0, 0, 0, 0);
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),Rgn, true);

// Mostrar
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),0,true);

// Desabilitar
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0, 'Button', nil),false);

// Habilitar
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),true);


DETECTAR O NÚMERO DE SÉRIE DO HD

Function 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;


ESCREVENDO UM TEXTO NA DIAGONAL

procedure TForm1.Button1Click(Sender: TObject);
var
lf : TLogFont;
tf : TFont;

begin
with Form1.Canvas do
begin
Font.Name := 'Arial';
Font.Size := 24;
tf := TFont.Create;
tf.Assign(Font);
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfEscapement := 450;
lf.lfOrientation := 450;
tf.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
tf.Free;
TextOut(20, Height div 2, 'Texto Diagonal!');
end;
end;


PASSANDO DE TPAINTBOX PARA TIMAGE

Image1.Picture.Bitmap.Canvas.Handle := PaintBox1.Canvas.Handle;


TRADUZINDO MAIS MENSAGENS

Primeiro você tem que traduzir os arquivos .Int do diretório Doc do Delphi, é ele que contêm as mensagens. Depois de traduzir, acrescente um End. no final do arquivo e grave-o como .Pas

Coloque o arquivo no diretório Lib do Delphi e mande recompilar o seu projeto com a opção Build All.


FILTER COM STRINGS MAIS FÁCIL

Se você está habituado a usar este código no filter...

Table1.Filter := 'Field = '''+ Table2Nome.asString + '''';

Tente usar este:

Table1.Filter := 'Field = ' + QuotedStr( Table2Nome.asString );


FAZENDO UNDO EM MEMO

Memo1.Perform(EM_UNDO, 0, 0);


OBTENDO O NÚMERO DO REGISTRO ATUAL

Table1.RecNo;


ENVIANDO UM ARQUIVO PARA A LIXEIRA

uses ShellAPI;

Function DeleteFileWithUndo(sFileName : string ) : boolean;
var
    fos : TSHFileOpStruct;
Begin
    FillChar( fos, SizeOf( fos ), 0 );
    With fos do
    begin
        wFunc := FO_DELETE;
        pFrom := PChar( sFileName );
        fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
    end;
    Result := ( 0 = ShFileOperation( fos ) );
end;


DESABILITAR O CTRL+ALT+DEL e ALT+TAB

Var
    numero: integer;
begin
    SystemParametersInfo(97,Word(true),@numero,0);
end;

{ Para habilitar é só chamar a mesma função com Word(false) }


CARREGAR UM CURSOR ANIMADO (*.ANI)

const
    cnCursorID1 = 1;
begin
        Screen.Cursors[ cnCursorID1 ] :=
        LoadCursorFromFile('c:\win95\cursors\cavalo.ani' );
        Cursor := cnCursorID1;
end;

{ O arquivo CAVALO.ANI deverá existir no diretório apontado }


A FUNÇÃO DELAY DO TURBO PASCAL

procedure TForm1.Delay(msecs:integer);
var
    FirstTickCount:longint;
begin
    FirstTickCount:=GetTickCount;
    repeat
        Application.ProcessMessages;
    until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end;


SAINDO DO WINDOWS

{ Reinicia o Windows }
ExitWindowsEx(EWX_REBOOT, 0);

{ Desliga o Windows }
ExitWindowsEx(EWX_SHUTDOWN, 0);

{ Força todos os programa a desligarem-se }
ExitWindowsEx(EWX_FORCE, 0);


TRANSFORMANDO ÍCONE (*.ICO) EM BITMAP (*.BMP)

var
    Pic : TPicture;
    TI : TIcon;

begin
    TI := TIcon.Create;
    TI.Handle := ExtractIcon(HInstance, FileNameBuf, 0);
    Pic := TPicture.Create;
    Pic.Icon := TI;
    Image1.Picture := Pic; {TImage}
    BitBtn1.Glyph := TBitmap.Create;
    with BitBtn1.Glyph do
    begin
        width := TI.Width;
        Height := TI.Height;
        Canvas.Draw(0, 0, Pic.Icon);
    end;
end;


TRANSFERINDO O CONTEÚDO DE UM MEMO PARA UM MEMOFIELD.

Var
    t: TTable;
Begin
    t := TTable.create(self);
with t do
begin
    DatabaseName := 'Alias';
    TableName := 'Tabela.db';
    open;
    edit;
    insert;
    fieldByName('campo').assign(memo1.lines);
    post;
    close;
end;
end;


USANDO ENTER PARA MUDAR DE CAMPO EM DBGRID

Coloque o seguinte código no evento OnKeyDown do DBGrid:

If (Chr(Key)<>#13) then exit;
If (DBGrid1.SelectedIndex + 1 <> DBGrid1.FieldCount) then
DBGRid1.SelectedIndex := DBGRid1.SelectedIndex + 1;


MUDAR O FOCO DO CAMPO EM UM DBGRID

Modificando o foco de um DBGrid

DBGrid1.SelectedIndex:=2; { Vai para a 3a coluna }


ADQUIRINDO UMA PASTA DO WINCHESTER

Label1.Caption := Directory;


MODIFICANDO A POSIÇÃO DO CURSOR EM UM MEMO

Modificando a posição:

ActiveControl:=Memo1;
MemoCursorTo(Memo1,2,3);

Obtendo a Posição:

GetMemoLineCol(Memo1,Linha,Coluna);


EXECUTAR UM PROGRAMA D.O.S. E FECHÁ-LO

WinExec("command.com /c programa.exe",sw_ShowNormal);


DEIXANDO O EXE MENOR E MAIS RÁPIDO

Para deixar o programa executável menor e mais rápido, abra a tela de Options/Project.
Na página Compiler tire todos os "X" e deixe somente nas caixas: Optimization, Aligned Records Fields, Open Parameters, Stric var-strings, Extended Sintax, Open Parameters, Huge Strings, Typed Constants.


CONFIGURANDO A PALETA DE COMPONENTES

Gostaria de modificar a paleta de componentes para que facilite o acesso aos componentes mais usados? É fácil, basta clicar com o botão direito do mouse sobre a paleta e selecionar Properties
Assim é possível até mesmo criar novas pastas para armazenar os componentes.


MODIFICANDO OS DESENHOS DO DBNAVIGATOR

Usando o Image Editor (menu Tools do Delphi) você deverá abrir o arquivo DBCtrls.res que está na subpasta LIB da pasta do Delphi. Altere os bitmaps que aparecem na lista.
Salve, abra o Delphi e seu projeto. Selecione a opção Build All do menu Project. Agora o seu navegador já está com os bitmaps novos. (só funciona em run-time)


USANDO OS EVENTOS DE SOM DO WINDOWS

Evento Som Padrão
MessageBeep(0); { ou Beep; }

Evento Parada Crítica
MessageBeep(16);

Evento Pergunta
MessageBeep(32);

Evento Exclamação
MessageBeep(48);

Evento Asterisco
MessageBeep(64);


TOCANDO SONS *.WAV

Para reproduzir sons no formato WAV em um programa em Delphi é simples, o usuário deverá colocar na clásula Uses o MMSystem. E no corpo do programa o comando:

PlaySound('C:\Windows\Media\Som.wav',1,SND_ASYNC);


COMO FAZER PARA O PROGRAMA FUNCIONAR EM REDE?

Não são necessárias grandes mudanças no Delphi e no projeto para este funcione em rede. No BDE, selecione o drive Paradox, no parametro NET DIR informe o caminho onde está a sua base de dados. Não esqueça que, se estiver usando Alias este também deve ser apontado para o drive da rede onde estão os dados. E por último o parametro LOCAL SHARE tem que estar configurado para TRUE na orelha System.


O QUE SIGNIFICA "KEY VIOLATION"?

Este erro é muito comum, principalmente quando estamos começando a utilizar o bando de dados Paradox do Delphi.
Quando criamos um campo chave (o que vai com um *) em uma tabela significa que este campo será o principal - como um código. ELE NÃO PODE TER DOIS REGISTROS COM VALORES IGUAIS. Quando o programa tenta cadastrar dois registros com valores iguais aparece a mensagem "Key Violation".
Para arrumar o problema basta entrar o database desktop e ao restruturar a tabela re-criar os índices.


COLOCAR FUNÇÕES EM UMA DLL

Edite diretamente no DPR, e depois salve como Funcoes.dpr:

Library Funcoes;

Uses SysUtils,Windows;

{ Uma função multiplica inteiros }

Function
Multiplica(V1,V2:Longint):Longint; Export;
Begin
    Result:= V1 * V2;
end;

Exports { Torna visivel para os programas }

Multiplica;

Begin
end.

Para usar num programa:

Unit Unit1;

Interface

uses
        SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type
    TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClick(Sender: TObject);
    private
        { Private declarations }
    public
        { Public declarations }
    end;

Var
    Form1: TForm1;

Implementation

{ Declara a funcao }

Function Multiplica(V1,V2:Longint):Longint; External 'funcoes.dll';

{$R *.DFM}

Procedure TForm1.FormClick(Sender: TObject);
begin
    Caption:=IntToStr(Multiplica(100,40));
end;

As vantagens de colocar as funções em DLL são:
1. O programa exigirá menos memória
2. Você poderá reaproveitar as funções
3. Em alguns casos pode-se atualizar apenas as dll para um upgrade


COMUNICAÇÃO DDE COM EXCEL VIA COMPONENTE

É um componente para possui muitos métodos para enviar dados, formatar cédulas e criar cálculos no Excel diretamente do Delphi.
O uso é muito fácil.
Para conseguir o componente juntamente com os fontes me peça via email!

Muitas pessoas já pediram e gostaram.


Voltar para a Página Principal

1