تكبير الحرف الاول فى Edit
#1
السلام عليكم ورحمة الله وبركاته
===
منذ فترة احتجت الى خاصية تكبير تلقائى للحروف الاولى للكلمات
فعند ادخال مثلا اسم الصنف يقوم الEdit بتكبير الحروف الاولى للكلمات
مثال :
pronto plus tab -----> Pronto Plus Tab

وهكذا...
وكان هذا كالاتى
اولا قمت بكتابة function تاخذ متغير من النوع string وتعيد ايضا ناتج من النوع string
اسميتها UpperCaseFirstLetter


كود :
function TForm1.UpperCaseFirstLetter(Str: String): String; var myStr : String; begin   while length(str) > 0 do      begin      if pos(' ',str) > 0 then      begin        myStr := myStr + UpperCase(Copy(Str,1,1)) + Copy(Str,2,pos(' ',Str)  - 1);        Delete(str,1,pos(' ',Str) );      end //End of if   else      begin       myStr := myStr + UpperCase(Copy(Str,1,1)) + Copy(Str,2,length(Str)  - 1);       Delete(str,1,length(Str));      end;  // End of else   end; // End of Do      Result := myStr; end;

وفى الحدث onchange للedit
ببساطة قمت باستدعاء الدالة UpperCaseFirstLetter

كود :
procedure TForm1.Edit1Change(Sender: TObject); var OldSel : Integer; begin if Trim(Edit1.Text) <> '' then  begin    OldSel := Edit1.SelStart;    Edit1.Text := UpperCaseFirstLetter(Edit1.Text);    Edit1.SelStart := OldSel;  end; end;
هكذا كان الحل بسيط
ملحوظة قمت بعمل كمبونت جديد به هذا الخاصية بالاضافة الى property من النوع Boolean بحيث يمكنك تشغيل او اطقاء هذه الخاصية
هذا كل شئ والسلام عليكم ورحمة الله وبركاته
اللهم ارحم ابى وانر قبره واجعل مثواه الجنة
[-] كل من 3 users say قال شكرا ل justnick على المشاركة المفيدة
  • أبو معاذ, h-farid, berrahem
الرد
#2
بعد مشاركة الكود
فكرت فى طريقة اسهل لعمل الدالة
وبالفعل اعتمدت على
ان الstring هو مصفوفة من الحروف وبستخدام حلقة تكرارية For كان الحل ابسط من ما كان عليه


كود :
function TForm1.UpperCaseFirstLetter2(Str: string): string; var I : Integer; begin Str[1] := UpCase(Str[1]); for I := 0 to length(Str) - 1 do   if Str[i] = ' ' then Str[i+1] := UpCase(Str[i+1]);   Result := Str; end;

وفى الحدث onChange الخاص بEdit استدعيت الدالة على النحو التالى

كود :
procedure TForm1.Edit1Change(Sender: TObject); var OldSelBok : Integer; begin if Trim(Edit1.Text) <> '' then begin OldSelBok := Edit1.SelStart; Edit1.Text := UpperCaseFirstLetter2(Edit1.Text); Edit1.SelStart := OldSelBok; end; end;
[-] كل من 2 users say قال شكرا ل justnick على المشاركة المفيدة
  • h-farid, berrahem
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم