Lazarus

Other Languages => Arabic => Topic started by: Al-Eid on July 29, 2021, 01:46:54 pm

Title: معرفة أدوات النموذج
Post by: Al-Eid on July 29, 2021, 01:46:54 pm
السلام عليكم بهذا الكود بالأسفل يمكن أن أتعرف على الأدوات الموجودة في الفورم

Code: Pascal  [Select][+][-]
  1. [code=pascal]
  2.   for J_FOR := 0 to varform.ComponentCount -1 do
  3.    Begin
  4.     if Copy(varform.Components[j_for].Name,1,4) = varcontrol then
  5.     begin
  6.      if varform.Components[j_For] is TEdit then Tedit(varform.Components[j_For]).Text :=''
  7.      else if varform.Components[j_For] is TComboBox then Begin TComboBox(varform.Components[j_For]).ItemIndex :=-1; TComboBox(varform.Components[j_For]).Text :=''; end
  8.      else if varform.Components[j_For] is TListBox then TListBox(varform.Components[j_For]).ItemIndex :=-1
  9.      else if varform.Components[j_For] is TCheckBox then TCheckBox(varform.Components[j_For]).Checked :=False
  10.      else if varform.Components[j_For] is TRadioButton then TRadioButton(varform.Components[j_For]).Checked :=False
  11.      else if varform.Components[j_For] is TDateTimePicker then TDateTimePicker(varform.Components[j_For]).Date := Date
  12.      else if varform.Components[j_For] is TFloatSpinEdit then TFloatSpinEdit(varform.Components[j_For]).Value := 0
  13.      else if varform.Components[j_For] is TSpinEdit then TSpinEdit(varform.Components[j_For]).Value := 0
  14.      else if varform.Components[j_For] is TMemo then TMemo(varform.Components[j_For]).Clear ;
  15.  
  16.  
  17.     end;
  18.  
  19.    end;
[/code]

سؤالي هو عن كود لأتعرف مثلا على محررات النصوص فقط بدون المرور على كل الأدوات
Title: Re: معرفة أدوات المنودج
Post by: pascal111 on July 31, 2021, 10:42:54 pm
لستُ بارعاً جدّاً في الـ Free Pascal لكنّني أظنّ أنّ سؤالكـ مُتعلّق بالكلمة المِفتاحيّة "is" فابحث عنها في وثائق اللغة المتوفّرة online وإن شاء الله يكون الحل من وراءها ،وعُذراً فالإنترنت لديّ رديءٌ هذه الأيام
Title: Re: معرفة أدوات النموذج
Post by: Zaher on August 01, 2021, 10:37:27 pm
و بعد ان تتعرف عليها ماذا تريد ان تفعل
السطر الاول يعطي المهمة المناسبة لك

Code: Pascal  [Select][+][-]
  1.       for J_FOR := 0 to varform.ComponentCount -1 do
  2.        Begin
  3.            if varform.Components[j_For] is TEdit then
  4.           begin
  5.                 (varform.Components[j_For] as TEdit).Text := '';
  6.           end;
  7.        end;
  8.  
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 01, 2021, 10:38:25 pm
أو اهنيك أخ العيد على اول موضوع لك في القسم العربي
اتمنى ان يكون هناك نشاط أكثر من أجل استمرارية القسم
......................
بخصوص الكود عندي مدة و انا بعيد عن البرمجة الا من خلال الحوارات أو المحادثات في المواقع التواصل ،اخي لكن يبدو الكود معقد ، من وجهة نظري يمكن تحسين الشفرة
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 01, 2021, 10:39:05 pm
اه سبقني الاخ زاهر ههههه
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 03, 2021, 12:28:23 pm
السلام عليكم
أسف على التأخر
و شكرا على المرور والإهتمام
الكود السابق مأخود من دلة تقوم بتفريغ الأدوات الموجودة في الفورم فإذكانت الأداة Edit يقوم بمسح محتواها وإذا كانت  comboboxيقوم يتغيير ItemIndex  إلى  -1  وهكذا

وبإختصار المفيد هذا الكود
Code: Pascal  [Select][+][-]
  1. form1.ComponentCount

يعطي لنا عدد الأدوات الموجودة في الفورم
والكود التالي يمكن أن نتعرف على نوع الأدوات
Code: Pascal  [Select][+][-]
  1. if form1.Components[0] is TEdit then  

