Merhaba;
Yaklaşık 10 tedit kullanıyorum edit içine tarih girince otomatik olarak (.) eklenmesini istiyorum.
İşlemi function kullanarak çözmek istiyorum, Fakat (.) hep en sonda kalıyor Örnek: 02 yazdığımda noktayı koyuyor fakat edite tekrar sayı girdiğimde nokta yine sonda kalıyor. bu durumu nasıl çözerim?
procedure TForm1.EditTarihChangeTracking(Sender: TObject);
begin
if EditTarih.Text.Length > 0 then
EditTarih.Text := TarihCreate(EditTarih.Text);
end;
function TForm1.TarihCreate(TarihString: String): String;
var
Test: String;
begin
Result := TarihString;
I := Result.Length;
begin
if I = 2 then
begin
Test := Result;
Result := '';
Result := Test + ':';
end;
end;
end;
(13-04-2019, Saat: 19:10)ahmetb Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba;
Yaklaşık 10 tedit kullanıyorum edit içine tarih girince otomatik olarak (.) eklenmesini istiyorum.
İşlemi function kullanarak çözmek istiyorum, Fakat (.) hep en sonda kalıyor Örnek: 02 yazdığımda noktayı koyuyor fakat edite tekrar sayı girdiğimde nokta yine sonda kalıyor. bu durumu nasıl çözerim?
procedure TForm1.EditTarihChangeTracking(Sender: TObject);
begin
if EditTarih.Text.Length > 0 then
EditTarih.Text := TarihCreate(EditTarih.Text);
end;
function TForm1.TarihCreate(TarihString: String): String;
var
Test: String;
begin
Result := TarihString;
I := Result.Length;
begin
if I = 2 then
begin
Test := Result;
Result := '';
Result := Test + ':';
end;
end;
end;
neden DateEdit kullanmıyorsunuz?
Görsellikten dolayı DateEdit tercih etmiyorum.
Buyrun size bir DateEdit..
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.Clear;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(CharInSet(Key, ['0' .. '9', #8, #13])) then
begin
Key := #0;
Beep;
end;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Edit1.MaxLength:=10; //Bunu formdan yaparsanız daha mantıklı..
if length(Edit1.text) = 2 then
begin
Edit1.text := Edit1.text + '.';
Edit1.SelStart := 3;
Edit1.SelLength := 0;
end;
if length(Edit1.text) = 5 then
begin
Edit1.text := Edit1.text + '.';
Edit1.SelStart := 6;
Edit1.SelLength := 0;
end;
end;
(14-04-2019, Saat: 18:05)mcuyan Adlı Kullanıcıdan Alıntı: [ -> ]Buyrun size bir DateEdit..
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.Clear;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(CharInSet(Key, ['0' .. '9', #8, #13])) then
begin
Key := #0;
Beep;
end;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Edit1.MaxLength:=10; //Bunu formdan yaparsanız daha mantıklı..
if length(Edit1.text) = 2 then
begin
Edit1.text := Edit1.text + '.';
Edit1.SelStart := 3;
Edit1.SelLength := 0;
end;
if length(Edit1.text) = 5 then
begin
Edit1.text := Edit1.text + '.';
Edit1.SelStart := 6;
Edit1.SelLength := 0;
end;
end;
Bu işlemi parasal alan için nasıl uyarlayabiliriz.
MaskEdit için tarih alanlarında aşağıdaki kodu kullanıyorum.
//Uses DateUtils
procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
if ((Sender as TMaskEdit).Text= ' . . ') or
((Sender as TMaskEdit).Text='') then
(Sender as TMaskEdit).EditMask := ''
else
(Sender as TMaskEdit).EditMask := '99.99.9999' ;
end;
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8]) then
Key := #0;
end;
procedure TForm1.MaskEdit1Exit(Sender: TObject);
begin
if MaskEdit1.Text <> '' then
begin
if Not IsValidDate (StrToIntDef(Copy(MaskEdit1.Text,7,4) , 0),
StrToIntDef(Copy(MaskEdit1.Text,4,2) , 0),
StrToIntDef(Copy(MaskEdit1.Text,1,2) , 0)) then
begin
ShowMessage('Bir hata oluştu. Girilen tarih geçersiz.');
MaskEdit1.SetFocus ;
end ;
end ;
end;
Ve yine MaskEdit için parasal alanlarda aşağıdaki kodu kullanıyorum.
procedure TForm1.MaskEdit2Exit(Sender: TObject);
begin
try
if TMaskEdit(sender).Text = '' then
TMaskEdit(sender).Text := '0,00'
else
TMaskEdit(sender).Text := formatFloat('#0.00', strToFloatdef(TMaskEdit(sender).Text,0)) ;
except
ShowMessage('Alan için format uygun değil.');
TMaskEdit(sender).SetFocus ;
end;
end;
procedure TForm1.MaskEdit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', ',', #8]) then
Key := #0;
if (AnsiPos(',',TEdit(sender).Text) <> 0) and (key = ',') then
key := #0;
end;