Delphi Can

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