Zero a esquerda numa mascara tipo 015:40?

Delphi

12/12/2008

Pessoal como faço para colocar zero a esquerda num edit que eu digitar ass 15:45 ficar 015:45

Grato Adriano.


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Micheus

Micheus

12/12/2008

Voce não poderia utilizar o evento [i:8da7be5c85]OnExit[/i:8da7be5c85] para fazer esta formatação?


GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

Voce não poderia utilizar o evento [i:2563fbd3c0]OnExit[/i:2563fbd3c0] para fazer esta formatação?
Ola amigo é isso mesmo que estou tentando fazer, mais não consegui formatar ao sair do exit do edit.

Grato
Adriano


GOSTEI 0
Micheus

Micheus

12/12/2008

Adriano, não testei mas acho que é uma opção que funciona
procedure TForm1.Edit1Exit(Sender :TObject);
var
  Str :string;
  IdxPos :Integer;
begin
  Str := TEdit(Sender).Text;
  IdxPos := Pos(´:´, Str);
  if IdxPos > 0 then
  begin
    Str := Copy(Str, 1, IdxPos -1);
    if Length(Str) < 3 then
      Str := (Copy(´000´, 1, 3 -Length(Str)) +Str);
    TEdit(Sender).Text := Str +Copy(TEdit(Sender).Text, IdxPos, Length(TEdit(Sender).Text));
  end;
end;



GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

Adriano, não testei mas acho que é uma opção que funciona
procedure TForm1.Edit1Exit(Sender :TObject);
var
  Str :string;
  IdxPos :Integer;
begin
  Str := TEdit(Sender).Text;
  IdxPos := Pos(´:´, Str);
  if IdxPos > 0 then
  begin
    Str := Copy(Str, 1, IdxPos -1);
    if Length(Str) < 3 then
      Str := (Copy(´000´, 1, 3 -Length(Str)) +Str);
    TEdit(Sender).Text := Str +Copy(TEdit(Sender).Text, IdxPos, Length(TEdit(Sender).Text));
  end;
end;
É isso mesmo que eu precisava Micheus. Muito obrigado amigo.

Valeu pela ajuda.


GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

Micheus, aproveitando o embalo amigo, vc saberia uma forma de melhorar esta função que eu fiz aqui, para ir marcarando o edit cfe o usuario for digitando?

function FormatarHoras(VHora:String; Quant:Integer):String;
begin
  case Length(VHora) of
    0:result:=´´;
    1:result:=´0:0´+VHora;
    2:result:=´0:´+VHora;
    3:result:=FormatMaskText(´0:00;0´, VHora);
    4:result:=FormatMaskText(´00:00;0´, VHora);
    5:result:=FormatMaskText(´000:00;0´, VHora);
  end;
end;


Estou chamando assim

procedure TfrmCadVar.Edit5Change(Sender: TObject);
begin
  v2:=v1;
  Edit5.text := FormatarHoras(v2, Length(v2));
end;


Assim ai esta muito ruim, alem do que se estourar o limite de caracter no edit não estou mais conseguindo digitar no edit.

Queria algo que o ponteiro sempre fique no final do edit para ir digitando e ir incluindo tipo caixa eletronico de banco.

Grato amigo.


GOSTEI 0
Micheus

Micheus

12/12/2008

[b:04ef3d07ad]Adriano[/b:04ef3d07ad], não sei se estará muito melhor, mas experimente o resultado deste código. Ele ainda faz uso da sua função de formatação ([i:04ef3d07ad]FormatarHoras[/i:04ef3d07ad]) mas não usa as variáveis que vc usou - trabalha apenas com o edit.

O uso evento [i:04ef3d07ad]OnKeyPress[/i:04ef3d07ad] evita que outra tecla que não seja a numérica possa ser utilizada, bem como permite usar o comando undo, não previsto no método deste componente.

Quando vc modificar o conteúdo de um Edit no seu próprio evento [i:04ef3d07ad]OnChange[/i:04ef3d07ad], lembre-se de que deve desativar o evento atribuindo [i:04ef3d07ad]nil[/i:04ef3d07ad] a ele e depois de modificado o conteúdo, habilitar novamente o evento:
procedure TForm1.Edit3Change(Sender: TObject);
var
  StrHora :string;
  Idx :Integer;
