Dicas

Voltar Home Acima

 

Dicas previamente testadas para usar no Delphi.

  1. Como saber o login do usuário que está logado?
  2. Adicionando soma de Fields no QRExpression do QuickReport.
  3. Imprimindo o conteúdo de um TMemo ou um TListbox.
  4. Salvando o conteúdo do Peview de um QuickReport para um arquivo texto.
  5. Tornando invisível uma coluna de um DBGrid.
  6. Criando e apagando TFields em Run-Time.
  7. Alterando parcialmente o conteúdo da prop. SQL de uma Query.
  8. Fazendo o campo Lookup de um DBGrid abrir com um clique de mouse
  9. Função para criptografar uma String
  10. Função para saber se existe disquete no drive
  11. 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;

Ir para o Topo

Adicionando a soma de Fields no QRExpression do QuickReport ?

QRExpr1.Expression := Sum(Field1);
QRExpr1.Expression := Sum(Field2);
QRExpr1.Expression := Sum(Field1+Field2);
Ir para o Topo

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

Ir para Topo

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; 
  endend
Ir para o Topo

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;
Ir para o Topo

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;
Ir para o Topo

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;
Ir para o Topo

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;
Ir para o Topo

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;
Ir para o Topo

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;
Ir para o Topo

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)

Ir para o Topo

 

 

Todos os produtos mencionados são marcas registradas ou marcas comerciais de suas respectivas empresas.

Perguntas ou problemas a respeito deste website devem ser enviadas para
allsoft@bol.com.br

Copyright © 1999-2001 allSoft - Sistemas. Vitória/ES - Brasil. 
Todos os direitos reservados.