Karekter ve rakamların engellenmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Karekter ve rakamların engellenmesi

Mesaj gönderen Laz61 »

Arkadaşlar merhaba,

edit kutusuna kopyalanıp yapıştırılan harf karakterlerinin engellenmesini istiyorum. Yani kopyalanan metinde rakamlardan başka harf karakterleri varsa, yapıştırma esnasında engellenmesini, yapıştırılmamasını istiyorum.

Tsk ederim
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Karekter ve rakamların engellenmesi

Mesaj gönderen SimaWB »

Sadece sayı girilmesini Edit'in onKeyPress eventinde sağlıyorsan, kullanıcılar Ctrl+V ile yapıştırma yapamayacaktır ve Edit'in onContextPopup event'inde
Handled := True;
yaparsan sağ tık menüsü açılmaz. Böylece kullanıcının yapıştırma yapmasını engelleyebilirsin.
Kullanıcı yapıştırma yapabilsin ama sadece sayılar yapışsın istiyorsan o zaman Edit1.WindowProc 'u araştırmalısın.
There's no place like 127.0.0.1
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Karekter ve rakamların engellenmesi

Mesaj gönderen Laz61 »

Arkadşlar merhaba,

tşk. ederim.

Edite yapıştırmak istediğim metinde rakamlardan hariç harf karakterleri varsa, Mesela: Merhaba123, metindeki (Merhaba) karakterlereinin engellenmesi ve (123) rakamlarının yapıştırılmasını istiyorum. Yani arattığım metinde karakterler engellenip rakamlar edite yapıştırılacak. Umarım bir şeyler bulurum.

Hoşca kalın
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Karekter ve rakamların engellenmesi

Mesaj gönderen SimaWB »

O zaman öncelikle OnKeyPress'te Ctrl+V'ye izin vermelisiniz:

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9', #8, ^V]) then
    Key:=#0;
end;
Bu durumda kullanıcı hem Ctrl+V ile hem de sağ tık menüsü ile Edit1'e yazı yapıştırabilir.

Yapıştırmak istediği yazıyı kontrol etmek için Edit1'e gelen messajları dinlemek ve WM_PASTE mesajı gelip gelmediğini kontrol etmek gerekir. WM_PASTE mesajı yakalandığında yapıştırılmak istenilen yazıyı Clipboard'tan okuyabiliriz. Daha sonra içinde rakam olmayanları atıp tekrar ClipBoard'a gönderir ve WM_PASTE mesajını tekrar çağırırsak sadece sayıların yapıştırılmasını sağlarız:

Kod: Tümünü seç

TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    oldEdtWndProc: TWndMethod;
    procedure EditWndProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9', #8, ^V]) then
    Key:=#0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  oldEdtWndProc := Edit1.WindowProc;
  Edit1.WindowProc := EditWndProc;
end;

procedure TForm1.EditWndProc(var Message: TMessage);
var
  str, strTmp: string;
  i: integer;
begin
  if Message.Msg = WM_PASTE then
  begin
    strTmp := '';
    str := Clipboard.AsText;
    for i := 1 to Length(str) do
      if (str[i] in ['0'..'9']) then
        strTmp := strTmp + str[i];

    Clipboard.AsText := strTmp;
  end;
  oldEdtWndProc(Message);
end;
There's no place like 127.0.0.1
Laz61
Üye
Mesajlar: 135
Kayıt: 03 Eki 2007 11:51
Konum: Almanya

Re: Karekter ve rakamların engellenmesi

Mesaj gönderen Laz61 »

Arkadaşlar merhaba,

Harika! Eline, diline, gönlüne sağlık.

Hoşca kalın
Hayat tüm olumsuzluklara rağmen yaşamaya değer.
Cevapla