Dicas

 

 

Como converter um campo com valor Currency para String e o mesmo perde os zeros à direita vírgula

var R: real;
begin
     R := 10.00;
     Label1.Caption := FloatToStrf(R,ffCurrency,18,2)
end;

 

Como passar de um campo a outro usando a tecla <ENTER> no lugar da tecla TAB

Basta colocar o seguinte código no evento OnKeyPress de um componente TEdit ou de um TMaskEdit.

Ainda altera a propriedade KeyPreview do form para TRUE. Se for um TEdit ficará assim:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     with Tedit do
          If Key = #13 Then
          begin
               SelectNext(Sender as tWinControl, True, True );
               Key := #0;
          end;
end;

 

Como criar uma tela de abertura (Splash Screen)

Após ter criado o formulário principal, crie um Formulário para a Splah Screen. que iremos chamar de frmSplash (dê o nome que você quiser).

Depois de criar os dois forms, clique no menu VIEW, na opção PROJECT SOURCE. Encontre a linha em que o form de abertura é criado e apague-a.

Linha que deve ser apagada:

begin
  Application.CreateForm(TfrmSplash, frmSplash);   //Esta linha deve ser apagada
end;

Agora insira as linhas abaixo antes da criação dos demais forms do seu aplicativo:

begin

     frmSplash := TfrmSplash.Create(Application);

     frmSplash.Show;

     frmSplash.Update;

     .

     .

     frmSplash.Hide;

     frmSplash.Free;

     Application.Run;

end;

 

Como obter o diretório onde o seu programa está instalado ? 

Crie uma váriavel do tipo String e insira a seguinte linha no evento ou função desejada do formulário: 

ExtractFilePath(Application.Exename);  

Retornará o path atual do arquivo .EXE do seu programa. 

 

Inserindo um Combobox num DBGrid

Siga o passo-a-passo abaixo :

1. insira um Datasource, um DBGrid e dois Table's no form
2. link o Table1 com Datasource1 e DBGrid1
3. defina um banco de dados, uma tabela e ative o Table1
4. defina também para o Table2, mas use uma tabela diferente
5. adicione todos os campos do Table1 através do Fields Editor
6. mude a propriedade Visible para False do campo do Combobox
7. dê um clique com o botão direito do mouse sobre o Fields Editor e  escolha New Field...
8. especifique os parametros para o novo campo
   a) Name: <algum nome>
   b) Type: <tipo do campo>
   c) Size: <tamanho>
   d) Field type: Lookup
   e) Key Field: <campo que receberá o valor escolhido no combobox>
   f) DataSet: Table2
   g) LookUpKeys: <campo listado no combo>
   h) Result Field: <campo que será mostrado para o usuário no Combobox>
9. Execute a aplicação.

 

Como executar outro aplicativo a partir do seu próprio aplicativo em Delphi

Se você quiser chamar de dentro do seu próprio aplicativo, digamos o Bloco de Notas (Notepad.exe) do Windows, digite uma das seguintes linhas abaixo, dependendo do formato da janela que você desejar para o bloco de notas:

Janela Normal: WinExec('C:\WINDOWS\Notepad.exe',SW_SHOWNORMAL);

Janela Minimizada: WinExec('C:\WINDOWS\Notepad.exe',SW_SHOWMINIMIZED);

Janela Maximizada : WinExec('C:\WINDOWS\Notepad.exe',SW_SHOWMAXIMIZED);                                                                                                                

Formatação de casas decimais

procedure TForm1.Button1Click(Sender: TObject);
var num : integer;
begin
      num:=12450;
      Edit1.text:=formatfloat('###,###,##0.00', num)
end;

 

Digitando texto sempre em maiúscula em uma caixa de texto, independente do estado da tecla Caps Lock

No evento OnKeyPress do componente Edit1 faça :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
        if Key in ['a' .. 'z'] then
              Key :=UpCase(Key);
end;

 

Como verificar se um arquivo existe?

If not(fileexists('c:\windows\nuvens.bmp')) then
       Showmessage('Arquivo inexistente');

 

Criando formulários

Qual a melhor maneira de criar forms em tempo de execucao?

a) Application.CreateForm(TfmClientes, fmClientes); Cria o Form; o proprietário é a aplicação.

b) fmClientes := TForm.Create(self); Cria o Form; o proprietário é ele mesmo.

c) fmClientes := TForm.Create(Application); Cria o Form; o proprietário é a aplicação.

d) fmClientes := TForm.Create(nil); Cria o Form; teoricamente sem proprietário; na prática é a aplicação.

e) fmClientes := TfmClientes.Create(self); Cria o Form; o proprietário é ele mesmo.

f) fmClientes := TfmClientes.Create(Application); Cria o Form; o proprietário é a aplicação.

g) fmClientes := TfmClientes.Create(nil); Cria o Form; teoricamente sem proprietário; na prática é a aplicação.

 

Quando você cria um Form dinamicamente:

1. se criar através de CreateForm, que é um método de TApplication, você passa como parâmetro a instância da classe e o nome do seu objeto (TfmClientes, fmClientes);

2. se criar através de Create - método de TForm, entre outros - você passa como parâmetro o proprietário do componente criado (no caso o Form).

2.1 se o proprietário for a aplicação, o Form só será destruído quando você finalizar o aplicativo ou se você declarar Free ou Destroy no seu programa; (casos a, c, d, f, g);

2.2 se o proprietário for ele mesmo (self), o form terá que ser destruído por você;

2.3 se você criar, por exemplo, Form2 e passar como proprietário Form1; no momento em que Form1 for destruído, Form2 também o será.

Quanto à melhor maneira, depende de como você quer controlar a aplicação, mas leve em conta que enquanto um objeto não é destruído, ele está na memória.

 

