Delphi Can

Orjinalini görmek için tıklayınız: Edit otomatik tamamlama
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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;

Teşekkür ederim.
(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;