Delphi
Como executar programas externos
Winexec('Command.com /C Teste.exe',Tipo_de_Janela);
Tipo_de_Janela :
SW_SHOWNORMAL - Visualização normal da janela
SW_MAXIMIZE - Janela maximizada
SW_MINIMIZE - Janela minimizada
SW_HIDE - Escondido
Tecla ENTER funcionar como TAB
Setar a propriedade KeyPreview do Form para True.
Setar a propriedade Default de todos 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_NextDlgCtl,0,0);
end;
end;
Alterando Idapi32.Cfg Via Programa
Check(DbiAddAlias(Nil, PChar(' AliasName '), Nil, PChar('
AliasPath'), True));
Substitua AliasName pelo nome do alias que você quer criar e em
AliasPath pelo path dos arquivos de dados que você quer no seu
alias.
Inclua na cláusula "USES" as units BD e BDE.
Trocando a cor da fonte num DBGrid
Coloque a propriedade defaultdrawdata do dbgrid em FALSE;
No evento onDrawColumnCell do dbgrid coloque o código para mudar
a cor do font do dbgrid e a chave do método para
"desenhar" os dados.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
If Condição then Dbgrid1.Canvas.Font.Color:= clFuchsia; //
coloque aqui a cor desejada
Dbgrid1.DefaultDrawDataCell(Rect, dbgrid1.columns[datacol].field,
State);
end;
Pegando a linha e coluna atuais de um memo
With Memo1 do
begin
Line:= Perform(EM_LINEFROMCHAR,SelStart, 0);
Column:= SelStart - Perform(EM_LINEINDEX, Line, 0);
end;
Habilitar e desabilitar ctrl+alt+del
// desabilita
procedure TForm1.Button1Click(Sender: TObject);
var
numero: integer;
begin
SystemParametersInfo(97,Word(true),@numero,0);
end;
// habilita
procedure TForm1.Button2Click(Sender: TObject);
var
numero: integer;
begin
SystemParametersInfo(97,Word(false),@numero,0);
end;
Criando uma Splash Screen (abertura)
Você pode criar uma tela de abertura no seu programa em Delphi.
Após ter criado um formulário principal, crie um formulário
para a tela de abertura. Aqui iremos chamá-lo de ABERTURAFORM.
Depois de criar os dois formulários, clique no menu VIEW, na
opção PROJECT SOURCE, que permite que seja exibido o código do
arquivo principal do projeto. Localize no código a linha em que
o formulário de abertura é criado e apague-a (ou coloque em
modo de observação, inserindo // no início da linha).
Linha que deve ser apagada:
begin
...
Application.CreateForm(TAberturaForm, AberturaForm); {Esta linha
deve ser apagada}
...
end;
Após remover a linha acima, insira as linhas abaixo antes da
criação dos demais formulários do seu aplicativo:
Linhas que devem ser inseridas:
begin
AberturaForm:= TAberturaForm.Create(Application);
AberturaForm.show
{Os demais formulários devem ser criados aqui}
...
AberturaForm.Hide;
AberturaForm.Free;
Application.Run;
End;
Os comandos...
AberturaForm:= TAberturaForm.Create(Application); - cria o
formulário
AberturaForm.Show - exibe o formulário de abertura na tela
AberturaForm.Hide; - esconde o formulário de abertura
AberturaForm.Free; - tira o formulário da memória
Pegar nome do usuário na rede
function TForm1.usuario : string;
var
szNetName: Array[0..48] of Char;
iResult: DBIResult;
begin
iResult:= DBIGetNetUserName(szNetName);
if iResult <> DBIErr_None then
DBIError( iResult )
else
Result:= StrPas(szNetName);
end;
Colocar na chamada de Uses de sua Unit as seguintes DCUs :
DBITYPES, DBIPROCS, DBIERRS e DB.
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;
Gerenciando mais de uma linha selecionada num DBGrid
(Multiselect)
O DBGrid tem uma propriedade não documentada chamada
SelectedRows
(Tbookmark). Com ela você pode gerenciar Multiselect da seguinte
forma:
var
contador: Integer;
begin
With Dbgrid1 do
Begin
for contador:= 0 to Pred(SelectedRows.Count) do
Begin
Datasource.Dataset.Bookmark:= SelectedRows[contador]; //
posiciona nos registros selecionados do DBGrid
end;
end;
Reproduzindo sons wav, sem o componente mediaplayer
Coloque na clásula Uses a unit MMSystem
SndPlaySound('C:\Windows\Media\Som.wav',SND_ASYNC);
Número de série 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;
Extraindo o ano, mês ou dia de uma data via SQL
Select * from nome_tabela where extract(year from campo_data) =
1997
Você pode extrair o mês (MONTH) ou o dia (DAY).
Como formatar números com zeros à esquerda
var
Numero: Integer;
begin
Numero:= 123;
Edit1.text:= Format('%5.5d',[Numero]); // resulta '00123';
end;
Data por extenso no Quickreport
var
nrdia: Integer;
diasemana: array[1..7] of String;
meses: array[1..12] of String;
dia, mes, ano: Word;
begin
diasemana[1]:= 'Domingo';
diasemana[2]:= 'Segunda-feira';
diasemana[3]:= 'Terça-feira';
diasemana[4]:= 'Quarta-feira';
diasemana[5]:= 'Quinta-feira';
diasemana[6]:= 'Sexta-feira';
diasemana[7]:= 'Sábado';
meses[1]:= 'Janeiro';
meses[2]:= 'Fevereiro';
meses[3]:= 'Março';
meses[4]:= 'Abril';
meses[5]:= 'Maio';
meses[6]:= 'Junho';
meses[7]:= 'Julho';
meses[8]:= 'Agosto';
meses[9]:= 'Setembro';
meses[10]:= 'Outubro';
meses[11]:= 'Novembro';
meses[12]:= 'Dezembro';
DecodeDate(DATE,ano,mes,dia);
nrdia:= DayOfWeek(DATE);
QRLabel1.Caption:= diasemana[nrdia]+', '+INTTOSTR(dia)+' de
'+meses[mes]+' de '+INTTOSTR(ano);
Imprimindo um campo memo via Canvas
Coloque na clásula Uses a unit printers
procedure TForm1.Button1Click(Sender: TObject);
var
i, altura : Integer;
sMemo : String;
begin
With Printer do
begin
Title:= 'Imprimindo memo';
BeginDoc;
With Canvas do
begin
altura := TextHeight('A');
for i := 1 to Memo1.Lines.Count do
begin
sMemo := Memo1.Lines[I];
TextOut(1, (i - 1) * Altura, sMemo);
end;
end;
EndDoc;
end;
end;
Procura e substituição de string num campo memo
Procedure TForm1.Button1Click (Sender: TObject);
Begin
FindReplace(Edit1.Text,Edit2.Text, Memo1);
end;
Procedure FindReplace (const Enc, subs: String; Var Texto:
TMemo);
Var
i, Posicao: Integer;
Linha: string;
Begin
For i:= 0 to Texto.Lines.count - 1 do
begin
Linha := Texto. Lines[i];
Repeat
Posicao:=Pos(Enc,Linha);
If Posicao > 0 then
Begin
Delete(Linha,Posicao,Length(Enc));
Insert(Subs,Linha,Posicao);
Texto.Lines[i]:=Linha;
end;
until Posicao = 0;
end;
end;
Como limpar todos os edits de um form
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to ComponentCount-1 do
begin
If Components[i].ClassName = 'TEdit' then
Tedit(Components[i]).clear; // ou TEdit(components[i]).text:= ''
end;
end;
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);
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('Não tem disco no drive A:');
end;
Como saber o estado das teclas Num lock, Caps lock e Scroll lock
Para saber o estado das teclas acima citadas, utilize a função
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(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
Como compartilhar uma pasta de um outro micro e mapear com uma
letra
var
err : DWord;
PServer, PSenha, PLetra : PChar;
Begin
PServer := '\\Caminho\Caminho' + #0;
PLetra := 'L:';
PSenha := '';
ERR := WNetAddConnection ( PServer , PSenha , PLetra );
CASE ERR of
ERROR_ACCESS_DENIED : ShowMessage ( 'Acesso negado.' );
ERROR_ALREADY_ASSIGNED : ShowMessage ( 'A letra do drive
especificada já está conectada.' );
ERROR_BAD_DEV_TYPE : ShowMessage ( 'O tipo de dispositivo e o
tipo de recurso não são compatíveis.' );
ERROR_BAD_DEVICE : ShowMessage ( 'Letra inválida.' );
ERROR_BAD_NET_NAME : ShowMessage ( 'Nome do servidor não é
válido ou não pode ser localizado.' );
ERROR_BAD_PROFILE : ShowMessage ( 'Formato incorreto de
parâmetros.' );
ERROR_CANNOT_OPEN_PROFILE : ShowMessage ( 'Conexão permanente
não disponível.' );
ERROR_DEVICE_ALREADY_REMEMBERED : ShowMessage ( 'Uma entrada para
o dispositivo especificado já está no perfil do usuário.' );
ERROR_EXTENDED_ERROR : ShowMessage ( 'Erro de rede.' );
ERROR_INVALID_PASSWORD : ShowMessage ( 'Senha especificada
inválida.' );
ERROR_NO_NET_OR_BAD_PATH : ShowMessage ( 'A operação não foi
concluída porque a rede não foi inicializada ou caminho é
inválido.' );
ERROR_NO_NETWORK : ShowMessage ( 'A rede não está presente.' );
else if Err > 0 then
ShowMessage (IntToStr(Err));
end;
end;
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;
Como extrair o ícone de um executável
Inclua a unit Shellapi na cláusula uses do seu form.
Image1.Picture.Icon.Handle:=
ExtractIcon(Handle,PChar('c:\windows\calc.exe'),0);
Aguardar um determinado número de segundos
procedure TForm1.Delay(Tempo: Word);
var x1: Double;
begin
x1:= now;
repeat until ((now-x1)*86400) > Tempo;
end;
Como extrair o número de cores do modo de vídeo corrente do
Windows95
var
hnd: THandle;
bitsPorPixel: integer;
begin
hnd:= GetDC( Handle );
bitsPorPixel:= GetDeviceCaps( hnd, BITSPIXEL );
// 8 = 256 cores; 16 = high color; 24 = true color
end;
Verificando a memória
var
MemoryStatus: TMemoryStatus;
begin
MemoryStatus.dwLength:= sizeof(MemoryStatus);
GlobalMemoryStatus(MemoryStatus);
Label1.Caption := 'Total de memória física : ' +
IntToStr(MemoryStatus.dwTotalPhys);
end;
{typedef struct _MEMORYSTATUS
DWORD dwLength; // sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; // percentual de memória em uso
DWORD dwTotalPhys; // bytes de memória física
DWORD dwAvailPhys; // bytes livres de memória física
DWORD dwTotalPageFile; // bytes de paginação de arquivo
DWORD dwAvailPageFile; // bytes livres de paginação de arquivo
DWORD dwTotalVirtual; // bytes em uso de espaço de endereço
DWORD dwAvailVirtual; // bytes livres}
Trocando a cor de uma célula num DBGrid
No evento onDrawColumnCell do dbgrid coloque o código para mudar
a cor da fonte do dbgrid e a chave do método para
"desenhar" os dados.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const
Rect: TRect; DataCol: Integer; Column: TColumn; State:
TGridDrawState);
begin
if (Column.Field.FieldName = 'NOMEDOCAMPO') then
begin
if condição then // coloque aqui sua condição
begin
DBGrid1.Canvas.Brush.Color:= clAqua;
DBGrid1.Canvas.Font.Color:= clWindowText;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
Exponenciação
Inclua a unit Math na clausula uses do seu form. Depois disso
utilize a função Power.
Edit1.text:= FloatToStr(Power(2,4));
Como manipular arquivos INI
Inclua a unit IniFiles na clausula uses do seu form.
Procedure TForm1.GravaIni( Numero : Longint ; Texto : String ;
Condicao : Boolean);
var
ArqIni : TIniFile;
begin
ArqIni := TIniFile.Create('c:\windows\temp\Teste.Ini');
Try
ArqIni.WriteInteger('Dados', 'Numero', Numero);
ArqIni.WriteString('Dados', 'Texto', Texto);
ArqIni.WriteBool('Dados', 'Condição', 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', 'Condição', Condicao );
Finally
ArqIni.Free;
end;
end;
Utilize as procedures assim:
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;
Como extrair o número do registro atual em tabelas Paradox ou
Dbase
Inclua a unit BDE na clausula uses do seu form.
procedure TForm1.DataSource1DataChange(Sender: TObject; Field:
TField);
var
CP: CurProps;
RP: RecProps;
RecID: Longint;
begin
with Table1 do
begin
UpdateCursorPos;
Check(DbiGetCursorProps(Handle, CP));
Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RP));
if StrComp(CP.szTableType, szDBASE) = 0 then
RecID := RP.iPhyRecNum
else if StrComp(CP.szTableType, szPARADOX) = 0 then
RecID := RP.iSeqNum
else raise EDatabaseError.Create('ERRO! Não é uma tabela
Paradox ou dBASE.');
end;
Label1.Caption:= IntToStr(RecID) +' de '+
IntToStr(Table1.recordcount);
end;
Como 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;
Utilize a função assim:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:= inttostr(TamArquivo('CAMINHO\NOMEDOARQUIVO'));
end;
Como alterar a data e a hora do sistema
procedure TForm1.Button1Click(Sender: TObject);
var
SystemTime : TSystemTime;
begin
With SystemTime do
begin
//Definindo o dia do sistema
wYear:= 1996;
wMonth:= 5;
wDay:= 10;
//Definindo a hora do sistema
wHour:= 20; //hora
wMinute:= 50; //minutos
wSecond:= 59; //segundos
end;
//Colocar a hora e data do sistema
SetLocalTime(SystemTime);
end;