ما اريده هو كود يمكن أن أتعرف على عدد لنوع واحد من الأدوات مع إمكانيتي التعامل معه
أي لا أحتاج أن أجلب عدد كل الأدوات الموجودة في الفورم وأبحث عن نوع كل أداة لأتعرف كيف أتعامل معها وشكرا
 
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 03, 2021, 04:12:52 pm
بعد تعديل كود أخ سامر لي يتوافق مع ما تريد

Code: Pascal  [Select][+][-]
  1. Tag := 0 ;
  2. for J_FOR := 0 to varform.ComponentCount -1 do
  3.        Begin
  4.            if varform.Components[j_For] is TEdit then
  5.           begin
  6.             Tag := tag +1   ;
  7.           end;
  8.        end;
  9.  
  10. showmessage (inttostr(tag);
  11.  
تستطيع التعديل على الكود حسب الحاجة واستعمل متغيير بدل
Tag
هذا لاني من الجوال
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 04, 2021, 08:25:07 am
بعد تعديل كود أخ سامر لي يتوافق مع ما تريد

Code: Pascal  [Select][+][-]
  1. Tag := 0 ;
  2. for J_FOR := 0 to varform.ComponentCount -1 do
  3.        Begin
  4.            if varform.Components[j_For] is TEdit then
  5.           begin
  6.             Tag := tag +1   ;
  7.           end;
  8.        end;
  9.  
  10. showmessage (inttostr(tag);
  11.  
تستطيع التعديل على الكود حسب الحاجة واستعمل متغيير بدل
Tag
هذا لاني من الجوال

بارك الله فيك أخي nouzi على المجهود يبدوا حسب إجابتك أنه لا يوجد ما أبحث عنه لأن هذا الكود يعطيني بالفعل عدد الأدوات للنوع الذي أبحث عنه ولكن ما كنت أقصده أن يكون عبارة عن سطر واحد فأستخرج عدد Edit أو عدد combobox أو عدد bitbtn بدون إستعمال For  و if
شكرا مرة ثانية وبارك الله فيك
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 04, 2021, 11:16:44 am
أخ
@Al-Eid
ما فيه مشكلة، لا أعرف أن كان هناك مكتبة أو رمز آخر يؤدي الغرض المطلوب ، لكن من خلال الكود السابق تستطيع كتابة دالة "وظيفة " تقوم بالمطلوب وحسب ما تريد قليل من الجهد سوف تحصل على مرادك الأمر ليس صعب خصوص أن أغلب ما تريده موجود في الرمز السابق 
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 04, 2021, 12:16:20 pm
أخ
@Al-Eid
ما فيه مشكلة، لا أعرف أن كان هناك مكتبة أو رمز آخر يؤدي الغرض المطلوب ، لكن من خلال الكود السابق تستطيع كتابة دالة "وظيفة " تقوم بالمطلوب وحسب ما تريد قليل من الجهد سوف تحصل على مرادك الأمر ليس صعب خصوص أن أغلب ما تريده موجود في الرمز السابق

 
دالة  :-\   ::) نعم فكرة رائعة رغم أني أستخدم الدوال كثير إلا أني لم أفكر يذلك  :D :D  شكرا على التنبية
 
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 04, 2021, 03:38:35 pm
لا تنسى مشاركتنا كود الدالة
Title: Re: معرفة أدوات النموذج
Post by: Zaher on August 07, 2021, 12:13:00 pm
تقدر تستعمل 
varform.ControlCount
varform.Controls

فهي اخف عدد و فقط للعناصر المرئية
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 07, 2021, 12:44:49 pm
تقدر تستعمل 
varform.ControlCount
varform.Controls

فهي اخف عدد و فقط للعناصر المرئية

بارك الله فيك على المعلومة  سوف أجربها لأرى هل أستطيع أن أستعملها في الدوال التي أفكر أن أنشئها
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 11, 2021, 10:20:30 am
السلام عليكم
قمت بإنشاء دوال كل دالة خاصة بأدة معينة أسمائها كالتالي
function FCountEdit(varform: TWinControl): Boolean ;
function FCountEdit2(varform: TWinControl): Boolean ;
function FCountLabel(varform: TWinControl): Boolean ;
function FCountCombobx(varform: TWinControl): Boolean ;
function FCountCombobx2(varform: TWinControl): Boolean ;
function FCountButton(varform: TWinControl): Boolean ;

الفرق بين FCountEdit و FCountEdit2 الأولى جربت معهاComponents والثانية جربت معها ControlCount وكذلك بالنسبة لـ FCountCombobx و FCountCombobx2
يمكن تنزيل ملف المرفق للتجريب  شرح الدالة موجود في FCountEdit وFCountEdit 2 هو نفسه ينطبق على على كل الدوال
ما لاحظته الفرق بين Components و ControlCount  أن الأولى تحضر كل الأدوات الموجودة في الفورم أما الثانية فإنها لا تحتسب الأدوات الموجودة في GroupBox أو Panel أو ....
هذاالتعليق موجه  للخبراء أولا لتصليح أخطائي فلست خبير في البرمجة وشكرا للجميع
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 11, 2021, 04:17:28 pm
قبل تقديم اي ملاحظة ، الاول انشر الكود في أحد المواقع المخصصة إذا كان هذا ممكن لي يتسنى لي مراجعته مراجعته
Title: Re: معرفة أدوات النموذج
Post by: pascal111 on August 12, 2021, 11:08:52 am
قبل تقديم اي ملاحظة ، الاول انشر الكود في أحد المواقع المخصصة إذا كان هذا ممكن لي يتسنى لي مراجعته مراجعته

تقريباً الأخ Al-Eid أدرج ملف الكود في مرفقات البوست (المشاركة)
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 12, 2021, 01:36:32 pm
قبل تقديم اي ملاحظة ، الاول انشر الكود في أحد المواقع المخصصة إذا كان هذا ممكن لي يتسنى لي مراجعته مراجعته
هذا كود الوحدة التي تحتوي على الدوال

Code: Pascal  [Select][+][-]
  1. unit Unit2;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils,Forms,Controls, Graphics, Dialogs, StdCtrls;
  9.  
  10.  var arrNumbercontrol: array of Integer;
  11. function FCountEdit(varform: TWinControl): Boolean ;
  12. function FCountEdit2(varform: TWinControl): Boolean ;
  13. function FCountLabel(varform: TWinControl): Boolean ;
  14. function FCountCombobx(varform: TWinControl): Boolean ;
  15. function FCountCombobx2(varform: TWinControl): Boolean ;
  16. function FCountButton(varform: TWinControl): Boolean ;
  17. implementation
  18.                     // متغير لإستقبال Form
  19. function FCountEdit(varform: TWinControl): Boolean;
  20.   var i :Integer ; // i متغير للحلقة
  21.       ss :TStrings; // متغير للوائح النصية لحفظ رقم الأداة
  22.   begin
  23.  
  24.      ss := TStringList.Create ;
  25.   for i := 0 to varform.ComponentCount-1 do
  26.    Begin
  27.         // هذه الحلقة تقوم بالبحث عن الأدواة edit
  28.        // وسط أدوات الـفورم
  29.    if varform.Components[i] is TEdit then
  30.     Begin
  31.     // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  32.      ss.Add(inttostr(i));
  33.     end
  34.   end;
  35.  
  36.  if ss.Count > 0 then Begin; // إذاكان هناك عددالأسطر أكثر من 0 يعني هناك أداة Edit واحدة على الأقل
  37.  
  38.   // تحديد طول المصفوفة حسب عدد الأدوات Edit
  39.   SetLength(arrNumbercontrol,ss.Count) ;
  40.   for i:= 0 to ss.Count-1 do
  41.   Begin
  42.    arrNumbercontrol[i]:= strtoint(ss.Strings[i]);
  43.    // نضع في خلايا المصفوفة أرقام الترتيبية لأدوات Edit
  44.    end;
  45.    ss.Free;
  46.    Result :=True ;
  47.   end
  48.  else
  49.  Begin
  50.    ss.Free;
  51.    Result :=False;
  52.  end;
  53.  
  54.  
  55.   end;
  56.  
  57. function FCountEdit2(varform: TWinControl): Boolean;
  58. var i :Integer ; // i متغير للحلقة
  59.       ss :TStrings; // متغير للوائح النصية لحفظ رقم الأداة
  60.   begin
  61.  
  62.      ss := TStringList.Create ;
  63.   for i := 0 to varform.ControlCount-1 do
  64.    Begin
  65.         // هذه الحلقة تقوم بالبحث عن الأدواة edit
  66.        // وسط أدوات الـفورم
  67.    if varform.Controls[i] is TEdit then
  68.     Begin
  69.     // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  70.      ss.Add(inttostr(i));
  71.     end
  72.   end;
  73.  
  74.  if ss.Count > 0 then Begin; // إذاكان هناك عددالأسطر أكثر من 0 يعني هناك أداة Edit واحدة على الأقل
  75.  
  76.   // تحديد طول المصفوفة حسب عدد الأدوات Edit
  77.   SetLength(arrNumbercontrol,ss.Count) ;
  78.   for i:= 0 to ss.Count-1 do
  79.   Begin
  80.    arrNumbercontrol[i]:= strtoint(ss.Strings[i]);
  81.    // نضع في خلايا المصفوفة أرقام الترتيبية لأدوات Edit
  82.    end;
  83.    ss.Free;
  84.    Result :=True ;
  85.   end
  86.  else
  87.  Begin
  88.    ss.Free;
  89.    Result :=False;
  90.  end;
  91.  
  92.  
  93.   end;
  94.  
  95. function FCountLabel(varform: TWinControl): Boolean;
  96. var i :Integer ;
  97.     ss :TStrings;
  98. begin
  99.  
  100.    ss := TStringList.Create ;
  101. for i := 0 to varform.ComponentCount-1 do
  102.  Begin
  103.  
  104.  if varform.Components[i] is TLabel then
  105.   Begin
  106.    ss.Add(inttostr(i));
  107.   end
  108. end;
  109.  
  110. if ss.Count > 0 then Begin;
  111.  
  112. SetLength(arrNumbercontrol,ss.Count) ;
  113. for i:= 0 to ss.Count-1 do
  114. Begin
  115.  arrNumbercontrol[i]:= strtoint(ss.Strings[i]);
  116. end;
  117.  ss.Free;
  118.  Result :=True ;
  119. end
  120. else
  121. Begin
  122.  ss.Free;
  123.  Result :=False;
  124. end;
  125.  
  126. end;
  127.  
  128. function FCountCombobx(varform: TWinControl): Boolean;
  129. var i :Integer ;
  130.     ss :TStrings;
  131. begin
  132.  
  133.    ss := TStringList.Create ;
  134. for i := 0 to varform.ComponentCount-1 do
  135.  Begin
  136.  
  137.  if varform.Components[i] is TCombobox then
  138.   Begin
  139.    ss.Add(inttostr(i));
  140.   end
  141. end;
  142.  
  143. if ss.Count > 0 then Begin;
  144.  
  145. SetLength(arrNumbercontrol,ss.Count) ;
  146. for i:= 0 to ss.Count-1 do
  147. Begin
  148.  arrNumbercontrol[i]:= strtoint(ss.Strings[i]);
  149. end;
  150.  ss.Free;
  151.  Result :=True ;
  152. end
  153. else
  154. Begin
  155.  ss.Free;
  156.  Result :=False;
  157. end;
  158.  
  159. end;
  160.  
  161. function FCountCombobx2(varform: TWinControl): Boolean;
  162. var i :Integer ;
  163.     ss :TStrings;
  164. begin
  165.  
  166.    ss := TStringList.Create ;
  167. for i := 0 to varform.ControlCount -1 do
  168.  Begin
  169.  
  170.  if varform.Controls[i] is TCombobox then
  171.   Begin
  172.    ss.Add(inttostr(i));
  173.   end
  174. end;
  175.  
  176. if ss.Count > 0 then Begin;
  177.  
  178. SetLength(arrNumbercontrol,ss.Count) ;
  179. for i:= 0 to ss.Count-1 do
  180. Begin
  181.  arrNumbercontrol[i]:= strtoint(ss.Strings[i]);
  182. end;
  183.  ss.Free;
  184.  Result :=True ;
  185. end
  186. else
  187. Begin
  188.  ss.Free;
  189.  Result :=False;
  190. end;
  191.  
  192. end;
  193.  
  194. function FCountButton(varform: TWinControl): Boolean;
  195. var i :Integer ;
  196.     ss :TStrings;
  197. begin
  198.  
  199.    ss := TStringList.Create ;
  200. for i := 0 to varform.ComponentCount-1 do
  201.  Begin
  202.  
  203.  if varform.Components[i] is TButton then
  204.   Begin
  205.    ss.Add(inttostr(i));
  206.   end
  207. end;
  208.  
  209. if ss.Count > 0 then Begin;
  210.  
  211. SetLength(arrNumbercontrol,ss.Count) ;
  212. for i:= 0 to ss.Count-1 do
  213. Begin
  214.  arrNumbercontrol[i]:= strtoint(ss.Strings[i]);
  215. end;
  216.  ss.Free;
  217.  Result :=True ;
  218. end
  219. else
  220. Begin
  221.  ss.Free;
  222.  Result :=False;
  223. end;
  224.  
  225.  
  226. end;
  227.  
  228.  
  229. end.      
  230.  

هذا كود أزار لمنداة الدوال

Code: Pascal  [Select][+][-]
  1.  
  2. procedure TForm1.Button3Click(Sender: TObject);
  3. var i : integer; // متغير للحلقة
  4. begin
  5.  if FCountEdit(form1) then // إذا أسترجعت الدالة قيمة True يعني وجود أداة  Edit واحدة على الأقل
  6.  Begin
  7.   for i := 0 to high(arrNumbercontrol) do
  8.    // حلقة عدد حلاقتها بعدد edit الموجودة
  9.    Begin
  10.    //   إطهار رقم الترتيبي للاداة في خاصيتها Text
  11.      Showmessage(Tedit(form1.Components[arrNumbercontrol[i]]).Name ) ;
  12.    end
  13.  end;
  14.  
  15. end;
  16.  
  17.  
  18. procedure TForm1.Button4Click(Sender: TObject);
  19. var i : integer;
  20. begin
  21.  if FCountButton(form1) then
  22.  Begin
  23.   for i := 0 to high(arrNumbercontrol) do
  24.    Begin
  25.     Showmessage(Tbutton(form1.Components[arrNumbercontrol[i]]).Caption) ;
  26.    end
  27.  end;
  28. end;
  29.  
  30. procedure TForm1.Button5Click(Sender: TObject);
  31. var i : integer;
  32. begin
  33.  if FCountLabel(form1) then
  34.  Begin
  35.   for i := 0 to high(arrNumbercontrol) do
  36.    Begin
  37.    showmessage(form1.Components[arrNumbercontrol[i]].Name );
  38.    end
  39.  end;
  40. end;
  41.  
  42. procedure TForm1.Button6Click(Sender: TObject);
  43.  
  44.  var i : integer;
  45.  begin
  46.   if FCountCombobx(form1) then
  47.   Begin
  48.    for i := 0 to high(arrNumbercontrol) do
  49.     Begin
  50.     showmessage(form1.Components[arrNumbercontrol[i]].Name );
  51.     end
  52.   end;
  53. end;
  54.  
  55. procedure TForm1.Button8Click(Sender: TObject);
  56.  var i : integer;
  57.  begin
  58.  if FCountEdit2(form1) then
  59.  Begin
  60.   for i := 0 to high(arrNumbercontrol) do
  61.    Begin
  62.  
  63.    Showmessage(Tedit(form1.Controls[arrNumbercontrol[i]]).Name) ;
  64.    end
  65.  end;
  66. end;
  67.  
  68. procedure TForm1.Button9Click(Sender: TObject);
  69.  
  70.  var i : integer;
  71.  begin
  72.   if FCountCombobx2(form1) then
  73.   Begin
  74.    for i := 0 to high(arrNumbercontrol) do
  75.     Begin
  76.     showmessage(form1.Components[arrNumbercontrol[i]].Name );
  77.     end
  78.   end;
  79. end;
  80.                                                
  81.  
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 12, 2021, 04:26:26 pm


Quote

تقريباً الأخ Al-Eid أدرج ملف الكود في مرفقات البوست (المشاركة)


شكرا لك اعرف ذالك ، لكني الان ادير اغلب اعمالي من المحمول
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 12, 2021, 04:32:00 pm
من وجهة نظري هذه الشفرة سيئة ، مزلت قادر على تحسين الكود لا استطيع ان اضيف أكثر لان حاسوبي معطل الان لكن استطيع توجيه بعض النصائح حول اذا ردت ذالك ،وإذا اطلع الاخ زاهر على الكود وقدم النصح ستكون اكبر محضوض في المنتدى اليوم  :D
Title: Re: معرفة أدوات النموذج
Post by: pascal111 on August 12, 2021, 07:55:03 pm


Quote

تقريباً الأخ Al-Eid أدرج ملف الكود في مرفقات البوست (المشاركة)


شكرا لك اعرف ذالك ، لكني الان ادير اغلب اعمالي من المحمول

حسناً! لكـ مُطلق الحُريّة
Title: Re: معرفة أدوات النموذج
Post by: Zaher on August 13, 2021, 12:09:26 am
اختصرت لك الكود

Code: Pascal  [Select][+][-]
  1. function FCountEdit(varform: TWinControl): Boolean;
  2.   var i :Integer ; // i متغير للحلقة
  3.   begin
  4.  
  5.   for i := 0 to varform.ControlCount-1 do
  6.    Begin
  7.         // هذه الحلقة تقوم بالبحث عن الأدواة edit
  8.        // وسط أدوات الـفورم
  9.    if varform.Controls[i] is TEdit then
  10.     Begin
  11.     SetLength(arrNumbercontrol,Length(arrNumbercontrol) + 1) ;
  12.     // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  13.      arrNumbercontrol[High(arrNumbercontrol)] := i;
  14.     end
  15.   end;
  16.    Result :=Length(arrNumbercontrol);
  17.  end;
  18.  
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 13, 2021, 07:41:37 am
اختصرت لك الكود

Code: Pascal  [Select][+][-]
  1. function FCountEdit(varform: TWinControl): Boolean;
  2.   var i :Integer ; // i متغير للحلقة
  3.   begin
  4.  
  5.   for i := 0 to varform.ControlCount-1 do
  6.    Begin
  7.         // هذه الحلقة تقوم بالبحث عن الأدواة edit
  8.        // وسط أدوات الـفورم
  9.    if varform.Controls[i] is TEdit then
  10.     Begin
  11.     SetLength(arrNumbercontrol,Length(arrNumbercontrol) + 1) ;
  12.     // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  13.      arrNumbercontrol[High(arrNumbercontrol)] := i;
  14.     end
  15.   end;
  16.    Result :=Length(arrNumbercontrol);
  17.  end;
  18.  

بارك الله فيك أخي Zaher  ::)
بالنسبة لعملية إرجاع Result أنت أسندت length(arrNumbercontrol) وهذا يمثل عدد صحيح مع العلم أن الدالة مصرح بها على أنها منطقية يعني يجب أن يتغير أيضا نوع الدالة من منطقي إلى صحيح وبارك الله فيك مرة ثانية
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 14, 2021, 01:24:48 am
اختصرت لك الكود

