inputta karakter sınırlaması ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

inputta karakter sınırlaması ?

Mesaj gönderen ByDeniS »

Merhaba arkadaşlar yardımlarınız için şimdiden teşekkür ederim.

inputbox'a girilen bir değere karakter sınırlaması koymak istiyorum. Yalnız bu 255 karakter yada 25 30 50 karakter olucak diye olan sınırlama değil.

KeyPress ile denemedim ama inputta keypress'i uyduramadım.

Yazlışta şu karakterlerin kabul olmamasını istiyorum. \ / : * ? " > < |
inputbox'a yazılan metinde bu karakterleri pastığı zaman mümkünse key:=#0; yaptırayım. Yada hata mesajı verdireyim ama bunu yapabilirmiyim. Bu karakterleri önleyebilirmiyim.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: inputta karakter sınırlaması ?

Mesaj gönderen unicorn64 »

doğrudan inputbox a müdahale edebilirmisiniz bilmiyorum ama inputbox benzeri istediğiniz özeliklerde küçük bi form oluşturup modal olarak gösterebilirsiniz.
hatta kullanım yeri uygunsa bi panel üzerine 1 label 1 edit 2 tane de buton koyup yapabilirsiniz... bu paneli de bir frame içinde oluşturursanız istediğiniz yerde kullanırsınız. form üzerindeki tüm nesneler (bu panel hariç) bir panel içinde olursa, ihtiyacınız halinde bu paneli visible true ve bringtofront deyip diğer bileşenleri içeren panele de enabled false dersiniz...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: inputta karakter sınırlaması ?

Mesaj gönderen Lost Soul »

Kod: Tümünü seç

 function GetAveCharSizeEx(Canvas: TCanvas): TPoint;
 var
   I: Integer;
   Buffer: array[0..51] of Char;
 begin
   for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
   for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
   GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
   Result.X := Result.X div 52;
 end;




function InputQueryEx(const ACaption, APrompt: string;
   var Value: string;vMaxLength:integer=0): Boolean;
 var
   Form: TForm;
   Prompt: TLabel;
   Edit: TEdit;
   DialogUnits: TPoint;
   ButtonTop, ButtonWidth, ButtonHeight: Integer;
 begin
   Result := False;
   Form := TForm.Create(Application);
   with Form do
     try
       Canvas.Font := Font;
       DialogUnits := GetAveCharSizeEx(Canvas);
       BorderStyle := bsDialog;
       Caption := ACaption;
       ClientWidth := MulDiv(180, DialogUnits.X, 4);
       Position := poScreenCenter;
       Prompt := TLabel.Create(Form);
       with Prompt do
       begin
         Parent := Form;
         Caption := APrompt;
         Left := MulDiv(8, DialogUnits.X, 4);
         Top := MulDiv(8, DialogUnits.Y, 8);
         Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
         WordWrap := True;
       end;
       Edit := TEdit.Create(Form);
       with Edit do
       begin
         Parent := Form;
         Left := Prompt.Left;
         Top := Prompt.Top + Prompt.Height + 5;
         Width := MulDiv(164, DialogUnits.X, 4);
         if vMaxLength>0 then
         MaxLength :=vMaxLength
         else
         MaxLength := 255;
         Text := Value;
         SelectAll;
       end;
       ButtonTop := Edit.Top + Edit.Height + 15;
       ButtonWidth := MulDiv(50, DialogUnits.X, 4);
       ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
       with TButton.Create(Form) do
       begin
         Parent := Form;
         Caption := 'Tamam';
         ModalResult := mrOk;
         Default := True;
         SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
           ButtonHeight);
       end;
       with TButton.Create(Form) do
       begin
         Parent := Form;
         Caption := 'İptal';
         ModalResult := mrCancel;
         Cancel := True;
         SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
           ButtonWidth, ButtonHeight);
         Form.ClientHeight := Top + Height + 13;
       end;
       if ShowModal = mrOk then
       begin
         Value := Edit.Text;
         Result := True;
       end;
     finally
       Form.Free;
     end;
 end;


procedure TForm1.Button2Click(Sender: TObject);
var s: String;
begin
inputqueryex('Deneme','Deneme mesajı',s,10);
// 10 karakterlik limit
showmessage(s);
end;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: inputta karakter sınırlaması ?

Mesaj gönderen SimaWB »

unicorn64'ün dediği gibi kendine özgü Form kullanmak en kolay ve mantıklı olan bence. Hatta Dialogs.pas içinde InputBox'a bakarsan orada da basit bir şekilde TForm kullanılarak yapıldığını görürsün.

Karakter sınırlaması için aşağıdaki kod işini görür :

