Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Karakter ekleme
#1
Merhaba;


Belirli karakter sayısından sonra * eklemek istiyorum.


aa*bb*cc* gibi aa'dan hemen sonra * ekleniyor. editte karakter girişi yapmaya devam ettiğimde,
* sürekli en sonda, (aabb**)  oluyor sonrasında eklediğim karakterlerinde sonuna kalıyor bu durumu nasıl çözebilirim?


function Yildizekle(Harf: String): String;
var
  N: Integer;
begin
  for N := 1 to length(Harf) do
  begin
    if Harf.length = 2 then
    begin
      Harf := Harf + '*';
     // Harf.SelStart := length(Harf.Text);
    end
    else
    begin
    if Harf.length = 5 then
    begin
      Harf := Harf + '*';
     // Harf.SelStart := length(Harf.Text);
    end
    else
    begin
      Result := Harf;

    end;
  end;
end;

procedure TForm1.Edit2ChangeTracking(Sender: TObject);
begin
  Edit2.Text := Yildizekle(Edit2.Text);
end;
Cevapla
#2
(20-07-2018, Saat: 23:35)dilo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba;


Belirli karakter sayısından sonra * eklemek istiyorum.


aa*bb*cc* gibi aa'dan hemen sonra * ekleniyor. editte karakter girişi yapmaya devam ettiğimde,
* sürekli en sonda, (aabb**)  oluyor sonrasında eklediğim karakterlerinde sonuna kalıyor bu durumu nasıl çözebilirim?


function Yildizekle(Harf: String): String;
var
  N: Integer;
begin
  for N := 1 to length(Harf) do
  begin
    if Harf.length = 2 then
    begin
      Harf := Harf + '*';
     // Harf.SelStart := length(Harf.Text);
    end
    else
    begin
    if Harf.length = 5 then
    begin
      Harf := Harf + '*';
     // Harf.SelStart := length(Harf.Text);
    end
    else
    begin
      Result := Harf;

    end;
  end;
end;