Code: Pascal  [Select][+][-]
  1. function FCountEdit(varform: TWinControl): Boolean;
  2.   var i :Integer ; // i متغير للحلقة
  3.   begin
  4.  
  5.   for i := 0 to varform.ControlCount-1 do
  6.    Begin
  7.         // هذه الحلقة تقوم بالبحث عن الأدواة edit
  8.        // وسط أدوات الـفورم
  9.    if varform.Controls[i] is TEdit then
  10.     Begin
  11.     SetLength(arrNumbercontrol,Length(arrNumbercontrol) + 1) ;
  12.     // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  13.      arrNumbercontrol[High(arrNumbercontrol)] := i;
  14.     end
  15.   end;
  16.    Result :=Length(arrNumbercontrol);
  17.  end;
  18.  
هذا تصوري الكود تقريبا لكن مزال بعض الملاحظات أخ زاهر مثل :
نوع الوظيفة  عدادي وليس منطقي-
اختصار جميع الدوال في دالة واحدة
Title: Re: معرفة أدوات النموذج
Post by: pascal111 on August 14, 2021, 05:35:05 pm
أظن الأخ زاهر إختزل الدوال في دالة واحدة وهذا حل بأسلوب رياضي جيّد.
Title: Re: معرفة أدوات النموذج
Post by: Zaher on August 14, 2021, 05:53:38 pm
ليس بعد اذا اردت كل التوابع ممكن هذه الطريقة

