MaskEdit otomatik tamamlama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

MaskEdit otomatik tamamlama

Mesaj gönderen Serhat »

İyi akşamlar;

MaskEdit in time özelliğini kullanıyorum, kullanıcı maskedite 02:00 gibi bir sayı girdiğinde bu sayıyı otomatik olarak 00:02:00 tamamlanmasını nasıl sağlayabilirim. Bu işlemi editde çok kullanışlı olmasa da yaptırabiliyorum benzer uygulamayı maskedite kullanamadım...

Kod: Tümünü seç

begin
if (Length(Edit1.Text)=2) then
begin
Edit1.Text:=Edit1.Text+':';
Edit1.Selstart := Length(Edit1.Text);
end;
if (Length(Edit1.Text)=5) then
begin
Edit1.Text:=Edit1.Text+':';
Edit1.Selstart := Length(Edit1.Text);
end;
if (length(Edit1.Text)=8) and (not(key=vk_back)) then
Edit2.Setfocus;
end;  
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: MaskEdit otomatik tamamlama

Mesaj gönderen mrmarman »

EditMask olarak

Kod: Tümünü seç

!99:99:99;1;0
işinizi görmez mi ?
Resim
Resim ....Resim
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: MaskEdit otomatik tamamlama

Mesaj gönderen Serhat »

Hocam "!99:99:99;1;0" denedim...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: MaskEdit otomatik tamamlama

Mesaj gönderen mrmarman »

Bir de normal TEdit'i yeniden başka bir bakış ile şöyle bir inceleyin.

NOT: OnClick eventini de OnEnter eventine bağlarsanız aynı kodu kullanmasını sağlarsınız. Verim artar.

Kod: Tümünü seç

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  With TEdit(Sender) do begin
    Text := '00:00:00';
    SelStart  := 03;
    SelLength := 02;
  end;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
 function TersDizilim( strGiris: String ): string;
 Var i : Integer;
 begin
    Result := '';
    for i := Length(strGiris) downto 1
      do Result := Result + strGiris[i];
 end;
Var
  i : Integer;
  strDeger, strSonuc : String;
  strSa, strDk, strSn : String;
begin
  strSa := '';
  strDk := '';
  strSn := '';
  strSonuc := '';
  strDeger := '';
  if Pos(':', TEdit(Sender).Text) <= 0 then begin
    strDk := TEdit(Sender).Text;
  end else begin
    strDeger := TersDizilim( TEdit(Sender).Text ) + ':';

    strSn := Copy( strDeger, 1, Pos(':', strDeger)-1);
      system.Delete(strDeger, 1, Pos(':', strDeger));

    strDk := Copy( strDeger, 1, Pos(':', strDeger)-1);
      system.Delete(strDeger, 1, Pos(':', strDeger));

    strSa := Copy( strDeger, 1, Pos(':', strDeger)-1);
      system.Delete(strDeger, 1, Pos(':', strDeger));
  end;
  if strSa = '' then strSa := '0' else strSa := TersDizilim( strSa );
  if strDk = '' then strDk := '0' else strDk := TersDizilim( strDk );
  if strSn = '' then strSn := '0' else strSn := TersDizilim( strSn );
  strSonuc := Format('%.2d:%.2d:%.2d', [ StrToInt(strSa),StrToInt(strDk),StrToInt(strSn)  ]);
  TEdit(Sender).Text := strSonuc;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: MaskEdit otomatik tamamlama

Mesaj gönderen Serhat »

Hocam elinize sağlık on numara bir çalışma, Yalnız 03 yazdığımda 00:30:00 olarak veriyor 00:00:03 olmalı birde 00:30:00 iken edit, edit tıkladığımda 00:00:00 oluyor...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: MaskEdit otomatik tamamlama

Mesaj gönderen mrmarman »

Haklısını benim hatam, statik girişleri de ters dizilime bırakmışım.
Aşağıdaki gibi deneyebilirsin.

Mouse ile click yapıldığında sıfırlamasın istersen ONEnter kısmındakileri kaldırıp dilediğin şekilde düzenleyebilirsin. Dilersen direkt dakika hanesine konumlandırabilirsin vs. ne istersen

Kod: Tümünü seç

procedure TForm1.Edit1Exit(Sender: TObject);
 function TersDizilim( strGiris: String ): string;
 Var i : Integer;
 begin
    Result := '';
    for i := Length(strGiris) downto 1
      do Result := Result + strGiris[i];
 end;
Var
  i : Integer;
  strDeger, strSonuc : String;
  strSa, strDk, strSn : String;
begin
  strSa := '0';
  strDk := '0';
  strSn := '0';
  strSonuc := '';
  strDeger := '';
  if Pos(':', TEdit(Sender).Text) <= 0 then begin
    strDk := TEdit(Sender).Text;
  end else begin
    strDeger := TersDizilim( TEdit(Sender).Text ) + ':';

    strSn := Copy( strDeger, 1, Pos(':', strDeger)-1);
      system.Delete(strDeger, 1, Pos(':', strDeger));

    strDk := Copy( strDeger, 1, Pos(':', strDeger)-1);
      system.Delete(strDeger, 1, Pos(':', strDeger));

    strSa := Copy( strDeger, 1, Pos(':', strDeger)-1);
      system.Delete(strDeger, 1, Pos(':', strDeger));
    if strSa = '' then strSa := '0' else strSa := TersDizilim( strSa );
    if strDk = '' then strDk := '0' else strDk := TersDizilim( strDk );
    if strSn = '' then strSn := '0' else strSn := TersDizilim( strSn );
  end;
  strSonuc := Format('%.2d:%.2d:%.2d', [ StrToInt(strSa),StrToInt(strDk),StrToInt(strSn)  ]);
  TEdit(Sender).Text := strSonuc;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: MaskEdit otomatik tamamlama

Mesaj gönderen Serhat »

:mrgreen: Bir önceki kodu paylaşmışsınız...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: MaskEdit otomatik tamamlama

Mesaj gönderen mrmarman »

Hayır hocam 8) yaşlandım da o kadar değil ...

Burada TersDizilim işlemi yapan / dışarıda unuttuğum kısımları

Kod: Tümünü seç

    if strSa = '' then strSa := '0' else strSa := TersDizilim( strSa );
    if strDk = '' then strDk := '0' else strDk := TersDizilim( strDk );
    if strSn = '' then strSn := '0' else strSn := TersDizilim( strSn );
ELSE'nin BEGIN END bloğuna aldım.
Resim
Resim ....Resim
Cevapla