procedure TForm1.Edit2ChangeTracking(Sender: TObject);
begin
  Edit2.Text := Yildizekle(Edit2.Text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Length(Edit1.Text) = 0 then
begin
  //başlangıçta her zaman mod 0 çıktığı için engellemek için....
end
else
if (Length(Edit1.Text) mod 2) = 0 then
begin
  Key := char(VK_SEPARATOR);   ///yıldız kodunu bulamadım.
end;
end;


Yıldız char kodunu bulamadım. İstersen bir araştır. Mod alarak işe başlıyoruz zaten uzunluğun modunu alıp işlemleri yapıyoruz.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#3
eğer bu db bir alan ise * ' " ~ gibi özel karakterler kullanmamanızı tavsiye ederim.

Öteki taraftan fonksiyon yazmanıza gerek yok. fillchar fonksiyonu işinizi görecektir.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#4
(21-07-2018, Saat: 00:07)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(20-07-2018, Saat: 23:35)dilo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba;


Belirli karakter sayısından sonra * eklemek istiyorum.


aa*bb*cc* gibi aa'dan hemen sonra * ekleniyor. editte karakter girişi yapmaya devam ettiğimde,
* sürekli en sonda, (aabb**)  oluyor sonrasında eklediğim karakterlerinde sonuna kalıyor bu durumu nasıl çözebilirim?


function Yildizekle(Harf: String): String;
var
  N: Integer;
begin
  for N := 1 to length(Harf) do
  begin
    if Harf.length = 2 then
    begin
      Harf := Harf + '*';
     // Harf.SelStart := length(Harf.Text);
    end
    else
    begin
    if Harf.length = 5 then
    begin
      Harf := Harf + '*';
     // Harf.SelStart := length(Harf.Text);
    end
    else
    begin
      Result := Harf;

    end;
  end;
end;

procedure TForm1.Edit2ChangeTracking(Sender: TObject);
begin
  Edit2.Text := Yildizekle(Edit2.Text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Length(Edit1.Text) = 0 then
begin
  //başlangıçta her zaman mod 0 çıktığı için engellemek için....
end
else
if (Length(Edit1.Text) mod 2) = 0 then
begin
  Key := char(VK_SEPARATOR);   ///yıldız kodunu bulamadım.
end;
end;


Yıldız char kodunu bulamadım. İstersen bir araştır. Mod alarak işe başlıyoruz zaten uzunluğun modunu alıp işlemleri yapıyoruz.



Sanırım dikkatinizden kaçtıı; FMX'de Edit1KeyPress kullanımı yok!
Cevapla
#5
(21-07-2018, Saat: 15:05)serhat Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(21-07-2018, Saat: 00:07)hyperxman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Length(Edit1.Text) = 0 then
begin
  //başlangıçta her zaman mod 0 çıktığı için engellemek için....
end
else
if (Length(Edit1.Text) mod 2) = 0 then
begin
  Key := char(VK_SEPARATOR);   ///yıldız kodunu bulamadım.
end;
end;


Yıldız char kodunu bulamadım. İstersen bir araştır. Mod alarak işe başlıyoruz zaten uzunluğun modunu alıp işlemleri yapıyoruz.



Sanırım dikkatinizden kaçtıı; FMX'de Edit1KeyPress kullanımı yok!
 A pardon konunun nerede açıldığına dikkat etmedim. Orada kalsın o da bir kaynak ne de olsa fmx içinde birşeyler dusunecegiz artık  Shy
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#6
Tekrar merhaba. Kullanıcı manuel * olarak giriş yaptığında if (Say <> 3) or (Say <> 6) or (Say <> 9) then kontrolü bir işe yaramıyor.


 
Her iki karakterden sonra *  if then kontrolü doğru yapmıyor.

function Yildizekle(Const Karakter: String): String;
var
  Bul: String;
  Say, I: Integer;
begin
  Say := 0;
  Bul := '*';
  for I := 1 to Length(Karakter) do
  begin
    Inc(Say);
    if Pos(Bul, Karakter[I]) > 0 then
    begin
      if (Say <> 3) or (Say <> 6) or (Say <> 9) then
      begin
        showmessage('yanlış');
        Exit;
      end;
    end;
  end;
  Result := Karakter;
end;

procedure TForm1.Edit2ChangeTracking(Sender: TObject);
begin
  Edit2.Text := Yildizekle(Edit2.Text);
end;
Cevapla
#7
(21-07-2018, Saat: 15:18)dilo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Tekrar merhaba. Kullanıcı manuel * olarak giriş yaptığında if (Say <> 3) or (Say <> 6) or (Say <> 9) then kontrolü bir işe yaramıyor.


 
Her iki karakterden sonra *  if then kontrolü doğru yapmıyor.

function Yildizekle(Const Karakter: String): String;
var
  Bul: String;
  Say, I: Integer;
begin
  Say := 0;
  Bul := '*';
  for I := 1 to Length(Karakter) do
  begin
    Inc(Say);
    if Pos(Bul, Karakter[I]) > 0 then
    begin
      if (Say <> 3) or (Say <> 6) or (Say <> 9) then
      begin
        showmessage('yanlış');
        Exit;
      end;
    end;
  end;
  Result := Karakter;
end;

procedure TForm1.Edit2ChangeTracking(Sender: TObject);
begin
  Edit2.Text := Yildizekle(Edit2.Text);
end;


KeyDown olayı ile hallediliyormuş. @serhat KeyPress İLE AYNI İŞİ YAPAN KeyDown VARMIŞ! 


procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
if (Length(Edit1.Text) mod 3) = 0 then
begin
  KeyChar := char(vkSeparator);   ///yıldız kodunu bulamadım.
end;
end;



oVkBq7.png

İyi çalışmalar.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android string grid check column a veri ekleme 41linea41 3 461 19-04-2019, Saat: 20:06
Son Yorum: 41linea41
  Metin içeriğinde geçersiz karakter bulundu m_ekici 5 501 17-04-2019, Saat: 11:50
Son Yorum: m_ekici
  Türkçe karakter Dostk 5 1.231 08-02-2019, Saat: 11:09
Son Yorum: sabanakman
  IOS unidac Türkçe karakter sorunu hassur 10 3.342 30-01-2019, Saat: 16:24
Son Yorum: pro_imaj
  TText scrollbar ekleme? hakanharbeli 3 584 15-10-2018, Saat: 14:06
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 1 Ziyaretçi