Code: Pascal  [Select][+][-]
  1. function FCountClass(varform: TWinControl; AClass: TControlClass): Boolean;
  2. var
  3.   i: Integer; // i متغير للحلقة
  4. begin
  5.   for i := 0 to varform.ControlCount - 1 do
  6.   begin
  7.     // هذه الحلقة تقوم بالبحث عن الأدواة edit
  8.     // وسط أدوات الـفورم
  9.     if varform.Controls[i] is AClass then
  10.     begin
  11.       SetLength(arrNumbercontrol, Length(arrNumbercontrol) + 1);
  12.       // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  13.       arrNumbercontrol[High(arrNumbercontrol)] := i;
  14.     end;
  15.   end;
  16.   Result := Length(arrNumbercontrol) > 0;
  17. end;
  18.  
  19. FCountClass(self, TEdit);
  20.  
Title: Re: معرفة أدوات النموذج
Post by: pascal111 on August 15, 2021, 12:08:18 pm
جرّبتها ،الدّالة تعمل جيّداً لكنّني لستُ على يقينٍ من طريقتي في إستخدامها بعد.

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
  9.  
  10. type
  11.  
  12.   { TForm1 }
  13.  
  14.   TForm1 = class(TForm)
  15.     Button1: TButton;
  16.     Edit1: TEdit;
  17.     Edit2: TEdit;
  18.     Edit3: TEdit;
  19.     procedure Button1Click(Sender: TObject);
  20.   private
  21.  
  22.   public
  23.  
  24.   end;
  25.  
  26. var
  27.   Form1: TForm1;
  28.   arrNumbercontrol: array of Integer;
  29.  
  30.   function FCountClass(varform: TWinControl; AClass: TControlClass): Boolean;
  31.  
  32. implementation
  33.  
  34. {$R *.lfm}
  35.  
  36.  
  37. function FCountClass(varform: TWinControl; AClass: TControlClass): Boolean;
  38. var
  39.   i: Integer; // i متغير للحلقة
  40. begin
  41.   for i := 0 to varform.ControlCount - 1 do
  42.   begin
  43.     // هذه الحلقة تقوم بالبحث عن الأدواة edit
  44.     // وسط أدوات الـفورم
  45.     if varform.Controls[i] is AClass then
  46.     begin
  47.       SetLength(arrNumbercontrol, Length(arrNumbercontrol) + 1);
  48.       // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  49.       arrNumbercontrol[High(arrNumbercontrol)] := i;
  50.     end;
  51.   end;
  52.   Result := Length(arrNumbercontrol) > 0;
  53. end;
  54.  
  55. { TForm1 }
  56.  
  57. procedure TForm1.Button1Click(Sender: TObject);
  58.  
  59.  
  60. begin
  61.  
  62.  
  63.   if  FCountClass(self,tedit) then
  64.   showmessage(inttostr(High(arrNumbercontrol)+1));
  65.  
  66. end;
  67.  
  68. end.
  69.  
  70.  

