Escolar Documentos
Profissional Documentos
Cultura Documentos
31- Abrir automaticamente seu navegador padrão e carregar a pagina determinada
pelo link
32- Copiar registros de uma tabela para outra incluindo valores Null
59- Imprimir diretamente para a impressora sem passar pelo gerenciado de impressão
60- Criar barra de status com suporte „as caixas de edição do Windows 95
75- Nome do usuário logado na rede
76- Capturar o nome das tabelas de um banco de dados
86- Configurar uma rede Novell
115- Preenche com quantidade determinada de zeros o lado esquerdo de uma string
120- Como saber se o CD está no drive
121- Tradução de Mensagens Delphi 3
131- Exclusividade para o programa
164- Mostrar a largura das colunas de um dbgrid igual ao seu tamanho (campo) na
tabela
179- Obtendo o último dia útil caso a data informada caia em um fim de semana
180- Obtendo o próximo dia útil caso a data informada caia em um fim de semana
187- Insere a barra invertida de diretório após o nome especificado.
188- Converte String em Pchar
198- Recebe String de data e converte do formato ORIGEM para formato DESTINO
232- Como configurar o acesso à BD Paradox em uma rede?
233- Como desligar, reiniciar, resetar ou dar logout no sistema ?
243- Descobrir quais são as pastas do Windows
277- Impedir que o usuário mude de página no TabbedNotebook
278- Criar janela redonda
288- Mudando texto do TEdit no OnChange
322- Determinar se o aplicativo está minimizado
323- Fechar um aplicativo com uma mensagem de erro fatal
325- Maximizar um form de forma que cubra toda a tela, inclusive a barra de tarefas
327- Criar um EXE que seja executado apenas através de outro EXE criado por mim
328- Resolver "Internal error near: IBCheck" do Interbase 5.1.1 Server no NT
333- Obter o tipo de um drive (removível, fixo, CD-ROM, unidade de rede, etc)
338- Excluir todos os registros de uma tabela (como DELETE ALL do Clipper)
355- Obter o número do registro atual
411- Como cancelar um Loop (While, For ou Repeat)
412- Inserir Tabelas no Word
422- Exportando dados para um arquivo XML
427- Drag-and-Drop
448- Resolvendo "Internal error near: IBCheck" do Interbase 5.1.1 Server no NT.
450- Obtendo o tipo de um drive (removível, fixo, CD-ROM, unidade de rede, etc)
451- Excluindo todos os registros de uma tabela (como DELETE ALL do Clipper).
456- Mudando a coluna ativa em um DBGrid via programação.
457- Como trabalhar com Filter de forma mais prática?
467- Substituindo um arquivo INI por um documento XML.
501- Serial em rede
502- Senha universal p/ tabelas PARADOX
512- Remove senha de tabela paradox
518- Potência
546- Fechar bandeja de CDs
547- Faz ajuste preciso em impressoras lazer
555- Criar um EXE que seja executado apenas através de outro EXE criado por mim
557- EXE menor
591- Corrigindo um pequeno bug em TLabel.AutoSize
592- Como criar a funcionalidade PING da ICMP.DLL
602- Bloqueio de palavras
629- Abre uma janela DOS num folder qualquer, via explorer
636- Ordenando um DBGrid clicando no título da coluna (usando Query)
637- Retorna uma String em número definido (Replicate)
641- Impedir que o form seja arrastado para fora das margens da tela.
642- Como extrair o tamanho de um arquivo
646- Como implementar a utilização das teclas Ctrl-A para selecionar todo o texto de
658- Copiar arquivos usando curingas (*.*)
659- Retorna o dia da semana em formato string
666- Como fazer funções de rolagem num TForm usando comandos de teclado?
669- Retornar a versão do projeto que esta sendo desenvolvido
670- Como fazer para imprimir o rodapé só na última página. Usando quickreport
671- Listar Arquivos de Um Diretório
681- Programar meu aplicativo para abrir arquivos a partir do Windows Explorer
688- Como fazer para tudo o que for digitado aparecer em maiúsculo
691- Digitando uma string (senha) e devolvendo essa string equivalente ao valor
hexadecimal
697- Como fazer para o sistema nao pedir o Login (Password) Banco de Dados
702- Incluído registros em Banco de Dados MS-Access usando ADO
703- Capturando quando um form for maximizado ou minimizado
713- Listando os campos da tabela num Memo
732- Cria qualquer controle em tempo de execução (button, label, stringlist, memo ...)
747- Diferença entre duas horas
748- Converte hora (formato HH:MM) para minutos
751- Como criar um link para envio de e-mails sem manipular API, e sempre
executando o programa padrão para envio de
e-mails
759- Função que envia e-mail pelo Delphi, anexando mais de um arquivo
768- Como retornar a versão do Word
769- Selecionando os cadastros do mês digitado- SQL
779- Parâmetros em tempo de execução para a Query
786- Convertendo String para Integer, tratando excessões quando a string não for
válida
790- Executando procedure/método genéricamente
791- Pedindo confirmação para fechar um form
801- Como saber se determinada Font está instalada no Windows?
836- Fazendo um efeito Gradiente no Form
837- Mostrar um cursor de ampulheta durante um processamento
847- Colocar os bitmaps na dll
859- Como inserir uma barra de progresso dentro de uma caixa de diálogo
Inicio da pagina
Dica numero : 1
procedure Mostrar_Esconder_BtIniciar(Estado:Boolean);
var taskbarhandle, buttonhandle : HWND;
begin
taskbarhandle := FindWindow('Shell_TrayWnd', nil);
buttonhandle := GetWindow(taskbarhandle, GW_CHILD);
if Estado = True then
ShowWindow(buttonhandle, SW_RESTORE) {mostra o botão}
else
ShowWindow(buttonhandle, SW_HIDE); {esconde o botão}
end;
Inicio da pagina
Dica numero : 2
Inicio da pagina
Dica numero : 3
uses
Registry;
Inicio da pagina
Dica numero : 4
Adicione
procedureaWMNCHitTest(var
seguinte declaraçãoM:na TWMNCHitTest);
seção private do Form:
message wm_NCHitTest;
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { ativa a herança da mensagem }
if M.Result = htClient then { o clique foi na área cliente? }
M.Result := htCaption; { se sim, faz o Windows pensar que foi no Caption. }
end;
Este exemplo tratou o clique na área cliente. Você pode alterar este código para suas
necessidades. Eis os possíveis valores para o Result:
HTBORDER - Borda da janela que não tem a borda de tamanho
HTBOTTOM - Borda horizontal inferior da janela
HTBOTTOMLEFT - Canto inferior esquerdo da janela
Inicio da pagina
Dica numero : 5
Inicio da pagina
Dica numero : 6
var
H : HWnd; begin
H := FindWindow(Nil,'Project1'); if H <> 0 then ShowWindow(H,SW_HIDE);
end;
Inicio da pagina
Dica numero : 7
Crie uma var do tipo word, por ex., Attributes. Depois, atribua a esta var o
valor retornado por FileGetAttr. Ex.:
var
Attributes: Word;
begin
Attributes := FileGetAttr( 'nomedoarquivo' );
// Supondo 4 CheckBoxe's, 1 para cada atributo, Ok?
CheckBox1.Checked := (Attributes and faReadOnly) = faReadOnly;
CheckBox2.Checked := (Attributes and faArchive) = faArchive;
CheckBox3.Checked := (Attributes and faSysFile) = faSysFile;
CheckBox4.Checked := (Attributes and faHidden) = faHidden;
end;
Inicio da pagina
Dica numero : 8
messageBeep(0);
Inicio da pagina
Dica numero : 9
NumSec é o tempo em segundos de espera
var
NumSec SmallInt;
StartTime: TDateTime;
begin
StartTime := now;
NumSec:=10;
repeat
Application.ProcessMessages;
until Now > StartTime + NumSec * (1/24/60/60);
end;
Inicio da pagina
Dica numero : 10
Localize
// Na seção o[ReportSmith]
arquivo RS_RUN.INI (no diretório
inclua a linha seguinte:do Windows);
ShowAboutBox=0
Inicio da pagina
Dica numero : 11
Function ExtractDiskSerial(Drive:String):String;
Var
Serial:DWord;
DirLen,Flags: DWord;
DLabel : Array[0..11] of Char;
begin
GetVolumeInformation(PChar(Drive+':\'),dLabel,12,@Serial,DirLen,Flags,nil,0);
Result := IntToHex(Serial,8);
end;
Inicio da pagina
Dica numero : 12
procedure TForm1.Button1Click(Sender: TObject);
var
SerialNum : pdword;
a, b : dword;
Buffer : array [0..255] of char;
begin
if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
Label1.Caption := IntToStr(SerialNum^);
end;
Inicio da pagina
Dica numero : 13
ExtractFilePath( Application.ExeName )
Inicio da pagina
Dica numero : 14
Você também pode usar as variáveis VK_F1 até VK_F12 referentes as outras teclas de
função.
Inicio da pagina
Dica numero : 15
Quando clicamos sobre o botão de deleçã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;
Inicio da pagina
Dica numero : 16
begin
preview.showmodal;
end;
qprinter.onpreview:=showpreview;
Isto faz com que toda vez que se desejar exibir um preview, o programa abra a rotina
'showpreview', que
abre o formulário criado, chamado 'preview'.
Inicio da pagina
Dica numero : 17
Se você precisa abrir programas externos no seu aplicativo DELPHI, como a
calculadora do Windows, por
exemplo, inclua a seguinte linha no seu programa:
WinExec('calc.exe', sw_show);
'calc.exe' é o nome do programa. Caso queira abrir um outro programa, altere este
nome.
Inicio da pagina
Dica numero : 18
Insira este código em um evento OnKeyPress de um controle de edição:
Inicio da pagina
Dica numero : 19
Uses
MMSystem;
Inicio da pagina
Dica numero : 20
Crie uma váriavel do tipo String e insira a seguinte linha no evento ou função desejada
do formulário:
ExtractFilePath(Application.Exename);
Inicio da pagina
Dica numero : 21
Quando você programar visando uma rede e quiser bloquear um arquivo é só chamar o
metodo "edit" da
Tabela que estiver usando.
EX: Table1.edit;
PS: Se o registro já estiver bloqueado ocorrerá um erro, então você deve fazer o
seguinte :
Inicio da pagina
Dica numero : 22
If ( Chr(Key) <> #13) Then Exit;
If ( DBGrid1.SelectedIndex + 1 <> DBGrid1.FieldCount ) Then
DBGRid1.SelectedIndex := DBGRid1.SelectedIndex + 1;
Inicio da pagina
Dica numero : 23
Function Recno(Dataset: TDataset): Longint;
var
CursorProps: CurProps;
RecordProps: RECProps;
begin
{ Return 0 if dataset is not Paradox or dBASE }
Result := 0;
with Dataset do
begin
if State = dsInactive then DBError(SDataSetClosed);
Check(DbiGetCursorProps(Handle, CursorProps));
UpdateCursorPos;
try
Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RecordProps));
case CursorProps.iSeqNums of
0: Result := RecordProps.iPhyRecNum; { dBASE }
1: Result := RecordProps.iSeqNum; { Paradox }
end;
except
on EDBEngineError do
Result := 0;
end;
end;
end;
Inicio da pagina
Dica numero : 24
uses ShellAPI;
var
fos : TSHFileOpStruct;
begin
Inicio da pagina
Dica numero : 25
const
cnCursorID1 = 1;
begin
Screen.Cursors[ cnCursorID1 ] := LoadCursorFromFile('c:\win95\cursors\lapis.ani' );
Cursor := cnCursorID1;
end;
PS: O arquivo LAPIS.ANI deverá existir no diretório apontado.
Inicio da pagina
Dica numero : 26
var
t: TTable;
begin
t := TTable.create(self);
with t do
begin
DatabaseName := 'MyAlias'; {Nome do Alias}
TableName := 'MyTbl.db';
open;
edit;
insert;
FieldByName('TheField').assign(Memo1.lines);
post; { Requerido!!!}
close;
end;
end;
Inicio da pagina
Dica numero : 27
procedure TForm1.FormResize(Sender: TObject);
var
R : TRect;
DC : HDc;
Canv : TCanvas;
begin
R := Rect( 0, 0, Screen.Width, Screen.Height );
DC := GetWindowDC( GetDeskTopWindow );
Canv := TCanvas.Create;
Canv.Handle := DC;
Canvas.CopyRect( R, Canv, R );
ReleaseDC( GetDeskTopWindow, DC );
end;
Inicio da pagina
Dica numero : 28
procedure TForm1.Button1Click(Sender: TObject);
var
begin
with Form1.Canvas
Font.Name := 'Arial';do begin
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;
Inicio da pagina
Dica numero : 29
Para extrair ícones de um executável, deve-se usar a função da API Extraction. Ela usa
3 parâmetros:
Inicio da pagina
Dica numero : 30
Para alinhar itens do menu principal à direita, deve-se utilizar o seguinte código:
{Isto justifica todos itens à direita do selecionado}
{$ELSE}
ItemInfo.cbSize := SizeOf(TMenuItemInfo);
ItemInfo.fMask := MIIM_TYPE;
ItemInfo.dwTypeData := Buffer;
ItemInfo.cch := SizeOf(Buffer);
GetMenuItemInfo(Menu.Handle,
if Justify = 1 then MenuItem.Command, False, ItemInfo);
ItemInfo.fType := ItemInfo.fType or MFT_RIGHTJUSTIFY;
SetMenuItemInfo(Menu.Handle, MenuItem.Command, False, ItemInfo);
{$ENDIF}
end;
Inicio da pagina
Dica numero : 31
1º Declare o procedure na seção PUBLIC da unit.
procedure JumpTo(const aAdress: String);
Inicio da pagina
Dica numero : 32
procedure TtableCopiaRegistro(Origem, Destino: Ttable);
begin
with TabelaOrig do
begin
{Inicia um contador para os campos da TabelaOrig}
for i := 0 to FieldCount -1 do
{Este if verifica se o campo da TabelaOrig é NULL, se for, atribui seu valor ao
campo da TabelaDest}
if not Fields[i].IsNull then TabelaDest.Fields[i].Assign(Fields[i]);
end; {end with}
end;
Este exemplo funcionará com todos tipos de campos se você tiver acabado de criar a
TabelaDest.
Para criar um dado valor NULL : Fields[i].Clear
Inicio da pagina
Dica numero : 33
Dica numero : 34
Tudo que você precisa é de um componente TSession, um componente
TListBox e uma String List.
end;
Utilize o Help do TSession e consulte seus métodos para ver por exemplo como
capturar o diretório ou
caminho de um Alias com o método 'GetAliasParams'.
Inicio da pagina
Dica numero : 35
{Para Abrir:}
mciSendString('Set cdaudio door open wait', nil, 0, handle);
{Para Fechar:}
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Inicio da pagina
Dica numero : 36
Veja abaixo alguns códigos usados pelas impressoras HP:
RESET = 027/069
BOLD1 = 027/040/115/051/066
BOLD0 = 027/040/115/048/066
ITALIC1 = 027/040/115/049/083
ITALIC0 = 027/040/115/048/083
UNDERLINE1 = 027/038/100/049/068
UNDERLINE0 = 027/038/100/064
LPI6 = 027/038/108/054/068
LPI8 = 027/038/108/056/068
CPI5 = 027/040/115/053/072
CPI6
CPI8 =
= 027/040/115/054/072
027/040/115/056/072
CPI10 = 027/040/115/049/048/072
CPI12 = 027/040/115/049/050/072
CPI17 = 027/040/115/049/054/046/054/055/072
CPI20 = 027/040/115/050/048/072
Inicio da pagina
Dica numero : 37
Function CopiaArquivo(scrname,destname:string):byte;
var
source,destination:file;
buffer:array[1..1024] of byte;
readcnt,writecnt:word;
pname,dname,fname,ename:String;
begin
AssignFile(source,scrname);
Try
Reset(source,1);
Except
CopiaArquivo:=1;
Exit;
end;
If destname[length(destname)]='\' then
begin
pname:=scrname;
destname:=destname+separa(scrname,'\',Ocorre(scrname,'\')+1);
end;
AssignFile(destination,destname);
Try
Rewrite(destination,1);
Except
CopiaArquivo:=2;
Exit;
end;
Repeat
BlockRead(source,buffer,sizeof(buffer),readcnt);
Try
BlockWrite(destination,buffer,readcnt,writecnt);
Except
CopiaArquivo:=3; {Disco Cheio?}
Exit;
end;
until (readcnt=0) or (writecnt<>readcnt);
CloseFile(destination);
CloseFile(source);
CopiaArquivo:=0;
end;
Exemplo:
resultado := CopiaArquivo('C:\diretorio\FILE.EXT','C:\diretorio\FILE.EXT');
Inicio da pagina
Dica numero : 38
ComboBox1.DroppedDown := True;
Inicio da pagina
Dica numero : 39
A rotina abaixo deverá ser colocada no evento OnDrawDataCell, do DBGrid.
Inicio da pagina
Dica numero : 40
IncMonth(Data, 1);
Inicio da pagina
Dica numero : 41
function TForm1.TemDiscoNoDrive(const drive : char): boolean;
var
DriveNumero : byte;
EMode : word;
begin
result := false;
DriveNumero := ord(Drive);
end.
Inicio da pagina
Dica numero : 42
Para acessar as variáveis do ambiente DOS, deve-se usar a função da API
GetDosEnvironment. Ela
retorna um PChar que pode ser avaliado.
Inicio da pagina
Dica numero : 43
Quando você executa um programa DOS no Windows95, sua janela permanece aberta
até ser fechada
pelo usuário. Para executar um programa DOS que fecha sua janela após a execução,
deve ser
especificado "command.com /c programa" na linha de comando. Usando a função da
API WinExec
para executar um programa chamado proddos.exe, a chamada deve ser:
Se o programa deve ser executado sem que seja visualizado pelo usuário, o segundo
parâmetro deve ser
sw_Hide. Deve ser especificada a extensão .com, senão o programa não será executado.
Inicio da pagina
Dica numero : 44
No Microsoft® Windows®, existe uma tabela do sistema chamada „atom table‟. Esta
tabela armezena
strings com seus correspondentes identificadores. Existem várias funções da API do
windows,
chamadas de „atom functions‟, que permitem que uma aplicação insira, apague, procure
por uma
determinada „atom string‟, etc.. O código abaixo garante que somente uma instância do
executável
de sua aplicação estará carregado em memória. O form1 seria o form principal da
aplicação:
begin
Inicio da pagina
Dica numero : 45
Utilize o comando with, desse modo:
With Edit1 do
begin
Text := ' @Delphi';
Widht := 30;
Enabled := True;
end;
Inicio da pagina
Dica numero : 46
No Evento OnKeyPress de um Edit:
Inicio da pagina
Dica numero : 47
Se for um richedit e margens laterais(direita e esquerda) tenta
Inicio da pagina
Dica numero : 48
Paradox:
Inicio da pagina
Dica numero : 49
var
OldValue : LongBool;
begin
{liga a trava}
SystemParametersInfo(97, Word(True), @OldValue, 0);
{desliga a trava}
SystemParametersInfo(97, Word(False), @OldValue, 0);
end;
Inicio da pagina
Dica numero : 50
Form1:=tform1.create(application);
Form1.show;
Form1.update;
Form1.hide;
Form1.free;
Application.Run;
Inicio da pagina
Dica numero : 51
function encrypt( dummy: Pchar):Pchar;
var
x: Integer;
w: Word;
s: String;
c: Char;
begin
s:=StrPas(dummy);
w:=StrLen(dummy);
for x:=1 to w do
begin
c:=s[x];
c:=char ( ord (c) xor 159);
s[x]:=c;
end;
StrPCopy(dummy,s);
encrypt:=dummy;
end;
Inicio da pagina
Dica numero : 52
function TForm1.StrReverse(MyString : string) : String;
var
i: integer;
HelpString: string;
begin
HelpString := '';
for i := 1 to :=
HelpString Length(MyString) do
MyString[i]+HelpString;
Result := HelpString;
end;
Inicio da pagina
Dica numero : 53
{Integer to Binary}
function IntToBin(Value: LongInt;Size: Integer): String;
var
i: Integer;
begin
Result:='';
for i:=Size downto 0 do
begin
if Value and (1 shl i)<>0 then
begin
Result:=Result+'1';
end
else
begin
Result:=Result+'0';
end;
end;
end;
Inicio da pagina
Dica numero : 54
{Binary to Integer}
function BinToInt(Value: String): LongInt;
var
i,Size: Integer;
begin
Result:=0;
Size:=Length(Value);
for i:=Size downto 0 do
begin
if Copy(Value,i,1)='1' then
begin
Result:=Result+(1 shl i);
end;
end;
Inicio da pagina
Dica numero : 55
const
StartKey = 981; {Start default key}
MultKey = 12674; {Mult default key}
AddKey = 35891; {Add default key}
{Encriptar}
function Encrypt(const InString: string; StartKey,MultKey,AddKey: Integer): string;
var
I: Byte;
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result
StartKey:= :=
Result + CHAR(Byte(InString[I])
(Byte(Result[I]) xor (StartKey
+ StartKey) * MultKey shr 8));
+ AddKey;
end;
end;
{Descriptar}
function Decrypt(const InString: string; StartKey,MultKey,AddKey: Integer): string;
var
I: Byte;
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
Inicio da pagina
Dica numero : 56
Para tratar erros de forma genérica, em todo o seu programa, insira no método ON
CREATE do formulário
principal a linha:
Application.OnException:=RotinaGeral;
RotinaGeral é uma procedure na qual deverá constar o código para verificar e enviar as
mensagens de
erro do seu sistema.
Inicio da pagina
Dica numero : 57
Muitas vezes torna-se necessário, ou até mesmo, imprescindível que você envie
informações diretamente
para a impressora, uma vez que a utilização da impressão típica do Windows é um
pouco demorada e
o uso do driver Genérico/Somente Texto não é muito confiável.
Uma boa solução para enviar informações diretamente para a impressora é usar o
seguinte código:
Inicio da pagina
Dica numero : 58
Ao trabalharmos com impressão, em certos casos desejamos alterar o comportamento da
impressora.
Na documentação do Win32 SDK este escape é dado como obsoleto, mas enquanto
utilizarmos
impressoras matriciais que necessitem de "códigos escape" para certas funcionalidades,
ele será
necessário.
Ao utilizar impressoras Postscript tenha cuidado, pois nem sempre esta técnica irá
funcionar. Em
impressoras matriciais, você pode enviar qualquer tipo de caracteres que achar
necessário.
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses Printers;
type
{ Tipo requerido pelo PASSTHROUGH }
TBufferImpressora = record
TamanhoBuffer: Word;
Buffer: array [0..255] of Char;
end;
Inicio da pagina
Dica numero : 59
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
i : integer;
begin
AssignFile(F,‟LPT1');
Rewrite(F);
i := 0;
Writeln(F,‟Teste de impressao - Linha 0');
Writeln(F,‟Teste de impressao - Linha 1');
Writeln(F,#27#15+‟Teste de Impressão - Linha 2');
W riteln(F,‟Teste de impressao
Writeln(F,#27#18+‟Teste - Linha 3');
de Impressão - Linha 4');
Writeln(F,‟Teste de impressao - Linha 5');
Writeln(F,#12); // Ejeta a página
CloseFile(F);
end;
Inicio da pagina
Dica numero : 60
No evento OnCreate do Form:
Application.OnHint := DisplayHint;
Crie (e defina) uma Procedure DisplayHint (no Form Principal):
StatusBar1.Panels[0].Text := Application.Hint;
Inicio da pagina
Dica numero : 61
procedure TForm1.Button1Click(Sender: TObject);
var
DeskTopDC: HDc;
DeskTopCanvas: TCanvas;
DeskTopRect: TRect;
begin
DeskTopDC := GetWindowDC(GetDeskTopWindow);
DeskTopCanvas := TCanvas.Create;
DeskTopCanvas.Handle := DeskTopDC;
DeskTopRect := Rect(0,0,Screen.Width,Screen.Height);
Form1.Canvas.CopyRect(DeskTopRect,DeskTopCanvas,DeskTopRect);
ReleaseDC(GetDeskTopWindow,DeskTopDC);
end;
Inicio da pagina
Dica numero : 62
Para compactar (remover fisicamente todos registros apagados) de uma tabela Paradox
deve-se utilizar o
seguinte código:
var
TBDesc : CRTblDesc;
hDb: hDbiDb;
begin
FillChar(TBDesc,Sizeof(TBDesc),0);
with TBDesc do begin
StrPCopy(szTblName,Table.TableName);
StrPCopy(szTblType,szParadox);
bPack := True;
end;
hDb := nil;
Check(DbiGetDirectory(Table.DBHandle, True, TablePath));
Table.Close;
Check(DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite,
dbiOpenExcl,nil,0, nil, nil, hDb));
Check(DbiSetDirectory(hDb, TablePath));
Check(DBIDoRestructure(hDb,1,@TBDesc,nil,nil,nil,False));
Table.Open;
end;
Inicio da pagina
Dica numero : 63
Internacional do Painel de Controle. Isto pode levar a erros quando avaliando datas,
números ou
listas.
Para evitar estes erros, você pode mudar as constantes definidas no Delphi, como
DecimalSeparator,
ShortFormatDate e outros desta maneira:
DecimalSeparator :='.';
ShortFormatDate :='mm/dd/yy';
Isto terá precedência sobre a configuração padrão. Para uma lista completa das
variáveis, procure em
Currency Formating Variables na ajuda do Delphi.
Inicio da pagina
Dica numero : 64
Para listas (pegar) todas as janelas abertas, deve-se usar a função API EnumWindows,
que usa uma
função Callback, com dois parâmetros, um Handle para a janela e um ponteiro. Você
pode usá-la
como um código semelhante a este (este lista as janelas abertas, mesmo invisíveis, em
uma listbox):
Inicio da pagina
Dica numero : 65
Para converter a primeira letra de um Edit para maiúsculas este código pode ser
utilizado:
Inicio da pagina
Dica numero : 66
Turn monitor off
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER,
0);
Turn monitor on
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -
1);
Inicio da pagina
Dica numero : 67
Adicionar à cláusula Uses, Shellapi.
Swapmousebutton(true) ;
Inicio da pagina
Dica numero : 68
Primeiro deve-se adicionar à cláusula Uses, ShellApi.
Inicio da pagina
Dica numero : 69
Arquivos Paradox podem ser compartilhados em rede. Para que isto ocorra devemos:
Inicio da pagina
Dica numero : 70
Para fazer pesquisa incremental numa tabela usando um EDIT, deve-se colocar o
seguinte código em seu
evento OnChange:
Width Edit1 do
if Text <>'' then
Table1.FindNearest([Text]);
end;
Inicio da pagina
Dica numero : 71
Para incluir mais de uma linha no Hint você deve utilizar o evento OnMouseMove de
cada componente.
Inicio da pagina
Dica numero : 72
Esta dica só funciona em Delphi 1.0.
No Projeto (.DPR):
uses windows, messages, // necessarios acrescentar
Forms, ...........
var
Hwnd: THandle; // variavel necessaria
begin
Hwnd:=FindWindow('O seu TForm', 'O caption do seu form principal');
if Hwnd = 0 then begin
Application.Initialize;
end
else begin
if not IsWindowVisible(Hwnd) then begin // se minimizado
ShowWindow(Hwnd, SW_SHOWNORMAL); //mostra
PostMessage(Hwnd, WM_USER, 0, 0); //restaura
end;
SetForegroundWindow(Hwnd); // visivel
end;
private
{ Private declarations }
public
procedure WMUser(var msg: TMessage); message WM_USER; //definicao
{ Public declarations }
end;
implementation
{$R *.DFM}
Inicio da pagina
Dica numero : 73
Para mostrar as resoluções de vídeo disponíveis, deve-se usar a função da API
EnumDisplaySettings: ela
pega todos os modos de vídeo disponíveis.
Inicio da pagina
Dica numero : 74
unit sobreManager;
interface
type
TfrmSobreManager = class(TForm)
btnOK: TButton;
ProductName: TLabel;
Version: TLabel;
Label1:
Label2: TLabel;
TLabel;
Label3: TLabel;
Copyright: TLabel;
Panel1: TPanel;
Image2: TImage;
GroupBox1: TGroupBox;
Bevel1: TBevel;
stOSVersao: TStaticText;
stOSBuilder: TStaticText;
stOS: TStaticText;
stOSService: TStaticText;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmSobreManager: TfrmSobreManager;
implementation
{$R *.DFM}
Istr: Word;
: String;
begin
verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(verInfo) then begin
stOSVersao.Caption := 'Versão : '+ IntToStr(verInfo.dwMajorVersion) +
IntToStr(verInfo.dwMinorVersion);
stOSBuilder.Caption := 'Compilação : '+IntToStr(verInfo.dwBuildNumber);
str := 'Sistema Operacional : ';
case verInfo.dwPlatformId of
VER_PLATFORM_WIN32s : stOS.Caption := str +'Windows 95';
VER_PLATFORM_WIN32_WINDOWS
98'; : stOS.Caption := str +'Windows 95 Osr2 /
str := '';
for I :=str0+toverInfo.szCSDVersion[I];
str := 127 do
stOSService.Caption := 'Informações Adicionais : '+ str;
end
end;
end.
Inicio da pagina
Dica numero : 75
Existe na API do BDE uma funcao chamada DbiGetNetUserName, que retorna o nome
do usuário logado.
Tente o seguinte:
function GetUserName:string;
var
Nome: array[0..64] of char;
begin
if DbiGetNetUserName(Nome) <> DBIERR_NONE then Nome:='';
Result:=StrPas(Nome);
end;
Inicio da pagina
Dica numero : 76
Crie um Alias para o seu banco da dados(Fizemos com um banco do Interbase).
Adicione o seguinte
código ao seu programa(Neste caso o código foi feito no evento OnActivate do Form1):
Inicio da pagina
Dica numero : 77
Caracter Definições
! Faz com que a digitação da máscara fique parada no primeiro caracter, fazendo com
que os caracteres
digitados que se movam. Ex: !;0;_
> Todos os caracteres digitados serão convertidos para maiúsculas. Ex: >aaa;0;_
< Todos os caracteres digitados serão convertidos para minúsculas. Ex:
<> Anula o uso dos caractes > e <, ou seja, utilizado para cancelar a opção de máscara
para os
caracteres a direita. Ex: >aaa<>aaa;0;_
\ Utilizado para marcar determinado caracter não especial como fixo. Ex: !\(999\)000-
0000;0;_
L Exige caracteres alfabéticos obrigatórios para a posição, do tipo A-Z, a-z. Ex:
LLL;1;_
l Somente caracteres alfabéticos para a posição, mas não-obrigatórios, do tipo A-Z, a-z.
Ex: lll;1;_
A Exige caracteres alfanuméricos obrigatórios para a posição, do tipo A-Z, a-z, 0-9. Ex:
AAA;1;_
a Somente caracteres alfanuméricos para a posição, mas não-obrigatórios, do tipo A-Z,
a-z, 0-9. Ex:
aaa;1;_
Inicio da pagina
Dica numero : 78
Para traduzir algumas as mensagens do Delphi que aparecem nos botões e nas caixas de
avisos da
função MessageDlg, você necessita dos arquivos de recursos do Delphi (*.RC).
Possuo o Delphi 2 - Developers, que vem acompanhado de alguns destes arquivos de
recursos. No meu
caso, eles estão gravados em C:\DELPHI2\SOURCE\VCL.
Os arquivos *.RC são arquivos "só texto", e contêm diversas mensagens utilizadas nos
programas
compilados no Delphi. O exemplo que se segue realiza alterações nos arquivos
CONSTS.RC e
DBCONSTS.RC. A alteração de outros arquivos "RC" pode ser feita de modo similar.
Para maiores
detalhes, envie-me um e-mail (paulosd@dglnet.com.br), ou, melhor ainda, consulte o
livro
"Dominando o Delphi" (edição para o Delphi 1), de Marcos Cantù, ed. Makron Books.
O assunto
"Usando recursos de tabelas de strings" está no capítulo 21, página 876. Não sei se a
edição para o
Delphi 2 cobre este assunto.
a) Faça uma cópia dos arquivos CONSTS.RC e DBCONSTS.RC em um diretório
seguro, para o caso de algo
sair errado.
Você só deve alterar as strings que estão entre aspas. Não altere o nome das constantes,
que estão no
início de cada linha.
Por exemplo, localize o seguinte bloco, em CONSTS.RC:
SCancelButton, "Cancel"
SYesButton, "&Yes"
SNoButton, "&No"
Altere para:
SCancelButton, "Cancelar"
SYesButton, "&Sim"
SNoButton, "&Não"
Não é necessário alterar todas as mensagens. Se desejar, altere apenas aquelas que você
utiliza em
seus sistemas. Lembre-se de salvar as alterações efetuadas.
C:\DELPHI2\BIN\BRC32 -R CONSTS.RC
C:\DELPHI2\BIN\BRC32 -R DBCONSTS.RC
f) Crie uma aplicação no Delphi que utilize a função MessageDlg, e botões "BitBtn".
Ao rodar o seu
programa, as mensagens já devem aparecer traduzidas.
Inicio da pagina
Dica numero : 79
procedure TForm1.BtSelecionaClick(Sender: TObject);
var
FileHandle : THandle;
LocalFileTime : TFileTime;
DosFileTime : DWORD;
LastAccessdTime : TDateTime;
FindData : TWin32FindData;
Inicio da pagina
Dica numero : 80
Um dos recursos disponibilizados pelo Delphi é a customização das informações de
versão a serem
"anexadas" na linkagem.
Pouco utilizado, este recurso é muito interessante, pois possibilita o cadastro de diversas
informações
sobre o arquivo gerado, como: número de versão, nome do produto, nome interno do
arquivo,
nome da empresa, etc.
"FileName" possuir as
informações de versão, e devolverá por referência um "TStringList" contendo as
informações.
//Código
function FileVerInfo(const FileName: string; var FileInfo: TStringList): Boolean;
const
Key: array[1..9] of string =('CompanyName', 'FileDescription', 'FileVersion',
'InternalName',
'LegalCopyright', 'OriginalFilename', 'ProductName', 'ProductVersion', 'Comments');
KeyBr: array [1..9] of string = ('Empresa', 'Descricao', 'Versao do Arquivo', 'Nome
Interno', 'Copyright',
'Nome Original do Arquivo', 'Produto', 'Versao do Produto', 'Comentarios');
var
Dummy : THandle;
BufferSize, Len : Integer;
Buffer : PChar;
LoCharSet, HiCharSet : Word;
Translate, Return : Pointer;
StrFileInfo, Flags : string;
TargetOS, TypeArq : string;
FixedFileInfo : Pointer;
i : Byte;
begin
Result := False;
{ Obtemos o tamanho em bytes do "version information" }
BufferSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
if BufferSize <> 0 then
begin
GetMem(Buffer, Succ(BufferSize));
try
if GetFileVersionInfo(PChar(FileName), 0, BufferSize,
Buffer) then
{ Executamos a função "VerQueryValue" e conseguimos informações sobre o idioma
/character-set }
if VerQueryValue(Buffer, '\VarFileInfo\Translation', Translate, UINT(Len)) then
begin
LoCharSet := LoWord(Longint(Translate^));
HiCharSet := HiWord(Longint(Translate^));
for i := 1 to 9 do
begin
{ Montamos a string de pesquisa }
StrFileInfo := Format('\StringFileInfo\0%x0%x\%s', [LoCharSet, HiCharSet, Key[i]]);
{ Adicionamos cada key pré-definido }
if VerQueryValue(Buffer,PChar(StrFileInfo),
FileInfo.Add(KeyBr[i] + ': ' + PChar(Return));Return, UINT(Len)) then
end;
if VerQueryValue(Buffer,'\',FixedFileInfo, UINT(Len))
then
with TVSFixedFileInfo(FixedFileInfo^) do
begin
Flags := ''; um bitmask e obtemos os "flags" do arquivo}
{Efetuamos
if (dwFileFlags and VS_FF_DEBUG) = VS_FF_DEBUG then
Flags := Concat(Flags,'*Debug* ');
if (dwFileFlags and VS_FF_SPECIALBUILD) = VS_FF_SPECIALBUILD then
Flags := Concat(Flags, '*Special Build* ');
if (dwFileFlags and VS_FF_PRIVATEBUILD) = VS_FF_PRIVATEBUILD then
Flags := Concat(Flags, '*Private Build* ');
if (dwFileFlags and VS_FF_PRERELEASE) = VS_FF_PRERELEASE then
Flags := Concat(Flags, '*Pre-Release Build* ');
if (dwFileFlags and VS_FF_PATCHED) = VS_FF_PATCHED then
Flags := Concat(Flags, '*Patched* ');
if Flags <> '' then FileInfo.Add('Atributos: ' + Flags);
TargetOS := 'Plataforma (OS): ';
{ Plataforma }
case dwFileOS of
VOS_UNKNOWN :
TargetOS := Concat(TargetOS, 'Desconhecido');
VOS_DOS :
TargetOS := Concat(TargetOS, 'MS-DOS');
VOS_OS216 :
TargetOS := Concat(TargetOS, '16-bit OS/2');
VOS_OS232 :
TargetOS := Concat(TargetOS, '32-bit OS/2');
VOS_NT :
TargetOS := Concat(TargetOS, 'Windows NT');
VOS_NT_WINDOWS32, 4:
TargetOS := Concat(TargetOS, 'Win32 API');
VOS_DOS_WINDOWS16:
TargetOS := Concat(TargetOS, '16-bit Windows ',
'sob MS-DOS');
else
TargetOS := Concat(TargetOS, 'Fora do Padrão. Código: ', IntToStr(dwFileOS));
end;
FileInfo.Add(TargetOS);
TypeArq := 'Tipo de Arquivo: ';
{ Tipo de Arquivo }
case dwFileType of
VFT_UNKNOWN :
TypeArq := Concat(TypeArq,'Desconhecido');
VFT_APP : TypeArq := Concat(TypeArq,'Aplicacao');
VFT_DLL : TypeArq := Concat(TypeArq,'Dynamic-Link Lib.');
VFT_DRV
TypeArq := :Concat(TypeArq,'Device
begin driver - Driver ');
Inicio da pagina
Dica numero : 81
procedure AcertaPadraoData;
const
var
ii: integer;
begin
ShortDateFormat := 'dd/mm/yyyy';
DecimalSeparator := '.';
ThousandSeparator := ',';
for ii := 1 to 7 do begin
ShortDayNames[ii] := arrShortDayNames[ii];
LongDayNames[ii] := arrLongDayNames[ii];
end;
for ii := 1 to 12 do begin
ShortMonthNames[ii] := arrShortMonthNames[ii];
LongMonthNames[ii] := arrLongMonthNames[ii];
end;
end;
Inicio da pagina
Dica numero : 82
Ajuste a propriedade Style do ComboBox para csOwnerDrawVariable.
end;
begin
Height:=20;
end;
Inicio da pagina
Dica numero : 83
Bookmarks permitem ao programador "memorizar" um determinado local da tabela
para que possa
retornar mais tarde, é muito simples e fácil de usar já que existem apenas três métodos
que lhe
var
bmLocalImportante : TBookmark;
begin
bmLocalImportante := table.GetBookMark;
{Para retornar a este local em particular a qualquer momento deve-se utiliza o método
GotoBookMark() ,
este método recebe como parâmetro o TBookmark recebido como retorno de
GetBookMark.}
table1.GotoBookMark(bmLocalImportante);
{Após utilizar o Bookmark para o que desejar é importante que a memória utiliza por
este recurso seja
novamente liberada para o sistema,para executar esta operação utilize o método
FreeBookMark.}
table1.FreeBookMark(bmLocalImportante);
{Podem ser criados vários Bookmarks para uma mesma tabela, sendo este numero
limitado apenas pela
quantidade de memória livre no equipamento.}
end;
OBS:Mas cuidado com o uso indevido deste recurso, cada instancia de TBookMark
reserva uma
determinada porção de memória que só será novamente liberada para ser reutilizada
após a
execução de um FreeBookmark. Se vários Bookmarks forem criados e não liberados
podem
comprometer a execução do programa.
Inicio da pagina
Dica numero : 84
1. insira um Datasource, um DBGrid e dois Table's no form
3. defina um banco de dados, uma tabela e ative o Table1
7. dê um clique com o botão direito do mouse sobre o Fields Editor e escolha New
Field...
9. Execute a aplicação.
Inicio da pagina
Dica numero : 85
procedure TForm1.Button1Click(Sender: TObject);
var
NRW: TNetResource;
begin
with NRW do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := 'G:';
lpRemoteName := '\\servidor\c';
lpProvider := '';
end;
WNetAddConnection2(NRW, 'MyPassword', 'MyUserName',
CONNECT_UPDATE_PROFILE);
end;
Inicio da pagina
Dica numero : 86
Configurar uma rede Novell para trabalhar com Delphi é muito facíl, mais facíl que um
rede ponto a ponto
como Windows 95 ...
Primeiro precisamos de um diretório onde será criado o NET FILE do Paradox,
normalmente um diretório
partindo do raiz do servidor será o suficiente, vamos usar o drive padrão da Novell para
exemplificar o caso ...
Para o diretório onde serão armazenados os arquivos do seus sistema não é necessário
nenhum cuidado
especial, podemos assumir alguma configuração como a que segue ...
Para quem trabalha todos os dias com uma rede Novell existe uma armadilha que pode
causar umas noites
mal dormidas :( ...
Uma das coisas que muitos tentam para economizar um pouco do HD local é colocar o
executável na rede,
sem grandes problemas desde que você tenha um cuidado básico. Sempre que você
executa
programaumque trata com base Paradox o PRIVATE DIR fica sendo o diretório onde este
executável
se encontra, no caso de você colocar este executável em um diretório da rede para ser
acessado
por muitos como fica este diretório PRIVATE ??? jé não é mais tanto PRIVATE né ...
Para resolver este problema você deve "programaticamente" alterar o Private Dir para
um diretório
local,para isso você tem de adicionar as seguintes linhas de código ao iniciar a sua
aplicação.
Session.PrivateDir := 'C:\WINDOWS\TEMP';
Este cuidado pode prevenir varias travadas sem razão aparente em redes Novell.
Inicio da pagina
Dica numero : 87
Vamos exemplificar com tres maquinas, 1 servidor chamado SERV e duas maquinas
clientes. Claro que
isto pode ser incrementado de acordo com suas necessidades :).
No servidor:
No fim deste processo você terá o drive H: como sendo o seu Drive de rede para o
Sistema, este drive
estará presente em todas as maquinas e pode ser utilizado como seu NET DIR.
No BDE Configuration:
Em seu Alias:
Path: H:\DADOS\
Em System:
Depois disto você configurar o BDE de forma igual em todas as maquinas da rede.
Inicio da pagina
Dica numero : 88
Criar um arquivo em tempo de execução é relativamente simples, você tem que criar
uma instancia do
objeto TTable, esse objeto (de uma lida no Help TTable e suas propriedades e metodos)
tem um
metodo de criação e um de Criar tabela.
DatabaseName := 'c:\lista';
TableName := 'Produtos.dbf';
TableType := ttDbase;
e os indices ...
Procedure TMainForm.Inicializa;
var
Table1 : TTable;
begin
end;
Dica numero : 89
Quando alguém esta digitando algum valor que posteriormente será utilizado para
calculo alguns
cuidados
do são necessários, esse procedimento ValidaKey deve ser ligado no OnChange
TDBEdit
para checar qual foi a tecla digitada.
Se algum numero, ponto, virgula, BackSpace ou Enter for digitado então pode passar
normalmente, caso
contrario a tecla pressionada é ignorada.
O separador decimal so pode ser digitado uma unica vez, na tentativa de uma segunda
digitação
ignora-se o símbolo.
mesmo efeito
poderia ter sido obtido com a aplicação de uma mascara.
Inicio da pagina
Dica numero : 90
Quem trabalha com DBF's já encontrou problemas para criar índices compostos, ou seja
um índice que
tenha mais de um campo, em tempo de execução.
Isto ocorre por dois motivos, embora exista na internet documentação sobre o assunto,
dizendo ser
possível, ainda não encontrei ninguém que tenha tido sucesso nesta tarefa. O outro
motivo é ade um parâmetro não documentado necessário para arquivos DBF's
existência
ixExpression que
informa o Delphi que se trata de um índice com mais de um campo.
Como trabalhar com DBF's é comum para a maioria dos programadores que vem do
Clipper acho
interessante solucionar este problema da melhor forma possível.
Assim a criação do indice fica para logo depois da criação da tabela, como mostra o
segmento de codigo
abaixo.
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DB,
DBTables;
var
Table1 : TTable;
begin
{ Criar arquivos }
Table1 := TTable.create(Application);
{ Cria arquivo }
with Table1 do begin
Active := False;
DatabaseName := 'C:\';
TableName := 'teste';
TableType := ttdBASE;
with FieldDefs do begin
Clear;
Add('Name1', ftString, 20, False);
Add('Name2', ftString, 20, False);
end;
Na pratica criar os índices com AddIndex() logo após CreateTable não vai influenciar
em nada o seu
programa.
Inicio da pagina
Dica numero : 91
Baixe na Internet um dos melhores compiladores de Pascal para DOS/OS2/Linux.
Suporta praticamente
todo o set de opções do Borland Pascal e vai além, dando suporte ao modelo de objetos
do Object
Pascal e otimiza pra 386/486/Pentium/Pentium Pro/MMX e Pentium II. O código é todo
gerado para
modo protegido e, devido a isso, não possui quaisquer limites para arrays ou ponteiros.
Mas o
melhor de tudo é que ele é GRATIS!!!
http://www.brain.uni-freiburg.de/~klaus/fpc/
Inicio da pagina
Dica numero : 92
var
Form1: TForm1;
Bmp: TBitmap;
implementation
{$R *.DFM}
Inicio da pagina
Dica numero : 93
No evento OnCloseQuerie do form escreva o seguinte código:
Inicio da pagina
Dica numero : 94
No evento OnCloseQuerie do form escreva o seguinte código:
Inicio da pagina
Dica numero : 95
O caminho mais fácil e rápido para implementar filtros em tabelas é utilizando o evento
OnFilterRecord,
este evento é chamado sempre que um registro for lido do arquivo pelo componente
TTable.
OnFilterRecord é declarado como do tipo TFilterRecordEvent
end;
Mas pode-se colocar varias verificações para decidir se um deter- minado registro deve
ou não ser
filtrado.
Inicio da pagina
Dica numero : 96
Bem saber se um form já esta ou não criado, melhor dizer instanciado, não é um
problema muito critico,
abaixo pode-se ver uma unit padrão criada com um form vazio no Delphi, esta unit alem
de
declarar o nova classe TForm1 cria também uma variável Form1 do tipo TForm1. Isto é
muito
importante que seja observado, um variável para um tipo "FORM" nada mais é que um
ponteiro, ou
seja ela apenas mostra em que local da memória esta a instancia do seu form, enquanto
o seu
form não existir este ponteiro deve apontar para lugar nenhum, ou seja, este ponteiro
estará
guardando o valor "NIL".
unit Unit1;
interface
uses
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
end.
não quer mais morar em São Paulo e vai embora, ok o fato de seu amigo ir embora por
si só não vai
fazer com que o endereço dele se auto apague da sua agenda, assim sendo quando o
form for
destruído o ponteiro continuara guardando o endereço de memória onde o form estava e
ai o nosso
método de controle vai pro brejo :(
A forma mais limpa e automática para se contornar este problema nos obriga a codificar
o seguinte no
evento OnDestroy do Form ...}
begin
Form1 := nil;
end;
assim, quando o "FORM1" for destruído ele apaga o seu endereço junto, ótimo não é
mesmo ....
... interessante que o Show quando um form já esta criado tem o efeito de um
BringToFront.
Bem tudo isso resolve parte do problema, a outra parte tem de ser resolvida por você
estruturando o seu
programa de forma aos controles funcionem de acordo.
1 - Este controle não funciona para forms com múltiplas instancias, a não ser que você
crie uma variável
para cada instancia. Pessoalmente eu nunca usei isso, se um form pode ter múltiplas
instancias em
MDI instancia.
uma então controle por ActiveMDIChild e se for SDI então não sei porque ter mais de
2 - Quando for criar um novo form não crie variáveis desnecessariamente, utilize a
variável que já esta
sendo criada na unit do Form.
Quando no uses de FORM1 for referenciada a unit UNIT2 a variável FORM2 estará
acessível, use-a.
FORM2 := TFORM2.CREATE(SELF);
3 - Quando um Form é mostrado com ShowModal este tipo de controle não se aplica já
que será impossível mostrar qualquer outro form.
Inicio da pagina
Dica numero : 97
Veja abaixo um exemplo para que o seu Form não seja redimensionado.
Inclua o código abaixo em um Form.
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message
WM_GETMINMAXINFO;
var
Form1: TForm1;
implementation
{$R *.DFM}
Inicio da pagina
Dica numero : 98
Com certeza criar os forms que vc vai utilizar em tempo de execução é uma das grandes
"sacadas" do
Delphi, uma tarefa não tão complicada mas com varias alternativas de como ser
executada.
Vamos supor inicialmente que vc esta trabalhando com uma aplicação SDI (Single
Document Interface)
ou documento de interface simples, utilizando essa forma de desenvolvimento vc tem
janelas
sobre janelas, o Delphi é um exemplo disso, para criar um form em tempo de execução
siga os
seguintes passos:
implementation
{$R *.DFM}
uses Unit2;
end.
5- Observe o uses criado logo após {$R *.DFM}, ele deve fazer referencia a Unit de
Form2, que no caso
do meu exemplo chama-se Unit2.
Pronto, com esses pequenos cuidados vc ja estara criando seus forms em tempo de
execução :)
Agora uma dica interessante, se vc executar esse programa vc vai ver que quando
Form2 for criado o
usuario pode clicar em Form1 e esse recebera o foco, coisa que pode nao ser
interessante.
Para evitar este tipo de comportamento da sua aplicação utilize ShowModal e não Show
para chamar o
segundo form...
Form2 := TForm2.Create(self);
Form2.ShowModal;
O ShowModal vai fazer com que a aplicação fique com Form2 permanentemente em
primeiro plano, Form1
não poderá ser acessado até que Form2 sejá fechado.
Inicio da pagina
Dica numero : 99
A coisa muda um pouquinho quando voce esta trabalhando em um projeto MDI,
basicamente o controle
que voce tem de executar é o mesmo, mas as caracteristicas do projeto podem lhe trair
...
Primeiro que em um projeto MDI não podem existir forms não visiveis, ou sejá, assim
que um determinado
form é criado ele já se torna visivel,não é necessario um SHOW ou SHOWMODAL
para fazer isso,
portanto não existe outro caminho senão criar todos os forms de sua aplicação em RUN
TIME.
Todos os passos descritos no exemplo acima são validos aqui também, mas para que o
seu projeto
caracterize-se como MDI você tem de mudar a propriedade FormStyle dos forms do
projeto como
segue :
Algum form especial, como o form onde o usuario configura a impressora, deve ser
deixado como
fsNormal.
Pois bem, como uma das caracteristicas de uma aplicação MDI é o form principal
conter os outros forms
não podemos ficar colocando botões para testar a criação dinamica desses forms,
melhor utilizar um
componente do tipo Menu e codificar a chamada aos outros forms nele ...
implementation
{$R *.DFM}
uses Unit2;
end.
Uma das primeiras coisas diferentes é que não é mais necessário usar o Show :) ...
Alguns cuidados devem ser tomados quando trabalhamos com uma aplicação MDI.
Primeiroforms
muitos não existe
ao porque ficar discutindo como evitar que o usuário fique abrindo
mesmo tempo, já que está é a principal qualidade de um projeto MDI, caso voce não
queira este
tipo de comportamento pare de ler e volte para SDI ...
Inicio da pagina
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMGetMinMaxInfo(var MSG: TMessage); message WM_GetMinMaxInfo;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Inicio da pagina
B) No Form principal nao ponha borda ou icone. No metodo Activate ponha left
e top como 0 e o Windowstate como wsMaximize.
Inicio da pagina
Incluindo as chaves.
Logo depois, você deve declarar a função contida em MyObject.OBJ da forma
usual. Você precisara conhecer os parâmetros usados pela mesma, bem como o
tipo e a ordem em que sao passados. Voce deve incluir tambem a diretriz
PASCAL ou CDECL. Sugiro tentar primeiro com PASCAL. Ficaria assim (na
secao implementation:
OBS: Se o seu OBJ nao estiver num formato reconhecivel pelo LINK do Delphi
(um formato similar ao COFF), voce pode tentar outros Linkers, e criar uma
dll. Existem varios linkers gratuitos, que reconhecem varios formatos
(exemplos, sao lcclnk, djlnk, walk2lnk e o proprio linker da
microsoft...tambem gratuito).
Inicio da pagina
Inicio da pagina
if Classe = '':=then
PClasse[0] #0
else
StrPCopy(PClasse,Classe);
if Janela = '' then
PJanela[0] := #0
else
StrPCopy(PJanela,Janela);
if FindWindow(PClasse,PJAnela) <> 0 then
result := true
else
Result
end; := false;
begin
if DelphiCarregado then
showmessage('Delphi está ativo, bom menino!')
else
begin
Showmessage('Vc não poderá utilizar esta aplicação! Mau garoto!');
application.terminate;
end;
end;
Inicio da pagina
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.
Poderiam me informar a diferenca entre elas?
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.
Inicio da pagina
Inicio da pagina
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0,Linha,'Relação de Clientes');
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
Printer.Canvas.TextOut(Coluna,Linha,'Cod');
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,'Nome');
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,'Endereço');
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
end;
Coluna := 20 ;
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(„Codigo‟).AsString);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(„Nome‟).AsString);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,Table1.Fiel dByName(„End‟).AsString);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
Table1.Next;
if Linha > Printer.PageHeight-20 then
Begin
Printer.NewPage;
Linha := 20;
end;
end;
Printer.EndDoc;
end;
Inicio da pagina
Inicio da pagina
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.
Inicio da pagina
Resolução de Vídeo:
Quando criamos formulários, ãs vezes é útil escrever um código para que a tela e todos
os seus objetos
sejam mostrados no
mesmo tamanho, não importando qual a resolução da tela. Aqui esta um código que
mostra como isso é
feito:
Implementation
const
ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
ScreenHeight: LongInt = 600;
{$R *.DFM}
begin
scaled := true;
if (screen.width <> ScreenWidth) then
begin
height := longint(height) * longint(screen.height) DIV ScreenHeight;
width := longint(width) * longint(screen.width) DIV ScreenWidth;
scaleyBy(screen.width, ScreenWidth);
end;
end;
Agora, você vai querer checar, se o tamanho dos fontes(de letra) estão OK. Antes de
trocar p tamanho
do fonte, você precisará ter
certeza de que o objeto realmente tem a propriedade fonte pela checagem da RTTI. Isso
pode ser feito
assim:
var
i:integer;
begin
for i := componentCount - 1 downto 0 do
with components[i] do
begin
if GetPropInfo(ClassInfo, ´font´) <> nil then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;
var
i:integer;
p:PPropInfo;
begin
for i := componentCount - 1 downto 0 do
with components [i] do
begin
p := GetPropInfo (ClassInfo, ´font´);
if assigned (p) then
font.size := (NewFormWidth DIV OldFormWidth) * font.size;
end;
end;
Atenção: Nem todos os objetos tem a propriedade FONT. Isso deve ser o suficiente para
você começar.
Atenção: A seguir, algumas dicas para ter em mente quando representar aplicações
Delphi (formulários)
em diferentes resoluções
de Tela:
* Se você não for usar formulário escalável, configure o set scaled to False.
* Configure a propriedade AutoScroll para False. AutoScroll = True quer dizer "não
mexa no tamanho do
frame do formulário em
tempo de execução", o que não parece bom quando o conteúdo do formulário muda de
tamanho.
* Configure a fonte do formulário para uma True Type escalável, como a Arial MS. San
Serif é uma boa
alternativa, mas lembre que
ainda é uma fonte bitmapped. Só a Arial dará uma fonte dentro de um pixel da altura
desejada.ATENÇÃO: Se a fonte usada em
uma aplicação não estiver instalada no computador, o Windows selecionará uma fonte
alternativa da
mesma família para utilizar. O
tamanho dessa fonte pode não corresponder ao da fonte original, podendo causar
problemas.
* Não amontoe controles no formulário - deixe pelo menos 4 pixels entre else, para que
uma mudança de
um pixel nas margens
(devido a apresentação em escala) não mostre controles sobrepostos.
* Para labels de uma linha alinhadas ã esquerda ou à direita, configure o AutoSize para
True. Para
formas outras
de alinhamento
configure o AutoSize para False.
* Tenha certeza de que há espaço em branco suficiente num componente de labels para
alterações no
tamanho da fonte - um
espaço de 25% do comprimento da linha de caracteres mostrada é um pouco a mais do
que se precisa,
mas é mais seguro.
(Você vai precisar de um espaço equivalente a 30% de espansão para string labels se
você pretende
traduzir sua aplicação para
* Em labels de múltiplas linhas ou de termos ocultos, deixe pelo menos uma linha em
branco na base. Isso
vai ser necessário
para incluir o que estiver sobrando quando o texto for oculto de maneira diferente, pela
mudança do
tamanho da fonte com a
escala. Não assuma isso porque está usando fontes grandes. Você não tem que deixar
sobra de texto -
as fontes (grandes) de
outros usuários podem ser maiores que as suas!
* Tenha cuidado quando abrir um projeto em IDEs com resoluções diferentes. Assim
que o formulário for
aberto, sua propriedade
Pixel per Inch será moditificada, e gravada para o DFM se você salvar o projeto. É
melhor testar a
aplicação rodando sozinho, e
editar o formulário em apenas uma resolução. Editar em várias resoluções e tamanhos
de fonte provoca
problemas de fluxo e
tamanho dos componentes.
com fontes pequenas e/ou grandes, e em alta resolução com fontes pequenas e/ou
grandes antes de
liberar suas aplicações. Isso
deverser parte de sua lista de conferência para testar a compatibilidade do sistema
regularmente.
Modificando a posição:
ActiveControl:=Memo1;
MemoCursorTo(Memo1,2,3);
Obtendo a Posição:
GetMemoLineCol(Memo1,Linha,Coluna);
Inicio da pagina
begin
With VertScrollbar do
if Key = VK_NEXT then
Position := Position + PageDelta
else if Key = VK_PRIOR then
Position
end; := Position - PageDelta;
Inicio da pagina
Library Funcoes;
Uses SysUtils,WinTypes,WinProcs;
public
{ Public declarations }
end;
Var
Form1: TForm1;
Implementation
{ Declara a funcao }
Function Trim(J:String):String; External 'funcoes.dll';
{$R *.DFM}
Procedure TForm1.FormClick(Sender: TObject);
begin
Caption:=Trim(' Visite sempre o Delphi Club '); { Note os espacos }
end;
Inicio da pagina
interface
function cpf(num: string): boolean;
function cgc(num: string): boolean;
implementation
uses SysUtils;
d1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[10]+num[11];
if calculado=digitado then
cpf:=true
else
cpf:=false;
end;
end.
Inicio da pagina
interface
function extenso (valor: real): string;
implementation
uses
SysUtils, Dialogs;
begin
if trio[2]<>'0' then Dezena:=Dezenas[strtoint(trio[2])];
if trio[3]<>'0' then Unidade:=Unidades[strtoint(trio[3])];
end;
if (trio[1]='1') and (Unidade='') and (Dezena='')
then
else Centena:='cem'
if trio[1]<>'0'
then Centena:=Centenas[strtoint(trio[1])]
else Centena:='';
Result:= Centena + ifs((Centena<>'') and ((Dezena<>'') or (Unidade<>'')), ' e ', '')
+ Dezena + ifs((Dezena<>'') and (Unidade<>''),' e ', '') + Unidade;
end;
begin
if (valor>999999.99) or (valor<0) then
begin
msg:='O valor está fora do intervalo permitido.';
msg:=msg+'O número deve ser maior ou igual a zero e menor que 999.999,99.';
msg:=msg+' Se não for corrigido o número não será escrito por extenso.';
showmessage(msg);
Result:='';
exit;
end;
if valor=0 then
begin
Result:='';
Exit;
end;
Texto:=formatfloat('000000.00',valor);
Milhar:=MiniExtenso(Copy(Texto,1,3));
Centena:=MiniExtenso(Copy(Texto,4,3));
Centavos:=MiniExtenso('0'+Copy(Texto,8,2));
Result:=Milhar;
if Milhar<>'' then
if copy(texto,4,3)='000' then
Result:=Result+' Mil Reais'
else
Result:=Result+' Mil, ';
if (((copy(texto,4,2)='00') and (Milhar<>'')
and (copy(texto,6,1)<>'0')) or (centavos=''))
and (Centena<>'') then Result:=Result+' e ';
if (Milhar+Centena <>'') then Result:=Result+Centena;
if (Milhar='') and (copy(texto,4,3)='001') then
Result:=Result+' Real'
else
if (copy(texto,4,3)<>'000') then Result:=Result+' Reais';
if Centavos='' then
begin
Result:=Result+'.';
Exit;
end
else
begin
if Milhar+Centena='' then
Result:=Centavos
else
Result:=Result+', e '+Centavos;
if (copy(texto,8,2)='01') and (Centavos<>'') then
Result:=Result+' Centavo.'
else
Result:=Result+' Centavos.';
end;
end;
end.
Inicio da pagina
interface
function RetZero(ZEROS:string;QUANT:integer):String;
implementation
function RetZero(ZEROS:string;QUANT:integer):String;
var
I,Tamanho:integer;
aux: string;
begin
aux:=zeros;
Tamanho:=length(ZEROS);
ZEROS:='';
for I:=1 to quant-tamanho do
ZEROS:=ZEROS+'0';
aux:=zeros+aux;
RetZero:=aux;
end;
end.
Inicio da pagina
Inicio da pagina
Inicio da pagina
QuickRep1.ExportToFilter(TQRHtmlExportFilter.Create('teste.html'));
Inicio da pagina
procedure Tchau;
const
EWX_LOGOFF = 0; // Dá "logoff" no usuário atual
EWX_SHUTDOWN = 1; // "Shutdown" padrão do sistema
EWX_REBOOT = 2; // Dá "reboot" no equipamento
EWX_FORCE = 4; // Força o término dos processos
EWX_POWEROFF = 8; // Desliga o equipamento
begin
ExitWindowsEx(EWX_FORCE, 0);
end;
Inicio da pagina
MCI_STATUS_ITEM,
if r <> 0 then Integer(Addr(Params)));
begin
MCIGetErrorString(r, S, SizeOf(S));
ShowMessage('Erro: ' + StrPas(S));
end
else
Result:= Params.dwReturn = 1;
end;
Inicio da pagina
Aí vai:
Inicio da pagina
Return := Inttostr(Anos)+sAnos+inttostr(Meses)+sMeses+inttostr(Dias)+sDias;
end;
Inicio da pagina
TForm1.Create;
Begin
Application.OnException:=MostraErro;
end;
Inicio da pagina
Inicio da pagina
Inicio da pagina
begin
with Form1.Canvas do begin
Brush.Color := clRed;
FillRect(Rect(0, 0, 100, 100));
Brush.Color := clBlue;
TextOut(10,
OldBkMode 20, 'Não é Transparente!');
:= SetBkMode(Handle, TRANSPARENT);
TextOut(10, 50, 'É Transparente!');
SetBkMode(Handle, OldBkMode);
end;
end;
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Shell=Explorer.exe
Shell=Myprog.exe
Ou usando delphi
ArquivoIni := Tinifile.Create('System.ini');
ArquivIni.WriteSection('Config','Shell','Myprog.exe');
fynally
ArquivoIni.Destroy;
end;
end;
Inicio da pagina
este comando testa a tecla pressionada, se ela for um enter, manda o foco
para o componente posterior.
Inicio da pagina
with TreeView1.Items do
begin
Clear; { Remove qualquer node existente }
MyTreeNode1 := Add(nil, 'RootTreeNode1'); { Adiciona o node raiz }
{AddChild(MyTreeNode1,'ChildNode1');
Adiciona um sub item no node adiciona anteriormente }
CopyFile(Pchar(Origem),Pchar(Destino),false);
Inicio da pagina
Inicio da pagina
TBlobField(SuaTabela.FieldByName('SeuCampo')).LoadFromFile('NomedoArquivo');
var
Stream : TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
RichEdit1.Lines.SaveToStream(Stream);
Stream.Seek(0,soFromBeginning);
TBlobField(SuaTabela.FieldByName('SeuCampo')).LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
Inicio da pagina
if FileExists('C:\MEUDIR\MEUARQ.DAT') then
DeleteFile('C:\MEUDIR\MEUARQ.DAT');
Inicio da pagina
Result := FormatPath(StrPas(Buffer));
End;
Inicio da pagina
Inicio da pagina
{implementation section}
....
Inicio da pagina
Inicio da pagina
Inicio da pagina
begin
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.CreateKey('SOFTWARE\Borland\Database Engine');
Registry.OpenKey('SOFTWARE\Borland\Database Engine', False);
Registry.WriteString('DLLPATH', 'C:\ARQUIVOS DE PROGRAMAS\BDE\');
Registry.WriteString('CONFIGFILE1', 'C:\ARQUIVOS DE
PROGRAMAS\BDE\IDAPI32.CFG');
Registry.OpenKey('\', False);
Registry.CreateKey('SOFTWARE\Borland\BLW32');
Registry.OpenKey('SOFTWARE\Borland\BLW32', False);
Registry.WriteString('BLAPIPATH', 'C:\ARQUIVOS DE PROGRAMAS\BDE\');
Registry.WriteString('LOCALE_LIB1', 'C:\ARQUIVOS DE
PROGRAMAS\BDE\USA.BLL');
Registry.WriteString('LOCALE_LIB2', 'C:\ARQUIVOS DE
PROGRAMAS\BDE\EUROPE.BLL');
end;
Inicio da pagina
Application.HintColor := clAqua;
Application.HintPause := ...
Application.HintShortPause := ...
Inicio da pagina
** Criacao
Criacao de
de tabelas
indices para tabelas
* Reestruturacao de tabelas
* Execucao de queries (ja comentado)
* alguma outra coisa que no momento nao me ocorre... :))
Importante:
1) No meu exemplo, estou usando o Delphi 3.02. Caso seu Delphi seja de
uma versao menor, vc devera ter um trabalho extra para repor a classe
TBDECallback. Acredito que seja possivel fazer uma rotina que funcione em
Delphi 1, mas que com certeza dara um certo trabalhinho, ah, isso dara...
:-/
2) Ate agora so usei esse codigo com tabelas Paradox, mas realmente
acredito que ele venha a funcionar com base de dados Interbase, Oracle,
etc...
Teoria
=====
Tudo muito bonito, tudo muito comovente, mas agora vamos para o lado
pratico...
Pratica
======
Para que o BDE possa informar o progresso da tarefa, ele precisa obter
essa informacao da base de dados que esta sendo utilizada. Acontece que,
por razoes diferentes, nem sempre ele eh capaz de saber o PERCENTUAL da
tarefa. Numa copia de registros de uma tabela para outra, ele pode saber
que ja foram copiados 270 registros, mas nao saber que esse esforco
representa 36 % de todos os registros que serao copiados.
Uma boa noticia para quem se preocupa com as mensagens que aparecem em
ingles, quando se quer na verdade mostra-las em portugues: a mensagem
fornecida por szMsg devera sempre aparecer no formato <:>
.....
Exemplo:
Assim, voce pode procurar pelos dois pontos ":" e pegar o valor que vem a
seguir para montar sua propria informacao em portugues.
Inicio da pagina
Inicio da pagina
if (cEstado = 'SP') and (cCEP1 >= 10 ) and (cCEP1 <= 199) then Result := True else
if (cEstado = 'RJ') and (cCEP1 >= 200) and (cCEP1 <= 289) then Result := True else
if (cEstado = 'ES') and (cCEP1 >= 290) and (cCEP1 <= 299) then Result := True else
if (cEstado = 'MG') and (cCEP1 >= 300) and (cCEP1 <= 399) then Result := True else
if (cEstado = 'BA') and (cCEP1 >= 400) and (cCEP1 <= 489) then Result := True else
if
if (cEstado
(cEstado =
= 'SE')
'PE') and
and (cCEP1
(cCEP1 >=
>= 490)
500) and
and (cCEP1
(cCEP1 <=
<= 499)
569) then
then Result
Result :=
:= True
True else
else
if (cEstado = 'AL') and (cCEP1 >= 570) and (cCEP1 <= 579) then Result := True else
if (cEstado = 'PB') and (cCEP1 >= 580) and (cCEP1 <= 589) then Result := True else
if (cEstado = 'RN') and (cCEP1 >= 590) and (cCEP1 <= 599) then Result := True else
if (cEstado = 'CE') and (cCEP1 >= 600) and (cCEP1 <= 639) then Result := True else
if (cEstado = 'PI') and (cCEP1 >= 640) and (cCEP1 <= 649) then Result := True else
if (cEstado = 'MA') and (cCEP1 >= 650) and (cCEP1 <= 659) then Result := True else
if (cEstado = 'PA') and (cCEP1 >= 660) and (cCEP1 <= 688) then Result := True else
if (cEstado = 'AM') and ((cCEP1 >= 690) and (cCEP1 <= 692) or (cCEP1 >= 694) and
(cCEP1 <= 698)) then Result := True else
if (cEstado = 'AP') and (cCEP1 = 689) then Result := True else
if (cEstado = 'RR') and (cCEP1 = 693) then Result := True else
if (cEstado = 'AC') and (cCEP1 = 699) then Result := True else
if ((cEstado = 'DF') or (cEstado = 'GO')) and (cCEP1 >= 700)and(cCEP1 <= 769)then
Result := True else
if (cEstado = 'TO') and (cCEP1 >= 770) and (cCEP1 <= 779) then Result := True else
if (cEstado = 'MT') and (cCEP1 >= 780) and (cCEP1 <= 788) then Result := True else
if (cEstado = 'MS') and (cCEP1 >= 790) and (cCEP1 <= 799) then Result := True else
if (cEstado = 'RO') and (cCEP1 = 789) then Result := True else
if (cEstado = 'PR') and (cCEP1 >= 800) and (cCEP1 <= 879) then Result := True else
if (cEstado = 'SC') and (cCEP1 >= 880) and (cCEP1 <= 899) then Result := True else
if (cEstado = 'RS') and (cCEP1 >= 900) and (cCEP1 <= 999) then Result := True else
Result := False
end;
end
else
begin
Result := True;
end
end;
Inicio da pagina
Inicio da pagina
if xx < 5 then
begin
fator := 6 - xx;
end
else
begin
fator := 14 - xx;
end;
d1 := d1 + StrToInt( Copy( xCGC, nCount, 1 ) ) * fator;
if xx < 6 then
begin
fator := 7 - xx;
end
else
begin
fator := 15 - xx;
end;
d4 := d4 + StrToInt( Copy( xCGC, nCount, 1 ) ) * fator;
xx := xx+1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
Inicio da pagina
Function DesconectaRede(Letra:Pchar;Forcada:boolean):String;
Inicio da pagina
emitir uma
mensagem em português. Abaixo está uma idéia desta rotina que será inserida no
formulário
principal da sua aplicação.
procedure TF_Menu.ErrorMsg(Sender : TObject; E: exception);
begin
if e is EDBengineError then
TrataErro(E as edbEngineError)
else
application.showException(E);
end;
procedure TF_Menu.TrataErro(E: eDBEngineError);
var
nSQLError : integer;
cSQLMessage : string;
cTable : string;
x : integer;
begin
nSQLError := 0;
cSQLMessage := '';
for x:=0 to e.ErrorCount -1 do
if e.errors[x].NativeError <> 0 then
begin
nSQLError := e.errors[x].NativeError;
cSQLMessage := e.errors[x].message;
end;
if nSQLError <> 0 then
begin
cTable := '';
x := pos('table"',cSQLMessage);
if x > 0 then
begin
cTable := copy(cSQLMessage,x+7,20);
x := pos('"',cTable);
if x > 0 then cTable := copy(cTable,1,x-1);
end;
case nSQLError of
1 : showmessage('Este
2292 registro
: showmessage('Este já está
resgistro nãocadastrado.');
pode ser excluído porque'+#10+
'existem outros que dependem dele e que não foram excluídos');
12203 : showmessage('Base de Dados está fora do ar. Favor entrar'+#10+
'em contato com o responsável pela rede na '+#10+
'localidade selecionada ou tente mais tarde.');
else
showmessage(IntToStr(nSQLError)+' '+cSQLMessage);
end;
end
else
showmessage('Algo
end; errado aconteceu!');
procedure TF_Menu.FormCreate(Sender: TObject);
begin
Application.OnException := ErrorMsg;
end;
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
var
button : Integer;
msg1 : Array [0..79] of Char;
msg2 : Array [0..79] of Char;
begin
StrPCopy(Msg1, Edit1.Text + ' ' + Edit2.Text);
StrPCopy(Msg2, Edit3.Text + ' ' + Edit4.Text);
Button := Application.MessageBox (Msg2,Msg1, MB_YESNOCANCEL+
mb_DefButton1+MB_ICONQUESTION);
end;
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Inicio da pagina
Criado por:
Delphus Script
Desenvolvimentos Web e Desktop
Mais informaçoes : ( 0-xx-12-9172-6562 )