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

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف يمكن السماح في كتابة spaces مرة واحدة في Edit (/showthread.php?tid=9081)



كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - محمودد - 31-12-2017

السلام عليكم
كيف بمكاني الغاء كتابة اكثر من
كود :
spaces في Edit او كتابة spaces مرة واحدة بين كل جملة



RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - ALG2009 - 31-12-2017

(31-12-2017, 06:55 PM)محمودد كتب :
السلام عليكم
كيف بمكاني الغاء كتابة اكثر من
كود :
spaces في Edit او كتابة spaces مرة واحدة بين كل جملة
وعليكم السلام
ضع هذا الكود في الحدث OnKeyPress
كود :
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key =#32 then ShowMessage('المسافه غير مقبوله'); end; end.



RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - محمودد - 31-12-2017

(31-12-2017, 07:34 PM)ALG2009 كتب : وعليكم السلام
ضع هذا الكود في الحدث OnKeyPress
كود :
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key =#32 then ShowMessage('المسافه غير مقبوله'); end; end.

شكرا لك اريد فقط عدم السماح كتابتها اكثر من مرة او عدم كتابتها اكثر من مرة بين الجمل


RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - Agmcz - 31-12-2017

هكذا حل
PHP كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.Text[Length(Edit1.Text)] = #32) and (Key = #32) then
 
   Key := #0;
end; 



RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - محمودد - 31-12-2017

(31-12-2017, 08:15 PM)Agmcz كتب : هكذا حل
PHP كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.Text[Length(Edit1.Text)] = #32) and (Key = #32) then
 
   Key := #0;
end; 

شكرا لك هل بمكاني استخدامها مع سترنغ؟
كود :
var s:string; Key: Char; begin try if (s[Length(s)] = #32) and (Key = #32) then Key := #0; except s:=''; end; end;
الكود يعمل لكنِ يمكن عمل لصق للمسافات


RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - justnick - 31-12-2017

السلام عليكم ورحمة الله
فى الحدث onKeyPress الخاص بالمكون Edit

استخدم الكود التالى
PHP كود :
var
 
myStr : string;
begin
 myStr 
:= Edit1.Text;
 
 if (Trim(Edit1.Text) = '') and (Key = #32) then
 
   begin
     Key 
:= #0;
 
    Exit;
 
   end;

 
 if (Edit1.SelStart > 0) and (Key = #32) then
 
  if (myStr[Edit1.SelStart] = ' ') or (myStr[Edit1.SelStart + 1] = ' ') then
    begin
     key 
:= #0;
 
    Exit;
 
   end;
end; 



RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - محمودد - 01-01-2018

(31-12-2017, 09:48 PM)justnick كتب : السلام عليكم ورحمة الله
فى الحدث onKeyPress الخاص بالمكون Edit

استخدم الكود التالى
PHP كود :
var
 
myStr : string;
begin
 myStr 
:= Edit1.Text;
 
 if (Trim(Edit1.Text) = '') and (Key = #32) then
 
   begin
     Key 
:= #0;
 
    Exit;
 
   end;

 
 if (Edit1.SelStart > 0) and (Key = #32) then
 
  if (myStr[Edit1.SelStart] = ' ') or (myStr[Edit1.SelStart + 1] = ' ') then
    begin
     key 
:= #0;
 
    Exit;
 
   end;
end; 
شكرا لك هل يمكن التعديل ع الكود لاستخدامه في حدث Change الخاص بالمكون edit
عندا استخدامه بالحدث onKeyPress  يمكن عمل لصق وسوف يصبح الكود بدون فائدة


RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - ALG2009 - 01-01-2018

(31-12-2017, 08:15 PM)Agmcz كتب : هكذا حل
PHP كود :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Edit1.Text[Length(Edit1.Text)] = #32) and (Key = #32) then
 
   Key := #0;
end; 

ولكن هناك رساله خطأ عندما يكون الـ Edit  فارغ ونضغط على BackSpace


RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - Agmcz - 01-01-2018

نعم يوجد خطأ
يمكن معالجته بتحقق من طول السلسلة
PHP كود :
 if Length(Edit1.Text) > 0 then
    if 
(Edit1.Text[Length(Edit1.Text)] = #32) and (Key = #32) then
 
     Key := #0; 



RE: كيف يمكن السماح في كتابة spaces مرة واحدة في Edit - justnick - 01-01-2018

السلام عليكم ورحمة الله

استخدم الكود التالى لتحديد عدد المسافات واحدة فقط
كود :
function TForm1.SpaceLimiter(Str: string): string; var I : Integer; begin I := 0; while I < length(Str) do begin   if (Str[I] = ' ') and (Str[I + 1] = ' ') then   begin       Delete(Str, I + 1, 1);   end   else   begin   Inc(I);   end; end;  Result := Str; end;

وفى الحدث onChange للEdit ضع الكود التالى واخبرنى ماذا ترى
كود :
procedure TForm1.Edit3Change(Sender: TObject); begin Edit3.Text := SpaceLimiter(Edit3.Text); Edit3.SelStart := Length(Edit3.Text); end;