المشاركات : 378
المواضيع 44
:
: 6
الإنتساب : Feb 2008
لجعل الكتابة تتوصطها
|--> (
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;
المشاركات : 2
المواضيع 0
:
: 0
الإنتساب : Jun 2009
شكرا لك على الموضوع
سؤال
هل نطبق نفس الطريقة على DBEdit
المشاركات : 778
المواضيع 97
:
: 0
الإنتساب : Nov 2008
إقتباس :سؤال
هل نطبق نفس الطريقة على DBEdit
اخي الكريم, ال DBEdit يستخدم لجلب البيانات من قآعدة البيانات,
لذلك يمكنك استخدام مثلا ال TEdit عادي قبل تخزين المعلومة في القآعدة وبعدها تجلب المعلومة من القآعدة بستخدام ال DBEdit بدون مشآكل ان شاء الله,
بالتوفيق,
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
المشاركات : 2
المواضيع 0
:
: 0
الإنتساب : Nov 2010
delphi4ever كتب :كود :
begin
if (key in ['0'..'9', #8]) then
begin
key := #0;
beep;
end;
end;
السلام عليك يا أخي
حسب خبرتي البسيطة أظن ان في الكود الذي يطبع الأحرف ولا يطبع الأرقام
فيه خلل مع #8 حيث يجب عدم وضعها في هذا الكود لكي يقبل الحذف
وشكرا
أعرف شيء من كل شيء, وكل شيء من شيء
المشاركات : 52
المواضيع 2
:
: 0
الإنتساب : Jan 2011
السؤال الذي يطرح نفسه ماذا لو كان المستخدم اذكى من المبرمج ونسخ قيمة رقمية الى حافظة الويندوز ثم لصقها في هذا العنصر
طبعا لن تعمل الشيفرة لذلك هل من حل ؟
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
إقتباس :لذلك هل من حل ؟
لكل مشكل حل
في هذه الحالة عليك باقتناص أثر الحدث WM_COPY
كود :
procedure WMCopy(var Message: TMessage); message WM_COPY;
ثم التصرف حيال ذلك...
مقالات ومواضيع في المنتدى كثيرة حول رسائل الأحداث في Windows
استخدم البحث...
المشاركات : 52
المواضيع 2
:
: 0
الإنتساب : Jan 2011
07-03-2011, 06:32 PM
(آخر تعديل لهذه المشاركة: 07-03-2011, 09:06 PM بواسطة kachwahed.)
اخي العزيز 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;
المشاركات : 52
المواضيع 2
:
: 0
الإنتساب : Jan 2011
07-03-2011, 06:53 PM
(آخر تعديل لهذه المشاركة: 07-03-2011, 09:06 PM بواسطة 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 edit.Text <> '' then
if not isNum(edit.text) then
begin
edit.OnChange:=nil;
edit.Undo;
edit.OnChange:=Edit1Change;
edit.SelectAll;
end;
edit.ClearUndo
end;
المشاركات : 2,293
المواضيع 157
:
: 81
الإنتساب : Dec 2008
استخدم الوسم 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 وأمثالها وبعض الفحوصات...
المشاركات : 2
المواضيع 0
:
: 0
الإنتساب : Sep 2015
[dcc32 Erreur] Unit2.pas(29): E2003 Identificateur non déclaré : 'DecimalSeparator'