begin
  Edit3.OnChange := nil;
  StrHora := ´´;
  for Idx := 1 to Length(Edit3.Text) do
    if Edit3.Text[Idx] in [´0´..´9´] then
      StrHora := StrHora +Edit3.Text[Idx];
  if StrHora <> ´´ then
    StrHora := IntToStr(StrToInt(StrHora));

  Edit3.text := FormatarHoras(StrHora, Length(StrHora));
  Edit3.SelStart := Length(Edit3.text);
  Edit3.OnChange := Edit3Change;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [´0´..´9´, 8, 27]) then
    Key := 0
  else if Key = 27 then
  begin
    Edit3.Perform(WM_UNDO, 0, 0);
    Key := 0;  // evita o beep
  end;
end;

Abraços


GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

Olá [b:268ba22571]Micheus[/b:268ba22571], melhorou muito amigo, mais tem um probleminha na formatação do zero que não esta fazendo efeito no onexit do edit. Sabe me dizer o porque?
procedure TfrmCadVar.Edit5Exit(Sender: TObject);
var
  Str :string;
  IdxPos :Integer;
begin
  Str := TEdit(Sender).Text;
  IdxPos := Pos(´:´, Str);
  if IdxPos > 0 then
  begin
    Str := Copy(Str, 1, IdxPos -1);
    if Length(Str) < 3 then
      Str := (Copy(´000´, 1, 3 -Length(Str)) +Str);
    TEdit(Sender).Text := Str +Copy(TEdit(Sender).Text, IdxPos, Length(TEdit(Sender).Text));
  end;
  btGravar.Click;
end;


Preciso que transforme em zero antes como ja havia dito, e esta funcionando num edit normal que não esta recebendo a função de formatação, por caousa desta outra função aqui

function HoraToMin(Hora: String): Integer;
begin
  Result := (StrToInt(Copy(Hora,1,3))*60) + StrToInt(Copy(Hora,5,2));
end;


Esta outra função ai, serve para depois na hora de gravar no banco transformar horas em minutos.

Ou seja o usuario vai digitar em horas, mais vai ser gravado em minutos estas horas que ele digitou.

Muito obrigado amigo.


GOSTEI 0
Micheus

Micheus

12/12/2008

