delphi4arab منتديات دلفي للعرب
منع المكون TEdit قبول الحروف! - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13)
+--- الموضوع : منع المكون TEdit قبول الحروف! (/showthread.php?tid=9)

الصفحات: 1 2 3


منع المكون TEdit قبول الحروف! - hanipino - 29-12-2009

لجعل الكتابة تتوصطها |--> (ES_CENTER)
PHP كود :
procedure TForm1.btn1Click(Sender: TObject);
var
  
Style: LongInt;
begin
  Style 
:= GetWindowLong(edt1.Handle, GWL_STYLE);
  
SetWindowLong(edt1.Handle, GWL_STYLE, Style or ES_CENTER);
  
edt1.Invalidate;
end; 

لجعلها تقبل الارقام فقط (الارقام دون فاصلة ... ?) |--> (ES_NUMBER)
PHP كود :
procedure TForm1.btn1Click(Sender: TObject);
var
  
Style: LongInt;
begin
  Style 
:= GetWindowLong(edt1.Handle, GWL_STYLE);
  
SetWindowLong(edt1.Handle, GWL_STYLE, Style or ES_NUMBER);
  
edt1.Invalidate;
end; 

لمزج كلى الحالتين |--> (ES_NUMBER or ES_CENTER)
PHP كود :
procedure TForm1.btn1Click(Sender: TObject);
var
  
Style: LongInt;
begin
  Style 
:= GetWindowLong(edt1.Handle, GWL_STYLE);
  
SetWindowLong(edt1.Handle, GWL_STYLE, Style or ES_NUMBER or ES_CENTER);
  
edt1.Invalidate;
end; 



منع المكون TEdit قبول الحروف! - sachaigor - 06-02-2010

شكرا لك على الموضوع


سؤال

هل نطبق نفس الطريقة على DBEdit


منع المكون TEdit قبول الحروف! - AL-MOB4RM3G - 06-02-2010

إقتباس :سؤال

هل نطبق نفس الطريقة على DBEdit

اخي الكريم, ال DBEdit يستخدم لجلب البيانات من قآعدة البيانات,
لذلك يمكنك استخدام مثلا ال TEdit عادي قبل تخزين المعلومة في القآعدة وبعدها تجلب المعلومة من القآعدة بستخدام ال DBEdit بدون مشآكل ان شاء الله,

بالتوفيق,


منع المكون TEdit قبول الحروف! - unusual - 07-03-2011

delphi4ever كتب :
كود :
begin if (key in ['0'..'9', #8]) then begin key := #0; beep; end; end;

السلام عليك يا أخي
حسب خبرتي البسيطة أظن ان في الكود الذي يطبع الأحرف ولا يطبع الأرقام
فيه خلل مع #8 حيث يجب عدم وضعها في هذا الكود لكي يقبل الحذف
وشكرا


منع المكون TEdit قبول الحروف! - syscall - 07-03-2011

السؤال الذي يطرح نفسه ماذا لو كان المستخدم اذكى من المبرمج ونسخ قيمة رقمية الى حافظة الويندوز ثم لصقها في هذا العنصر
طبعا لن تعمل الشيفرة لذلك هل من حل ؟


منع المكون TEdit قبول الحروف! - kachwahed - 07-03-2011

إقتباس :لذلك هل من حل ؟
لكل مشكل حل
في هذه الحالة عليك باقتناص أثر الحدث WM_COPY
كود :
procedure WMCopy(var Message: TMessage); message WM_COPY;
ثم التصرف حيال ذلك...
مقالات ومواضيع في المنتدى كثيرة حول رسائل الأحداث في Windows
استخدم البحث...



منع المكون TEdit قبول الحروف! - syscall - 07-03-2011

اخي العزيز kachwahed اعلم ان هناك حل ولدي الحل بطريقتي الخاصة وبدون استخدام رسائل الاحداث
لكن اردت ان اعرف بعض التجارب الاخرى لدى الشباب
حتى لااطيل عليكم اليكم الحل
طبعا في هذا المثال يمكن ادخال قيمة رقمية ولكن من المستحيل ادخال قيمة حرفية
كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #8, DecimalSeparator]) then begin Key := #0; Beep; end; end; function isNum(Value: String): Boolean; var X: Integer; begin Result:=Value <> ''; IF Result Then For X:=1 To Length(Value) Do Case Value[X] OF '0'..'9':; Else Result:=False; Break; End; end; procedure TForm1.Edit1Change(Sender: TObject); var edit: TEdit; begin edit:=TEdit(sender); if isNum(edit.text) then edit.ClearUndo else begin edit.OnChange:=nil; edit.Undo; edit.OnChange:=Edit1Change; edit.ClearUndo; edit.SelectAll; end; end;



منع المكون TEdit قبول الحروف! - syscall - 07-03-2011

الشيفرة السابقة تحتاج الى تعديل
اليكم التعديل الجديد
كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #8, DecimalSeparator]) then begin Key := #0; Beep; end; end; function isNum(Value: String): Boolean; var X: Integer; begin Result:=Value <> ''; IF Result Then For X:=1 To Length(Value) Do Case Value[X] OF '0'..'9':; Else Result:=False; Break; End; end; procedure TForm1.Edit1Change(Sender: TObject); var edit: TEdit; begin edit:=TEdit(sender); if edit.Text <> '' then if not isNum(edit.text) then begin edit.OnChange:=nil; edit.Undo; edit.OnChange:=Edit1Change; edit.SelectAll; end; edit.ClearUndo end;



منع المكون TEdit قبول الحروف! - kachwahed - 07-03-2011

استخدم الوسم code لتبدو الأكواد أوضح
مثال بطريقة أخرى من خلال قراءة محتوى Clipboard
PHP كود :
uses
 ClipBrd
;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  
Shift: TShiftState);
var
  
Mgs: TMsg;

  
procedure EatKey;
  { 
Clear Keyboardbuffer}
  
begin
    PeekMessage
(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
  
end;

begin
  
{ Check if control pressed }
  if (
ssCtrl in Shift) then
    
case key of
      
{ Ctrl + v }
      
86:
        
begin
          
{ determine if the Clipboard contains a string type }
          if 
Clipboard.HasFormat(CF_TEXT) then
            
{ Check if text consists of numbers }
            try
              
StrToInt(Clipboard.AsText);
            
except
              
{ If no then don't insert text }
              EatKey
            end;
        end;
      { Ctrl + c }
      67: { do nothing }
        else
          EatKey;
    end
  { else check for allowed characters such as BackSpace, RETURN...}
    else if not (Key in [8, 13, 110, 96..105]) then EatKey;
end; 
المثال لـ Thomas Stutz بتصرف
ينقصه منع Shift+Insert وأمثالها وبعض الفحوصات...



منع المكون TEdit قبول الحروف! - لمير - 03-09-2015

[dcc32 Erreur] Unit2.pas(29): E2003 Identificateur non déclaré : 'DecimalSeparator'