Zero a esquerda numa mascara tipo 015:40?
Pessoal como faço para colocar zero a esquerda num edit que eu digitar ass 15:45 ficar 015:45
Grato Adriano.
Grato Adriano.
Adriano_servitec
Curtidas 0
Respostas
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
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
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
12/12/2008
Adriano, não testei mas acho que é uma opção que funciona
É isso mesmo que eu precisava Micheus. Muito obrigado amigo.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;
Valeu pela ajuda.
GOSTEI 0
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?
Estou chamando assim
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.
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
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:
Abraços
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
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?
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
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.
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
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
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
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
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
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
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;
Abraços
GOSTEI 0
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;
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