Title: Re: معرفة أدوات النموذج
Post by: Zaher on August 15, 2021, 01:47:25 pm
للدقة لا يفترض ان تعمل مصفوفة عامة ترجع فيها معلومات مؤقتة
يعني arrNumbercontrol موقعها خطأ
 ان ترجعها من الدالة نفسها وهو الحل الافضل
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 15, 2021, 11:45:58 pm
هذا تصوري الكود تقريبا لكن مزال بعض الملاحظات أخ زاهر مثل :
نوع الوظيفة  عدادي وليس منطقي-
اختصار جميع الدوال في دالة واحدة

أعتقد لو أختصرنا كل الدوال في دالة واحدة يجب أن يكون هناك إجراء if لمعرفة نوع الأداة وكثير من المصفوفات لتسجل رقم الترتيبي ولذلك من الأفضل أن يبقى كل نوع له دلته الخاص به هذا مجرد رائي يمكن أن تفيدونا أكثر
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 16, 2021, 12:58:09 am
هذا تصوري الكود تقريبا لكن مزال بعض الملاحظات أخ زاهر مثل :
نوع الوظيفة  عدادي وليس منطقي-
اختصار جميع الدوال في دالة واحدة

أعتقد لو أختصرنا كل الدوال في دالة واحدة يجب أن يكون هناك إجراء if لمعرفة نوع الأداة وكثير من المصفوفات لتسجل رقم الترتيبي ولذلك من الأفضل أن يبقى كل نوع له دلته الخاص به هذا مجرد رائي يمكن أن تفيدونا أكثر
لن تحتاج إلى شرط غير الشرط الوحيد الموجود في الدالة الاصلية
يبقى كل شئ مربوط حسب تصورك للحل و تصميمك لي الشفرة 
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 16, 2021, 12:49:12 pm
ليس بعد اذا اردت كل التوابع ممكن هذه الطريقة

