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ı: 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.
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ı:
(20-07-2018, Saat: 23:35)dilo Adlı Kullanıcıdan Alıntı: 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ı:
(21-07-2018, Saat: 00:07)hyperxman Adlı Kullanıcıdan Alıntı:
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
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ı: 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.
Cevapla


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



Konuyu Okuyanlar: 1 Ziyaretçi