[b:9b5db577bf]Adriano[/b:9b5db577bf], se quiser tornar seu edit alinhado à direita, o único modo é criando um novo componente para isto. Juntando tudo, vc pode ter um componente para entrada de hora da direita para a esquerda.
Se interessar, veja este [url=http://scriptbrasil.com.br/forum/index2.php?s=&showtopic=99498&view=findpost&p=419780]post[/url] (re, forum ScriptBrasil)

Abraços


GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

Aunit toda esta assim, é logico que nem tudo ai faz parte deste edit, mais quis postar tudo pra ver se vc compeende melhor a unit. Só falta fazer certo para gravar no banco sem gerar erro.
unit UCadVar;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, JvBaseEdits, Mask, JvExMask, JvToolEdit,
  JvDBControls, jpeg, ExtCtrls, ComCtrls, Buttons, ToolWin, JvExControls,
  JvNavigationPane, DB, MaskUtils;

type
  TfrmCadVar = class(TForm)
    JvNavPanelHeader2: TJvNavPanelHeader;
    lblCaption: TLabel;
    StatusBar1: TStatusBar;
    ToolBar1: TToolBar;
    BtNovo: TSpeedButton;
    btGravar: TSpeedButton;
    btCancelar: TSpeedButton;
    BtAlterar: TSpeedButton;
    btExclui: TSpeedButton;
    BtPesquisa: TSpeedButton;
    BtBloqueia: TSpeedButton;
    ToolButton1: TToolButton;
    SpeedButton8: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton4: TSpeedButton;
    btFechar: TSpeedButton;
    ToolButton2: TToolButton;
    Panel1: TPanel;
    Image2: TImage;
    GroupBox7: TGroupBox;
    Label8: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Edit3: TEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Edit7: TEdit;
    RadioButton3: TRadioButton;
    MaskEdit1: TMaskEdit;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    CheckBox1: TCheckBox;
    Splitter1: TSplitter;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Label5: TLabel;
    JvDBDateEdit1: TJvDBDateEdit;
    JvDBDateEdit2: TJvDBDateEdit;
    GroupBox4: TGroupBox;
    ComboBox2: TComboBox;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    lblFunc: TLabel;
    Label4: TLabel;
    SpeedButton1: TSpeedButton;
    Edit1: TEdit;
    Edit6: TEdit;
    JvCalcEdit3: TJvCalcEdit;
    GroupBox5: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    SpeedButton2: TSpeedButton;
    Label6: TLabel;
    Label7: TLabel;
    Label9: TLabel;
    Edit2: TEdit;
    ComboBox1: TComboBox;
    Edit4: TEdit;
    GroupBox6: TGroupBox;
    DBGrid1: TDBGrid;
    Splitter2: TSplitter;
    Splitter3: TSplitter;
    dsMovimento: TDataSource;
    MaskEdit2: TMaskEdit;
    Edit5: TEdit;
    CheckBox2: TCheckBox;
    dsListEmpresas: TDataSource;
    procedure Edit5Exit(Sender: TObject);
    procedure btGravarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure MaskEdit2Exit(Sender: TObject);
    procedure Edit5Click(Sender: TObject);
    procedure Edit5KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5Change(Sender: TObject);
    procedure MaskEdit2Click(Sender: TObject);
    procedure MaskEdit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2Exit(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure ComboBox2Exit(Sender: TObject);
    procedure BtNovoClick(Sender: TObject);
    procedure btCancelarClick(Sender: TObject);
    procedure dsMovimentoStateChange(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure BtPesquisaClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure GravaEvento;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmCadVar: TfrmCadVar;
  VarBox, vIDEmpresaLocal : string;
  v1, v2:String; //PRIMEIRO DECLARE ESSAS DUASVARIAVEIS GLOBAIS

implementation

uses uDM, uBuscaFunc, uBuscaEventos, IBQuery, uPrincipal, uListEmpresas;

{$R *.dfm}
function HoraToMin(Hora: String): Integer;
begin
  Result := (StrToInt(Copy(Hora,1,3))*60) + StrToInt(Copy(Hora,5,2));
end;

function FormatarHoras(VHora:String; Quant:Integer):String;
begin
  case Length(VHora) of
    0:result:=´´;
    1:result:=´0:0´+VHora;
    2:result:=´0:´+VHora;
    3:result:=FormatMaskText(´0:00;0´, VHora);
    4:result:=FormatMaskText(´00:00;0´, VHora);
    5:result:=FormatMaskText(´000:00;0´, VHora);
  end;
end;   

procedure TfrmCadVar.btCancelarClick(Sender: TObject);
begin
  dsMovimento.DataSet.Cancel;
  if dm.Transaction.Active = False then
     dm.Transaction.Active := True;
     dm.Transaction.CommitRetaining;
     GroupBox5.Enabled := True;
     GroupBox7.Enabled := True;
end;

procedure TfrmCadVar.btGravarClick(Sender: TObject);
begin
  GravaEvento;
end;

procedure TfrmCadVar.BtNovoClick(Sender: TObject);
begin
  {:Novo}
   if not dsMovimento.DataSet.Active then
      dsMovimento.DataSet.Open;
      dsMovimento.DataSet.Append;
end;

procedure TfrmCadVar.BtPesquisaClick(Sender: TObject);
begin
  if GroupBox7.Visible = True then
   GroupBox7.Visible := False
  else
   GroupBox7.Visible := True;
end;

procedure TfrmCadVar.ComboBox2Exit(Sender: TObject);
begin
  if ComboBox2.ItemIndex = 0 then
     VarBox := ´Folha´
  else if ComboBox2.ItemIndex = 1 then
     VarBox := ´Ferias´
  else if ComboBox2.ItemIndex = 2 then
     VarBox := ´Rescisao´
  else if ComboBox2.ItemIndex = 3 then
     VarBox := ´Folha Complementar´
  else if ComboBox2.ItemIndex = 4 then
     VarBox := ´Adiantamentos´
  else if ComboBox2.ItemIndex = 5 then
     VarBox := ´1ª Parcela Dec. Terceiro´
  else if ComboBox2.ItemIndex = 6 then
     VarBox := ´2ª Parcela Dec. Terceiro´;
end;

procedure TfrmCadVar.dsMovimentoStateChange(Sender: TObject);
var
  strStatus : String;
begin
  //inherited;
  {:Trata os botões no form Herdeiro}
  BtNovo.Enabled     := dsMovimento.State in [dsBrowse];
  btExclui.Enabled   := dsMovimento.State in [dsBrowse];
  btAlterar.Enabled  := dsMovimento.State in [dsBrowse];
  btGravar.Enabled   := dsMovimento.State in [dsInsert,dsEdit];
  btCancelar.Enabled := dsMovimento.State in [dsInsert,dsEdit];
  btFechar.Enabled   := dsMovimento.State in [dsBrowse];
  //btImprime.Enabled  := DsPadrao.State in [dsInsert,dsEdit];
  {:verifica o estado do CDS, ou seja em modo de insert, edit ou browser}
  case dsMovimento.DataSet.State of
    dsBrowse   : strStatus := ´Formulário em modo de navegação.´;
    dsEdit     : strStatus := ´Formulário em modo de edição.´;
    dsInsert   : strStatus := ´Formulário em modo de inserção.´;
    dsInactive : strStatus := ´Formulário em modo inativo´;
  else
    strStatus  := ´Formulário em outro modo´;
  end;
    StatusBar1.Panels[2].Text := strStatus;
end;

procedure TfrmCadVar.Edit1Exit(Sender: TObject);
var
  vMatricula, CNPJEmp : string;
  Numero: Integer;
begin
  CNPJEmp := dm.ibPermissoesUser.FieldByName(´nrcgc´).asString;
  Numero := StrToInt(Edit1.Text);
  vMatricula := Format(´¬5.5d´,[Numero]); // resulta ´00123´;
  with dm.ibqryFunc do
  begin
    Close;
    Sql.Clear;
    SQL.Text := ´ select  a.*, b.nrcgc, b.nmempresa             ´+
                ´ from funcionarios a, empresa b                ´+
                ´ where (                                       ´+
                ´   substring(b.nrcgc from 1 for 2)||           ´+
                ´   substring(b.nrcgc from 4 for 3)||           ´+
                ´   substring(b.nrcgc from 8 for 3)||           ´+
                ´   substring(b.nrcgc from 12 for 4)||          ´+
                ´   substring(b.nrcgc from 17 for 2) ) = a.cnpj ´+
                ´ and cod_func = :busca                         ´+
                ´ and b.nrcgc  = :bcgc                          ´+
                ´ order by b.cdempresa, a.cod_func              ´;
    ParamByName(´busca´).AsString := vMatricula;
    ParamByName(´bcgc´).AsString := CNPJEmp;
    Open;
    if not IsEmpty then
    begin
      Edit1.Text := Format(´¬5.5d´,[Numero]); // resulta ´00123´;
      lblFunc.Caption := dm.ibqryFuncNMFUNC.AsString;
    end else
    begin
      Edit1.Text := Format(´¬5.5d´,[Numero]); // resulta ´00123´;
      MessageDlg(´ID nº ´+vMatricula+´ não localizado´, mtInformation, [mbOk],0);
      Exit;
    end;
  end;
end;

procedure TfrmCadVar.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not(Key in [´0´..´9´,8]) then
     Key:=0;
end;

procedure TfrmCadVar.Edit2Exit(Sender: TObject);
var
  vMatricula : string;
  Numero: Integer;
begin
  Numero := StrToInt(Edit2.Text);
  vMatricula := Format(´¬3.3d´,[Numero]); // resulta ´012´;
  with dm.ibPermissoesEventosUser do
  begin
    Close;
    SelectSQL.Text := ´ select  distinct(a.cdchamada),  a.nmevento, a.stnat ´+
                      ´ from tbEventos a, permissoesEventosuser b  ´+
                      ´ where ´+
                      ´ a.cdchamada = b.idevento and  ´+
                      ´ b.idusuario = :pusuario  and  ´+
                      ´ b.marcarbox = ´´T´´ and       ´+
                      ´ a.cdchamada = :busca          ´+
                      ´ order by a.cdchamada          ´;
    ParamByName(´pusuario´).AsInteger := StrToInt(frmPrincipal.StatusBar1.Panels[1].Text);
    ParamByName(´busca´).AsString := vMatricula;
    Open;
    if not IsEmpty then
    begin
      Edit2.Text := Format(´¬3.3d´,[Numero]); // resulta ´012´;
      label9.Caption := dm.ibPermissoesEventosUserNMEVENTO.AsString;
      if dm.ibPermissoesEventosUser.FieldByName(´STNAT´).AsString = ´V´ then
      begin
         MaskEdit2.SetFocus;
         Edit5.Visible := False;
      end
      else
      begin
         Edit5.Visible := True;
         Edit5.Left := 104;
         Edit5.SetFocus;
      end;
    end else
    begin
      Edit2.Text := Format(´¬3.3d´,[Numero]); // resulta ´012´;
      MessageDlg(´Evento nº ´+vMatricula+´ não localizado´, mtInformation, [mbOk],0);
      Exit;
    end;
  end;
end;

procedure TfrmCadVar.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  if not(Key in [´0´..´9´,8]) then
     Key:=0;
end;

procedure TfrmCadVar.Edit5Change(Sender: TObject);
var
  StrHora :string;
  Idx :Integer;
begin
  Edit5.OnChange := nil;
  StrHora := ´´;
  for Idx := 1 to Length(Edit5.Text) do
    if Edit5.Text[Idx] in [´0´..´9´] then
      StrHora := StrHora +Edit5.Text[Idx];
  if StrHora <> ´´ then
    StrHora := IntToStr(StrToInt(StrHora));

  Edit5.text := FormatarHoras(StrHora, Length(StrHora));
  Edit5.SelStart := Length(Edit5.text);
  Edit5.OnChange := Edit5Change;

{begin
  if CheckBox2.Checked = False then
  begin
     v2 := v1;
     //Keybd_Event(VK_End, 0, 0, 0);
     Edit5.text := FormatarHoras(v2, Length(v2));
  end;}
end;

procedure TfrmCadVar.Edit5Click(Sender: TObject);
begin
   Edit5.SelStart := Length(Edit5.Text);
end;

procedure TfrmCadVar.Edit5Exit(Sender: TObject);
var
  Str :string;
  IdxPos :Integer;
begin
  Str := TEdit(Sender).Text;
  IdxPos := Pos(´:´, Str);
  if IdxPos > 0 then
  begin
    Str := Copy(Str, 1, IdxPos -1);
    if Length(Str) < 3 then
      Str := (Copy(´000´, 1, 3 -Length(Str)) +Str);
    TEdit(Sender).Text := Str +Copy(TEdit(Sender).Text, IdxPos, Length(TEdit(Sender).Text));
  end;
  btGravar.Click;
end;

procedure TfrmCadVar.Edit5KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_DELETE then
  begin
    Edit5.Clear; //delete apaga o edit para refazer
    v1 := ´´;
  end;
end;

procedure TfrmCadVar.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  {v1:= v1 + key;}
  if not (Key in [´0´..´9´, 8, 27]) then
      Key := 0
    else if Key = 27 then
    begin
      Edit3.Perform(WM_UNDO, 0, 0);
      Key := 0;  // evita o beep
    end;
end;

procedure TfrmCadVar.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  frmCadVar := nil;
  Action := caFree;
end;

procedure TfrmCadVar.FormShow(Sender: TObject);
begin
  {variavel local recebendo valor da variavel global do ID da empresa}
  vIDEmpresaLocal := dsListEmpresas.DataSet.FieldByName(´cdempresa´).AsString;
end;

procedure TfrmCadVar.GravaEvento;
begin
  {:Este dspadra.dataset.isempty serve para caso não esteja em modo de insert ou edit,
  mostrar um exception pq a tabela não esta aberta para ser excluída}
  {if dsPadrao.DataSet.IsEmpty then
  begin
    raise Exception.Create(´Não tem nenhum Associado selecionado para ser excluído, verifique!´);
    Exit;
  end
  else
   if MessageDlg(´Deseja gravar o registro,´+#13+´do Associado - ´+dsPadrao.DataSet.FieldByName(´associado´).AsString+´?´,mtInformation,
      [mbYes,mbNo],0) = mrYes then
   begin}
  if dsMovimento.DataSet.State in [dsEdit, dsInsert] then
  try //começo do trecho try/except
    dsMovimento.DataSet.FieldByName(´codevento´).AsString := Edit2.Text;
    dsMovimento.DataSet.FieldByName(´nmevento´).AsString := Label9.Caption;
    if MaskEdit2.Text <> ´´ then
    begin
       dsMovimento.DataSet.FieldByName(´valor_evento´).AsString := MaskEdit2.Text;
    end;
    if Edit5.Text <> ´´ then
    begin
      //Panel1.Caption := IntToStr (HoraToMin(Maskedit1.Text));
      dsMovimento.DataSet.FieldByName(´valor_evento´).AsString := IntToStr (HoraToMin(Edit5.Text));
    end;
    dsMovimento.DataSet.FieldByName(´cod_empresa´).AsString := vIDEmpresaLocal;
    dsMovimento.DataSet.FieldByName(´codfunc´).AsString := Edit1.Text;
    dsMovimento.DataSet.FieldByName(´nmfunc´).AsString := lblFunc.Caption;
    dsMovimento.DataSet.Post;
    if dm.Transaction.Active = False then
       dm.Transaction.Active := True;
    dm.Transaction.CommitRetaining;
    dsMovimento.DataSet.DisableControls;
    dsMovimento.DataSet.Close;
    dsMovimento.DataSet.Open;
    dsMovimento.DataSet.EnableControls;
    MessageDlg(´Dados gravados com sucesso´, mtInformation, [mbOk],0);
    GroupBox5.Enabled := True;
    GroupBox7.Enabled := True;
  except
     on E:Exception do
     begin
       if dm.Transaction.Active = False then
          dm.Transaction.Active := True;
       dm.Transaction.Rollback;
       dsMovimento.DataSet.DisableControls;
       dsMovimento.DataSet.Close;
       dsMovimento.DataSet.Open;
       dsMovimento.DataSet.EnableControls;
       MessageDlg(´Ocorreu um erro neste processo. ´ +#1313 +´Erro gerado: ´+13+
       E.Message + 1313 + ´Todo o processo foi abortado!´, mtError, [mbOk],0);
       Abort;
     end;
  end; //Final try/except
end;

procedure TfrmCadVar.MaskEdit2Click(Sender: TObject);
begin
  // retorno o cursor para o final do texto, caso tenha sido utilizado
   // o mouse para mover o cursor dentro do Edit
   TEdit(Sender).SelStart := Length(TEdit(Sender).Text); 
end;

procedure TfrmCadVar.MaskEdit2Exit(Sender: TObject);
begin
  if MaskEdit2.Text = ´´ then
      StringReplace(MaskEdit2.text,´.´, ´´, [rfReplaceAll]);
      StringReplace(MaskEdit2.text, ´,´, DecimalSeparator, [rfReplaceAll]);
   try
      MaskEdit2.Text:= FormatFloat(´,0.00´,StrToFloat(MaskEdit2.Text));
      btGravar.Click;
   except
      MaskEdit2.SetFocus;
      ShowMessage(´Deve ser informado um valor´);
   end;
end;

procedure TfrmCadVar.MaskEdit2KeyPress(Sender: TObject; var Key: Char);
var
   Texto, Texto2: string;
   i: byte;
begin
   if CheckBox2.Checked = False then
   begin
     if (Key in [´0´..´9´,chr(vk_back)]) then
     begin
        // limito a 23 caracteres senão haverá um erro na função StrToInt64()
        if (key in [´0´..´9´]) and (Length(Trim(TEdit(Sender).Text))>23) then
           key := #0;

        // pego somente os caracteres de 0 a 9, ignorando a pontuação
        Texto2 := ´0´;
        Texto := Trim(TEdit(Sender).Text)+Key;
        for i := 1 to Length(Texto) do
           if Texto[i] in [´0´..´9´] then
              Texto2 := Texto2 + Texto[i];

        // se foi pressionado BACKSPACE (única tecla válida, fora os números)
        // apago o último caractere da string
        if key = chr(vk_back) then
           Delete(Texto2,Length(Texto2),1);

        // formato o texto que depois será colocado no Edit
        Texto2 := FormatFloat(´,0.00´,StrToInt64(Texto2)/100);

        // preencho os espaços à esquerda, de modo a deixar o texto
        // alinhado à direita (gambiarra)
        repeat
           Texto2 := ´ ´+Texto2
        until Canvas.TextWidth(Texto2) >= TEdit(Sender).Width;

        // atribuo a string à propriedade Text do Edit
        TEdit(Sender).Text := Texto2;

        // posiciono o cursor no fim do texto
        TEdit(Sender).SelStart := Length(Texto2);
     end;
     Key := #0;     
   end;
end;

procedure TfrmCadVar.SpeedButton1Click(Sender: TObject);
begin
  Application.CreateForm(TfrmBuscaFunc, frmBuscaFunc);
  try
    if frmBuscaFunc.ShowModal = mrOk then
    begin
        Edit1.Text := frmBuscaFunc.dsListFunc.DataSet.FieldByName(´COD_FUNC´).AsString;
        lblFunc.Caption := frmBuscaFunc.dsListFunc.DataSet.FieldByName(´NMFUNC´).AsString;

    end;
  finally
    frmBuscaFunc.Release;
    FreeAndNil(frmBuscaFunc);//Para Destruir o Form
  end;
end;

procedure TfrmCadVar.SpeedButton2Click(Sender: TObject);
begin
  Application.CreateForm(TfrmBuscaEventos, frmBuscaEventos);
  try
    if frmBuscaEventos.ShowModal = mrOk then
    begin
        Edit2.Text := frmBuscaEventos.dsListEventos.DataSet.FieldByName(´CDCHAMADA´).AsString;
        label9.Caption := frmBuscaEventos.dsListEventos.DataSet.FieldByName(´NMEVENTO´).AsString;
    end;
  finally
    frmBuscaEventos.Release;
    FreeAndNil(frmBuscaEventos);//Para Destruir o Form
  end;
end;

end.



GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

[b:18fcb8b7ac]Adriano[/b:18fcb8b7ac], se quiser tornar seu edit alinhado à direita, o único modo é criando um novo componente para isto. Juntando tudo, vc pode ter um componente para entrada de hora da direita para a esquerda. Se interessar, veja este [url=http://scriptbrasil.com.br/forum/index2.php?s=&showtopic=99498&view=findpost&p=419780]post[/url] (re, forum ScriptBrasil) Abraços
Opa não tinha visto este ultimo post, vou ler.


GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

[quote:7eec098f1d=´micheus´][b:7eec098f1d]Adriano[/b:7eec098f1d], se quiser tornar seu edit alinhado à direita, o único modo é criando um novo componente para isto. Juntando tudo, vc pode ter um componente para entrada de hora da direita para a esquerda. Se interessar, veja este [url=http://scriptbrasil.com.br/forum/index2.php?s=&showtopic=99498&view=findpost&p=419780]post[/url] (re, forum ScriptBrasil) Abraços
Opa não tinha visto este ultimo post, vou ler.[/quote:7eec098f1d]Sobre a alinhar a direita [b:7eec098f1d]Micheus[/b:7eec098f1d], vou utilizar o jvEdit que ja vem com uma propriedade para alinhar, fica mais pratico, mais o que esta pegando mesmo é que não quer formatar com zero antes, eu acho que é por causa da função para formatar ao ir digitando.


GOSTEI 0
Micheus

Micheus

12/12/2008

mais tem um probleminha na formatação do zero que não esta fazendo efeito no onexit do edit. Sabe me dizer o porque?
Sim. O motivo está relacionado ao que falei sobre o fato de o evento [i:38a311f3fc]OnChange[/i:38a311f3fc] ser executado quando vc altera a propriedade [i:38a311f3fc]Text[/i:38a311f3fc]. Assim, como no evento [i:38a311f3fc]OnExit[/i:38a311f3fc] vc atribui a Text o string formatado com 3 zeros, o evento [i:38a311f3fc]OnChange[/i:38a311f3fc] é executado e reajusta a formatação para a forma como foi programado.

Há realmente a necessidade de ao sair este campo ficar com 3 casas, forçando eventualmente a inclusão de zeros não significativos à esquerda?
Eu penso que não. Talvez seja realmente conveniente, ao executar o OnExit chamar o método [i:38a311f3fc]Edit3Change(Edit3)[/i:38a311f3fc] para que o texto da hora seja formatado corretamente (tenha a parte da hora e a do minuto..):
procedure TfrmCadVar.Edit5Exit(Sender: TObject);
begin
  Edit3Change(Edit3);
  btGravar.Click;
end;


e a função de conversão, vc dá uma ajustada para não ser obrigado a ter um tamanho fixo de caracteres:
function HoraToMin(Hora: String): Integer;
var
  IdxPos :Integer;
begin
  IdxPos := Pos(´:´, Hora);
  if IdxPos = 0 then
    Result := StrToIntDef(Hora, 0)
  else
    Result := (StrToInt(Copy(Hora,1,IdxPos -1))*60) + StrToInt(Copy(Hora,IdxPos+1,2));
end;
usei o [i:38a311f3fc]StrToIntDef[/i:38a311f3fc], para o caso de a string Hora estar nula.

Abraços


GOSTEI 0
Adriano_servitec

Adriano_servitec

12/12/2008

[quote:b3fc43fe13=´Adriano_Servitec´]mais tem um probleminha na formatação do zero que não esta fazendo efeito no onexit do edit. Sabe me dizer o porque?
Sim. O motivo está relacionado ao que falei sobre o fato de o evento [i:b3fc43fe13]OnChange[/i:b3fc43fe13] ser executado quando vc altera a propriedade [i:b3fc43fe13]Text[/i:b3fc43fe13]. Assim, como no evento [i:b3fc43fe13]OnExit[/i:b3fc43fe13] vc atribui a Text o string formatado com 3 zeros, o evento [i:b3fc43fe13]OnChange[/i:b3fc43fe13] é executado e reajusta a formatação para a forma como foi programado.

Há realmente a necessidade de ao sair este campo ficar com 3 casas, forçando eventualmente a inclusão de zeros não significativos à esquerda?
Eu penso que não. Talvez seja realmente conveniente, ao executar o OnExit chamar o método [i:b3fc43fe13]Edit3Change(Edit3)[/i:b3fc43fe13] para que o texto da hora seja formatado corretamente (tenha a parte da hora e a do minuto..):
procedure TfrmCadVar.Edit5Exit(Sender: TObject);
begin
  Edit3Change(Edit3);
  btGravar.Click;
end;


e a função de conversão, vc dá uma ajustada para não ser obrigado a ter um tamanho fixo de caracteres:
function HoraToMin(Hora: String): Integer;
var
  IdxPos :Integer;
begin
  IdxPos := Pos(´:´, Hora);
  if IdxPos = 0 then
    Result := StrToIntDef(Hora, 0)
  else
    Result := (StrToInt(Copy(Hora,1,IdxPos -1))*60) + StrToInt(Copy(Hora,IdxPos+1,2));
end;
usei o [i:b3fc43fe13]StrToIntDef[/i:b3fc43fe13], para o caso de a string Hora estar nula.

Abraços[/quote:b3fc43fe13]Necessidade até que não, estes zeros a esquerda neste caso seria mais por estetica mesmo. Mais acho que vou deixar como vc postou amigo, esta funcionando e é o que importa :D

Mais uma ver agradeço pelo esforço e ajuda [b:b3fc43fe13]Micheus[/b:b3fc43fe13].

Abraços e obrigado amigo.


GOSTEI 0
POSTAR