Code: Pascal  [Select][+][-]
  1. function FCountClass(varform: TWinControl; AClass: TControlClass): Boolean;
  2. var
  3.   i: Integer; // i متغير للحلقة
  4. begin
  5.   for i := 0 to varform.ControlCount - 1 do
  6.   begin
  7.     // هذه الحلقة تقوم بالبحث عن الأدواة edit
  8.     // وسط أدوات الـفورم
  9.     if varform.Controls[i] is AClass then
  10.     begin
  11.       SetLength(arrNumbercontrol, Length(arrNumbercontrol) + 1);
  12.       // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  13.       arrNumbercontrol[High(arrNumbercontrol)] := i;
  14.     end;
  15.   end;
  16.   Result := Length(arrNumbercontrol) > 0;
  17. end;
  18.  
  19. FCountClass(self, TEdit);
  20.  

بارك الله فيك أخ zaher

هذا تصوري الكود تقريبا لكن مزال بعض الملاحظات أخ زاهر مثل :
نوع الوظيفة  عدادي وليس منطقي-
اختصار جميع الدوال في دالة واحدة

أعتقد لو أختصرنا كل الدوال في دالة واحدة يجب أن يكون هناك إجراء if لمعرفة نوع الأداة وكثير من المصفوفات لتسجل رقم الترتيبي ولذلك من الأفضل أن يبقى كل نوع له دلته الخاص به هذا مجرد رائي يمكن أن تفيدونا أكثر
لن تحتاج إلى شرط غير الشرط الوحيد الموجود في الدالة الاصلية
يبقى كل شئ مربوط حسب تصورك للحل و تصميمك لي الشفرة 
بارك الله فيك اخي nouzi  على التوضيح
Title: Re: معرفة أدوات النموذج
Post by: Al-Eid on August 16, 2021, 01:22:32 pm
للدقة لا يفترض ان تعمل مصفوفة عامة ترجع فيها معلومات مؤقتة
يعني arrNumbercontrol موقعها خطأ
 ان ترجعها من الدالة نفسها وهو الحل الافضل