Exemplo:

procedure TForm1.Button1Click(Sender: TObject);

begin

   Application.CreateForm(TForm2, Form2);{Carrega form na memória}

   Form2.ShowModal;{Mostra form em modo exclusivo}

   Form2.Free; {Libera Memória}

end;  

 

Aliado a este código, deve deve alterar no delphi, no menu Options, opção Project. Mudando os forms a serem criados dinamicamente da coluna Auto-Create Forms para Avaliable Forms.  

 

No evento OnClose do Form2 coloque o seguinte código.

procedure TForm2.FormClose (Sender: Tobject; var Action : TCloseAction);

begin

   Action:= caFree;

end;  

 

Criando alias via programação em Paradox  

Session.AddStandardAlias('SeuAlias', edtPath.text, 'Paradox');

Session.SaveConfigFile;  

Para saber somente o caminho da aplicação  

ExtractFilePath( Application.ExeName )  

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;

Saindo do Windows  

ExitWindowsEx(EWX_REBOOT, 0); //Reinicia o Windows

ExitWindowsEx(EWX_SHUTDOWN, 0); //Desliga o Windows

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

Traduzindo a mensagem "Delete Record ?"  

Quando clicamos sobre o botão de exclusão no DBNavigator (o do sinal de menos) surge uma box com a mensagem "Delete Record?" com botões Ok e Cancel.Para fazer aparecer a mensagem em português deverá selecionar o componente Table e mudar a propriedade ConfirmDelete para False e no evento da tabela BeforeDelete colocar o seguinte:

procedure TForm1.Table1BeforeDelete(DataSet:TDataSet);
begin
   if MessageDlg('Eliminar o Registro?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then Abort;
end;  

Escrevendo um texto na diagonal usando o Canvas  

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;  

Esconder / mostrar o botão iniciar no windows 

procedure EscondeIniciar(Visible:Boolean);
Var taskbarhandle, buttonhandle : HWND;
begin
     taskbarhandle := FindWindow('Shell_TrayWnd', nil);
     buttonhandle := GetWindow(taskbarhandle, GW_CHILD);
     If Visible=True then

          ShowWindow(buttonhandle, SW_RESTORE); //mostra o botão
     else

          ShowWindow(buttonhandle, SW_HIDE); //esconde o botão
end;  

Esconder / mostrar a barra de tarefas no windows

procedure EscondeTaskBar(Visible: Boolean);
var wndHandle : THandle; wndClass : array[0..50] of Char;
begin
     StrPCopy(@wndClass[0],'Shell_TrayWnd');
     wndHandle := FindWindow(@wndClass[0], nil);
     If Visible=True then

          ShowWindow(wndHandle, SW_RESTORE); //Mostra a barra de tarefas
     else
          ShowWindow(wndHandle, SW_HIDE); //Esconde a barra de tarefas
end;

 

Desabilitando o Alt+Tab

procedure TurnSysKeysOff;
var OldVal : LongInt;
begin
     SystemParametersInfo (97, Word (True), @OldVal, 0)
end;

procedure TurnSysKeysOn;
var OldVal : LongInt;
begin
     SystemParametersInfo (97, Word (False), @OldVal, 0)
end;

 

Detectando o número serial 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;  

Como limpar todos os campos Edit de um form de uma só vez

Procedure LimpaEdit;
var i : Integer;
begin
     for i := 0 to ComponentCount -1 do
          if Components[i] is TEdit then
               TEdit(Components[i]).Text := '';
end;


Copiando arquivos

CopyFile(Pchar(Origem),Pchar(Destino),false);

Onde Origem e' a variavel de que contem o nome do arquivo de origem
Destiono e' a variavel que contem o nome do arquivo destino
False : Instrui para sobrescrever o arquivo destino (caso encontre)


Mudar de cor a linha do dbGrid

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
     if Table1.FieldByName('Pagou').Value = True then
          DBGrid1.Canvas.Brush.Color := clGreen
     else

     begin

          DBGrid1.Canvas.Brush.Color := clRed;
          DBGrid1.Canvas.FillRect(Rect);
          DBGrid1.DefaultDrawDataCell(Rect,Field,State);

     end;
end;

 

Manipular registros em um banco de dados  

Dataset.First;    // Move para o primeiro registro da tabela ou query 
Dataset.Prior;    // Move para o registro anterior 
Dataset.Next;    // Move para o próximo registro 
Dataset.Last;    // Move para o último registro 
Dataset.Insert;  // Insere um registro a partir da posição atual 
Dataset.Append; // Insere um registro no final da tabela 
Dataset.Edit;      // Edita o registro atual 
Dataset.Post;     // Confirma a inserção ou edição do registro
Dataset.Cancel;  // Cancela a inserção ou edição do registro
Dataset.Delete;   // Exclui o registro atual

 

Teclas de atalho mais utilizadas   

Adicionar ao projeto - Shift+F11
Browser - Shift+Ctrl+B
Compilar projeto - Ctrl+F9
Executar até o cursor - F4
Executar projeto - F9
Exibir Explorador - Shift+Ctrl+E
Lista de forms - Shift+F12
Lista de janelas - Alt+0
Lista de unidades - Ctrl+F12
Códigos/Interface - F12
Object Inspetor - F11
Opções do projeto - Shift+Ctrl+F11
Project Manager - Ctrl+Alt+F11

 

Mudar a cor do form em tempo de execução   

Form1.Cursor := crHandPoint;
// cr = HandPoint(mão), Arrow(padrão), AppStart(cursorEampulheta), Cross(cruz), HourGlass(ampulheta), etc...

 

Ordenar um ListBox   

ListBox1.Sorted := True;