Maskedit ile ilgili bir şüphe

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
incal99
Üye
Mesajlar: 23
Kayıt: 20 Eki 2005 02:33

Maskedit ile ilgili bir şüphe

Mesaj gönderen incal99 »

Merhaba,

Formlarda Masedit kullanıyorum. Fakat şöyle bir tehlike gözlemledim:

____ (örneğin 4 basamaklı bir sayı tanımlamış olalım).

4567 (Normal giriş)

Fakat kullanıcı eğer isterse şu şekildede girşe izi veriyor:

_5__ Burada girilen 5 değeri Texte çevrilince ortaya garip bir durum çıkıyor. eğer _ iptal edilirse o zamanda durum söyle oluyor:

<space>5<space><space>


Buradaki verileri STRTOINT ile çevirip döngülerde kullandığımdan problem olabileceğini düşünüorum.

ilk basamağı girmeden ikinciye atlamama özelliği koyulabilirmi?


Teşekkürler.


Incal99
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Her şey Delphi'den beklememek lazım. Öyle olsaydı da bu sefer tersi talep edilebilirdi.

- Aşağıdaki şekilde bir ekleme yaparsanız soruyu anladıysam sanırım istediğiniz yerine gelecektir.

// NOT Rakamlar için soldan sağa giriş zorunluluğu ve aradan silme olursa geri adım için tasarlanmıştır.

Kod: Tümünü seç

procedure TForm1.MaskEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Var
  Konum : Integer;
  Veri  : String;
begin
    If (Key = vk_Right ) AND (TMaskEdit(Sender).SelStart = Length(Trim(TMaskEdit(Sender).Text))) then Key := $0;
  If (Key = vk_Delete) or (Key = vk_Back) then begin
    Konum := TMaskEdit(Sender).SelStart;
    Veri  := TMaskEdit(Sender).Text;
    Delete(Veri, Konum+1, 1);
    TMaskEdit(Sender).Text := Veri;
    TMaskEdit(Sender).SelStart := Konum;
    Key := $0;
  end;
En son mrmarman tarafından 07 Eyl 2007 04:04 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

kullandığın bileşenin keypress olayına space karakteri gelirse birşey yapma diye komut yaz.

Kod: Tümünü seç

if (Key =#32) then
    begin
        Key := #0;
    end;
gibi bir kod tabi eğer sorun buysa.

Not: Formun KeyPreview özelliğini true yapmalısın
Anlatırsanız unuturum,
Gösterirseniz hatırlarım,
Yaptırırsanız anlarım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@vampir261

- numerik giriş için 9999 şeklinde mask kullanıldığında zaten boşluk kabul edilmez..

- Tek açık sağa yön tuşunun engeli idi verdiğim kodda ayrıca bu da mevcut.
Resim
Resim ....Resim
incal99
Üye
Mesajlar: 23
Kayıt: 20 Eki 2005 02:33

Mesaj gönderen incal99 »

Arkadaşlar çok teşekkürler,

Tek bir sorunum kaldı: Form4 üzerinde yallaşık 250 adet Maskedit nesnesi var bunlara tek tek sağ tuşu iptal eden kodu girmek çok problemli olacak. Acaba Editmask üzerinden veya Findcomponent() tarzında 250 sinede birden atayabileceğim bir seçenek yok mu?

Resmini göndermeye çalıştım ama sanırım forum resim kabul etmiyor:

Form1 şu şekilde:

1.Sütun (64 adet combobox)
2.sütun (64 adet Maskedit)
3.sütun (64 adet Maskedit)
4.sütun (64 adet combobox)
5.sütun (64 adet maskedit)
6.sütun (64 adet maskedit)

bu bir reçete ekranı. Aslında delphi bilgim daha derin olsaydı bu excel tarzı bir component ilede yapılabilirdi ama şu an böyle çözdüm. Tüm componentlerin içeriklerini bir text dosyasında saklıyorum.

Istenildiği zamanda PLC ye gönderiyorum.



Incal99

[/img]
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Zaten verdiğim koda dikkat edersen TMaskEdit(Sender) şeklinde ifade kullanmıştım... Yani joker bir kullanım alanı var.

- Bu sana ne kazandırıyor. Bu kodu ilk maskedit'in OnKeyDown olayına yazarsın. Sonra diğer MaskEditlerin her birinin events sayfasında OnKeyDown olayında açılır liste kutusunu açarsın ve listeden bu ilk MaskEdit'in OnKeyDown procedure'ü görünecektir onu seçeceksin. Böylece her maskedit için tek merkezden uygulama yapmış olursun.
Resim
Resim ....Resim
incal99
Üye
Mesajlar: 23
Kayıt: 20 Eki 2005 02:33

Mesaj gönderen incal99 »

Arkadaşlar çok teşekkürler,

Aşağıdaki kod ile 250 adedinide kontrol altına alabildim. Çok zaman tasarrufu oldu.

Hepinize iyi çalışmalar.

Incal99

Kod: Tümünü seç


For m:=1 to 64 do begin

with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m))) do EditMask:='!>999<;1; ';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m))) do Text:='';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m))) do OnKeyDown:=MaskEdit1KeyDown;

with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+64))) do EditMask:='!>999<;1; ';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+64))) do Text:='';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+64))) do OnKeyDown:=MaskEdit1KeyDown;


with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+128))) do EditMask:='!>9999<;1; ';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+128))) do Text:='';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+128))) do OnKeyDown:=MaskEdit1KeyDown;


with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+192))) do EditMask:='!>9999<;1; ';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+192))) do Text:='';
with TMaskEdit(FindComponent('MaskEdit' + IntToStr(m+192))) do OnKeyDown:=MaskEdit1KeyDown;


with TCombobox(FindComponent('Combobox' + IntToStr(m))) do Items.Clear;
with TCombobox(FindComponent('Combobox' + IntToStr(m))) do Text:='';
with TCombobox(FindComponent('Combobox' + IntToStr(m))) do DropDownCount:=40;
[/code]
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Valla ne deyim, aslında mouse ile geriye kalan tüm MaskEdit'leri seçip bir kerede hepsinin eventini değiştirebilirdin onu söylemiştim ama neyse sana bu daha kolay gelmiş ve zaman tasarrufu gelmişse diyecek yok :lol: :lol: :lol:

- Çalışmalarında başarılar.. 8)
Resim
Resim ....Resim
Cevapla