أنظر لهذا الكود هل تقصد هكذا
Code: Pascal  [Select][+][-]
  1.  
  2. unit Unit2;
  3.  
  4. {$mode objfpc}{$H+}
  5.  
  6. interface
  7.  
  8. uses
  9.   Classes, SysUtils,Forms,Controls, Graphics, Dialogs, StdCtrls;
  10. Type
  11.   TNumbercontrol = array of Integer ;
  12.  
  13.  
  14. function FCountControls(varform: TWinControl; AClass: TControlClass):TNumbercontrol;
  15.  
  16. implementation
  17.  
  18. function FCountControls(varform: TWinControl; AClass: TControlClass): TNumbercontrol;
  19. var
  20.   i: Integer; // i متغير للحلقة
  21. begin
  22.   for i := 0 to varform.ControlCount - 1 do
  23.   begin
  24.     // هذه الحلقة تقوم بالبحث عن الأدواة edit
  25.     // وسط أدوات الـفورم
  26.     if varform.Controls[i] is AClass then
  27.     begin
  28.       SetLength(FCountControls, Length(FCountControls) + 1);
  29.       // عند وجود أداة من نوع Edit يضيف رقم الترتيب للأداة في لوحة النصوص
  30.       FCountControls[High(FCountControls)] := i;
  31.     end;
  32.   end;
  33.  
  34. end;
  35.  
  36. end.
  37.  
  38.  

وهذا كود button

Code: Pascal  [Select][+][-]
  1.  
  2. procedure TForm1.Button1Click(Sender: TObject);
  3.  var i : Integer;
  4.   arry : array of Integer ;
  5.  
  6. begin
  7.   arry := FCountControls(form1,Tedit);
  8.  if Length(arry)>0 then
  9.  Begin
  10.  
  11.   for i := 0 to high(arry) do
  12.    Begin
  13.     Showmessage(Tbutton(form1.Controls[arry[i]]).Caption) ;
  14.    end
  15.  
  16.  end;
  17. end;                                          
  18.  
Title: Re: معرفة أدوات النموذج
Post by: nouzi on August 16, 2021, 04:59:04 pm
العيد
العفو ، لا داعي لشكر كل هنا من أجل التعلم
اعدرني لم استطيع المشاركة في الشفرة لبعض الضروف،  انشاء الله نصائحي في الموضوع  كنت في مواضيعها ومفيدة
Title: Re: معرفة أدوات النموذج
Post by: Zaher on August 16, 2021, 09:28:04 pm
يرجى التخفيف من التشكرات و التبريك و المدح  والاقتصار على الامور المفيدة
على الاقل خفف ال qoute
TinyPortal © 2005-2018