Dicas
previamente testadas para usar no Delphi.
- Como
saber o login do usuário que está logado?
- Adicionando
soma de Fields no QRExpression do QuickReport.
- Imprimindo
o conteúdo de um TMemo ou um TListbox.
- Salvando
o conteúdo do Peview de um QuickReport para um arquivo texto.
- Tornando
invisível uma coluna de um DBGrid.
- Criando
e apagando TFields em Run-Time.
- Alterando
parcialmente o conteúdo da prop. SQL de uma Query.
- Fazendo
o campo Lookup de um DBGrid abrir com um clique de mouse
- Função
para criptografar uma String
- Função
para saber se existe disquete no drive
- DBGrid
com Multi Select

Como saber
o loggin do usuário que está logado?
Esta Função retorna o loggin do usuário que
está logado no Windows em uma rede NT. Você deve acrescentar as Units DBITyppes,
DB e DBIErrs no seu
Form.
function
TfPrincipal.NetUser: 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;
Adicionando
a soma de Fields no QRExpression do QuickReport ?
QRExpr1.Expression := Sum(Field1);
QRExpr1.Expression := Sum(Field2);
QRExpr1.Expression := Sum(Field1+Field2);
Imprimindo
o conteúdo de um TMemo ou um TListBox?
A procedure abaixo recebe um objeto do tipo
TStrings como paramêtro e imprime o seu conteúdo na impressora padrão.
Pelo fato de ela usar uma TStrings, a procedure irá trabalhar com
qualquer tipo de componente que contenha uma propriedade do tipo
TStrings, como um TDBMemo ou um TListBox.
// Adicione a Unit Printers na cláusula do seu Form
uses Printers;
procedure ImpStrings(Strings: TStrings);
var Prn: TextFile;
i: Word;
begin
AssignPrn(Prn);
try
Rewrite(Prn);
try
for i := 0 to Strings.Count -1 do
writeln(Prn, Strings.Strings[i]);
finally
CloseFile(Prn);
end;
except
on EInOutError do
MessageDlg('Erro na impressão do texto.' mtError, [mbOK], 0);
end;
end;
Para imprimir o conteúdo de
um TMemo ou um TListbox, use o seguinte código:
PrintStrings(Memo1.Lines);
ou
PrintStrings(Listbox1.Items);
Salvando o
conteúdo do Preview de um QuickReport p/ um arquivo texto?
Adicione a Unit QRExtra na claúsula uses do seu
Form, arraste o componente QRTextFilter (esta na página QReport da
paleta de componentes do Delphi) e coloque o seguinte código no botão
Salvar.
procedure TForm1.btnSalvar(Sender: TObject);
var
AExportFilter : TQRAsciiExportFilter;
begin
AExportFilter := TQRAsciiExportFilter.Create('c:\Report.txt');
try
FormReport.QuickRep1.ExportToFilter(AExportFilter);
finally
AExportFilter.Free;
end;
end;
Tornando
invisível uma coluna de um DBGrid?
Você pode esconder uma coluna de um DBGrid
usando o código abaixo. Onde "x" é o índice da coluna, mas
lembre-se que este indíce começa em 0 para a primeira coluna, 1 para a
segunda e assim por diante.
procedure TForm1.Button1Click(Sender: TObject);
begin
dbgrid1.Columns.Items[x].Field.Visible := false;
end;
Criando e
apagando TFields em Run-Time
procedure TForm1.btnCriaFieldClick(Sender: TObject);
var T: TStringField;
begin
if qryCliente.Active then qryCliente.Close;
T := TStringField.Create(Self);
T.fieldName := 'cli_Nome';
T.FieldKind := fkData;
T.DisplayLabel := 'Nome do Cliente';
T.Visible := True;
T.Name := qryCliente.Name + T.FieldName;
T.Index := qryCliente.FieldCount;
T.DataSet := qryCliente;
qryCliente.FieldDefs.UpDate;
qryCliente.Open;
end;
procedure TForm1.btnApagaFieldClick(Sender: TObject);
var TC: TComponent;
begin
TC := FindComponent('qryClientecli_Nome');
if not (TC = nil) then
begin
qryCliente.Close;
TC.Free;
qryCliente.Open;
end;
end;
Alterando
parcialmente o conteúdo da prop. SQL de uma Query.
Vamos supor que você tenha uma instrução SQL
em uma Query como a seguinte:
SELECT idCliente, cli_Nome, cli_DataNasc, cli_Sexo
FROM Cliente
WHERE ( idCliente < 1000 )
AND ( cli_Sexo = 'M' ) (*)
ORDER BY cli_Nome
Para alterar somente a quarta(*) linha do SQL
você pode fazer assim:
with qryCliente do
begin
if Active then Close;
SQL[3] := 'AND ( cli_UF = 'ES') OR ( cli_UF = 'RJ' )'; // ou SQL[3] := ' ';
Open;
end;
Fazendo o
campo Lookup de um DBGrid abrir com um clique de mouse
Para fazer com que um campo Lookup de um DBGrid
abra a lista de seleção com um clique de mouse em vez dos três ou
quatro cliques habituais, basta colocar o seguinte código no evento
OnCellClick do DBGrid, este código irá simular o pressionamento das
teclas F2 seguido das teclas Alt + "Seta para
baixo". Usei o comando if .. then para informar
em qual coluna se encontra o Lookup (neste caso a 2a. coluna do DBGrid,
lembre-se que a contagem começa do zero), se você não fizer isso
quando o usário clicar na coluna onde não tenha o Lookup, o DBGrid
interpretará a combinação de teclas mensionada acima, e por isso não
posicionará o cursor na linha correta.
procedure TForm1.DBGrid1CellClick(Sender:TObject);
begin
if DBGrid1.SelectedIndex = 1 then
begin
keybd_event(VK_F2,0,0,0);
keybd_event(VK_F2,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,0,0);
keybd_event(VK_DOWN,0,0,0);
keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
end;
end;
Função
para criptografar uma String
A função Criptografia pode ser usada para
criptografar a senha acesso ao sistema. Ela é usada nos dois sentidos,
para criptografar e descriptografar, desde que seja usada a mesma chave
nas duas operações. "mStr" é a String que vai ser
criptografada e "mChave" é a String que sera usada como base
para fazer a criptografia.
function Criptografia(mStr, mChave: string): string;
var
i, TamanhoString, pos, PosLetra, TamanhoChave: Integer;
begin
Result := mStr;
TamanhoString := Length(mStr);
TamanhoChave := Length(mChave);
for i := 1 to TamanhoString do
begin
pos := (i mod TamanhoChave);
if pos = 0 then
pos := TamanhoChave;
posLetra := ord(Result[i]) xor ord(mChave[pos]);
if posLetra = 0 then
posLetra := ord(Result[i]);
Result[i] := chr(posLetra);
end;
end;
Função
para saber se existe diquete no drive
A função DiskInDrive retorna True se existe um
disquete no drive "a". É ideal para ser usada antes de
executar um comando de backup para um disquete.
function DiskInDrive(const Drive: char): Boolean;
var
DrvNum: Byte;
EMode: Word;
begin
Result := False;
DrvNum := ord(Drive);
if DrvNum >= ord('a') then
dec(DrvNum, $20);
EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if DiskSize(DrvNum-$40) <> -1 then
Result := True
else
MessageBeep(0);
finally
SetErrorMode(EMode);
end;
end;
DBGrid com
Multi Select
Fiz um projeto para mostrar como funciona a
propriedade Multi Select de um DBGrid. O projeto usa uma tabela do
banco de dados DBDemos que vem com o Delphi. Nele existem um DBGrid e um
ListBox. O usuário pode selecionar várias linhas do DBGrid, e incluí-las
no Listbox de uma só vez.
Fontes (4 kb)
|