Kod: Tümünü seç

const
  MaxLengthMessage = WM_USER + 1000;


  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure InputBoxSetMaxLength(var Msg: TMessage); message MaxLengthMessage ;
  public
    { Public declarations }
  end;

  procedure TForm1.InputBoxSetPasswordChar(var Msg: TMessage);
  var
    hInputForm, hEdit, hButton: HWND;
  begin
    hInputForm := Screen.Forms[0].Handle;
    if (hInputForm <> 0) then
    begin
      hEdit := FindWindowEx(hInputForm, 0, 'TEdit', nil);
      SendMessage(hEdit, EM_LIMITTEXT, 10, 0); // Max. 10 karakter girilsin
    end;
  end;
  procedure TForm1.Button1Click(Sender: TObject); 
  begin
    PostMessage(Handle, MaxLengthMessage, 0, 0);
    InputBox('Başlık', 'Prompt', 'Default');
  end;

There's no place like 127.0.0.1
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: inputta karakter sınırlaması ?

Mesaj gönderen ByDeniS »

Mesajımın sonunakadar okunmadığını düşünüyorum :(
Burada benim inputbox sadece bir örnek olarak sunduğum bir olaydır. Velakin ben karakter sınırlamasını istiyorum karakter sınırlaması olarakta 25 karakter 100 karakter olarak sınırlamak istemiyorum verilen iki kodda bunun kodudur.

\ / : * ? " > < |

Yukarıdaki karakterlerin kullanılmamasını istiyorum. Bu karakterler KeyPress işlemi gördüğü anda Key=#0; yada hata mesajı vermesi.

Karakter sınırlamasından kastım budur..
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: inputta karakter sınırlaması ?

Mesaj gönderen conari »

unicorn64 yazdı:inputbox benzeri istediğiniz özeliklerde küçük bi form oluşturup modal olarak gösterebilirsiniz.
+1
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: inputta karakter sınırlaması ?

Mesaj gönderen SimaWB »

unicorn64 yazdı:inputbox benzeri istediğiniz özeliklerde küçük bi form oluşturup modal olarak gösterebilirsiniz.
+1
There's no place like 127.0.0.1
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: inputta karakter sınırlaması ?

Mesaj gönderen ByDeniS »

Hala aynı cevap geliyor :(
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: inputta karakter sınırlaması ?

Mesaj gönderen Lost Soul »

SimaWB yazdı:
unicorn64 yazdı:inputbox benzeri istediğiniz özeliklerde küçük bi form oluşturup modal olarak gösterebilirsiniz.
+1

+

Kod: Tümünü seç

Procedure Edit1onKeyPress ......
const
CharSet = ['.','?','='];
Begin
if Key in Charset then key:=#0;
End;
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: inputta karakter sınırlaması ?

Mesaj gönderen unicorn64 »

ByDeniS yazdı:Mesajımın sonunakadar okunmadığını düşünüyorum :(
Burada benim inputbox sadece bir örnek olarak sunduğum bir olaydır.
bence ilk mesajını önce sen tekrar bi oku istersen...
ByDeniS yazdı: inputbox'a girilen bir değere karakter sınırlaması koymak istiyorum.
inputbox'a yazılan metinde bu karakterleri pastığı zaman mümkünse key:=#0; yaptırayım.
özellikle inputbox ı vurgulamışsın sonra da yanlış anlaşıldı inputbox bir örnekti diyorsun....

ihtiyacına göre inputbox benzeri ufak bi form oluştur,
yeni formda yada hali hazırda kullandığın formda artık nerde gerekliyse ordaki edite @LostSolul un gönderdiği kodu bir uygula...

yada en azından uygulayıp da çalıştıramadığın kodu gönder nerde hatan var ona bakalım...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: inputta karakter sınırlaması ?

Mesaj gönderen ByDeniS »

\ / : * ? " > < |

Yukarıdaki karakterlerin kullanılmamasını istiyorum. Ama verilen kod örnekleri hep 25 karakter 10 karakter sınırı :)
Mümkünse inputbox mümkün değilse tabikide başka bir örnek. Sınırlamadan kastım yukarıdaki karakterler.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
khanco
Üye
Mesajlar: 226
Kayıt: 01 Eki 2007 04:39
Konum: İzmir
İletişim:

Re: inputta karakter sınırlaması ?

Mesaj gönderen khanco »

Kod: Tümünü seç

Procedure Edit1onKeyPress ......
const
CharSet = ['.','?','='];
Begin
if Key in Charset then key:=#0;
End;


charset te istemediğin tuşları yaz
if satırında istiyorsan mesaj verdir.
Cevapla