quinta-feira, 14 de novembro de 2013

Exibir Quantidade de Dias em uma Subtração de Datas em Delphi 7

Uma dica para os desenvolvedores, que assim como eu, também já tiveram essa dificuldade pela frente. Num módulo do sistema da minha empresa, necessitava exibir para um dono de concessionária quantos dias determinada Ordem de Serviço de um cliente estava aberta no sistema.

A solução para isto é a seguinte:


  • criar uma variável do tipo Extended:
 var  
  diasAtraso : Extended;  

  • alimentar esta variável com a subtração de datas que interessa ao negócio:
  diasAtraso := Date - QryPadraoDATA.AsDateTIME;  

  • finalmente exibe-se a quantidade de dias entre as 2 datas:
  ShowMessage(FloatToStr(Abs(diasAtraso)) + ' dias');


Conclusões

Notamos neste artigo a facilidade em calcular a quantidade de dias
entre 2 datas e exibir o resultado, utilizando a ferramente Delphi 7.
Forte abraço e até o próximo tutorial.

--

sexta-feira, 1 de fevereiro de 2013

Firebird: Comparando campos DateTime sem ignorar as Horas através de SQLTimeStamp no Delphi 7


Uma dica para os desenvolvedores, que assim como eu, também já tiveram essa grande dificuldade pela frente.

Eu possuo uma coluna do tipo Date no banco de dados e a aplicação alimenta-a com Data e Hora. O problema surge quando preciso num relatório filtrar os lançamentos num determinado período, e ao gerar no relatório vários lançamentos são ignorados, visto que a data deles tem horas diversas.


A solução para isso, utilizando componentes DBExpress, para comparar um intervalo entre duas datas foi a seguinte:

  • 2 componentes TDateTimePicker da paleta Win32 (DTPckInicial e DTPckFinal);
  • adicionar na propriedade Time do DTPckInicial: 00:00:01
  • adicionar na propriedade Time do DTPckFinal23:59:59
  • na bloco USES adicione SqltimSt;
  • utilizar as 3 linhas do código abaixo ao filtrar os lançamentos compreendidos nas datas selecionadas nos dois componentes TDateTimePicker:

Query.SQL.Add(' AND ( CAMPO_TIPO_DATA BETWEEN :DATA_INI AND :DATA_FIM )');
Query.ParamByName('DATA_INI').AsSQLTimeStamp := DateTimeToSQLTimeStamp(DTPckInicial.DateTime);
Query.ParamByName('DATA_FIM').AsSQLTimeStamp := DateTimeToSQLTimeStamp(DTPckFinal.DateTime);

Conclusões

Notamos neste artigo a facilidade em se manipular campos DateTime,
inclusive os utilizando como parâmetros sem ignorar as horas,
utilizando a ferramente Delphi 7. Forte abraço e até o próximo tutorial.


--

quinta-feira, 31 de maio de 2012

Alterando uma linha específica no componente Memo do Delphi 7


Veja neste tutorial como alterar uma linha específica do Memo no Delphi 7, facilitando para que não se adicione linhas extras no componente.


A simples solução está descrita abaixo:


 Memo1.Lines.Strings[INDEX] := Memo1.Lines.Strings[INDEX] + 'TEXTO ADICIONAL';  



Conclusões

Notamos neste tutorial a facilidade em se alterar uma
linha específica do componente Memo utilizando a
ferramente Delphi 7. Forte abraço e até o próximo
tutorial.


--



sábado, 14 de abril de 2012

InputBox com Password (Janela de mensagem) no Delphi 7

Veja neste tutorial como criar um InputBox com Password, com um Edit e máscara para senha.


Este tutorial visa auxiliar quem precisa criar um janela de mensagem

que esconda o que está sendo digitado (senha). Primeiramente crie
as seguintes funções na sua Unit:



 function InputBoxPass(const ACaption, APrompt, ADefault: string): string;  
 function InputSenha(const ACaption, APrompt: string; var Value: string): Boolean;  
 function GetAveCharSize(Canvas: TCanvas): TPoint;  


E as implemente com os seguintes códigos:

 function TForm1.GetAveCharSize(Canvas: TCanvas): TPoint;   
  var   
  I: Integer;   
  Buffer: array[0..51] of Char;   
  begin   
  for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));   
  for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));   
  GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));   
  Result.X := Result.X div 52;   
  end;
Em seguida:

 function TForm1.InputBoxPass(const ACaption, APrompt,    
  ADefault: string): string;    
  begin    
  Result := ADefault;    
  InputSenha(ACaption, APrompt, Result);    
  end;   
E por fim:

 function TForm1.InputSenha(const ACaption, APrompt: string;    
  var Value: string): Boolean;    
  var    
  Form: TForm;    
  Prompt: TLabel;    
  Edit: TEdit;    
  DialogUnits: TPoint;    
  ButtonTop, ButtonWidth, ButtonHeight: Integer;    
  begin    
  Result := False;    
  Form := TForm.Create(Application);    
  with Form do    
  try    
   Canvas.Font := Font;    
   DialogUnits := GetAveCharSize(Canvas);    
   BorderStyle := bsDialog;    
   Caption := ACaption;    
   ClientWidth := MulDiv(180, DialogUnits.X, 4);    
   ClientHeight := MulDiv(63, DialogUnits.Y, 8);    
   Position := poMainformcenter;    
   Prompt := TLabel.Create(Form);    
   with Prompt do    
   begin    
   Parent := Form;    
   AutoSize := True;    
   Left := MulDiv(8, DialogUnits.X, 4);    
   Top := MulDiv(8, DialogUnits.Y, 8);    
   Caption := APrompt;    
   end;    
   Edit := TEdit.Create(Form);    
   with Edit do    
   begin    
   Parent := Form;    
   Left := Prompt.Left;    
   Top := MulDiv(19, DialogUnits.Y, 8);    
   Width := MulDiv(164, DialogUnits.X, 4);    
   {} MaxLength := 20;    
   {} Passwordchar := '*';    
   {} Font.Color := clBlue;    
   Text := Value;    
   SelectAll;    
   end;    
   ButtonTop := MulDiv(41, DialogUnits.Y, 8);    
   ButtonWidth := MulDiv(50, DialogUnits.X, 4);    
   ButtonHeight := MulDiv(14, DialogUnits.Y, 8);    
   with TButton.Create(Form) do    
   begin    
   Parent := Form;    
   Caption := 'Ok';    
   ModalResult := mrOk;    
   Default := True;    
   SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight);    
   end;    
   with TButton.Create(Form) do    
   begin    
   Parent := Form;    
   Caption := 'Cancelar';    
   ModalResult := mrCancel;    
   Cancel := True;    
   SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,ButtonHeight);    
   end;    
   if ShowModal = mrOk then    
   begin    
   Value := Edit.Text;    
   Result := True;    
   end;    
  finally    
   Form.Free;    
  end;    
  end;   
Finalmente, adicione um Button e um Label no
formulário, e no evento onClick do botão,
digite:

 Label1.Caption := InputBoxPass('Login','Senha:','');  




Conclusões

Notamos neste artigo a facilidade em se criar um InputBox com
Password em detrimento de um ShowMessage comum
utilizando a ferramente Delphi 7. Forte abraço e até o próximo
tutorial.


--