delphi4arab منتديات دلفي للعرب
استئصال وعلاج مرض وراثي - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : مصادر دلفي مفتوحة تعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=14)
+--- الموضوع : استئصال وعلاج مرض وراثي (/showthread.php?tid=12450)

الصفحات: 1 2 3


RE: استئصال وعلاج مرض وراثي - Delphi4Us - 25-11-2023

ملاحظة على السريع

كود :
RegisterComponents('Samples', [TComponent1]);

هذا المكون غير مهم فقط كان لتجربة الاحداث .


RE: استئصال وعلاج مرض وراثي - Ndagor - 25-11-2023

إقتباس :هذه هي المشكلة هذه الشركة لم افهم توجهها ولا تفكيرها

دعك من هذه الفكرة نعم قرات عن كثير من ترفض اقثرحاتهم مع العلم ان  هذه ليست ثغرات ليتم تصحيحها انما تحسينات او اخطاء في هندسة و تصميم المكونات.

القت نظرة على الكود و لكن لم استطع تجربه النسخة دالفي ليست نفسها و مثال و حدة D4AVcl.StdCtrls حجمها 371ko اما التي عندي حجمها 341ko  فرق 40 كيلو

لحد الان لاتوجد خطة عمل واضحة و لا قامة المكونات او العيوب التي يجب معالجتها
و هل ينبغي ان يكون الحل في تعديل الوحدات الاصلية .


RE: استئصال وعلاج مرض وراثي - Delphi4Us - 25-11-2023

إقتباس :مثال و حدة D4AVcl.StdCtrls حجمها 371ko اما التي عندي حجمها 341ko  فرق 40 كيلو
 
ربما بسبب اختلاف نسخ دلفي فانا اخدت النسخة من دلفي 11.3 ربما بسبب زيادة التعليقات والتلميحات حول الكود مثل

كود :
/// <summary>     ///   Specifies the number of cells displayed in each picker column when the popup is visible.     /// </summary>



إقتباس :لحد الان لاتوجد خطة عمل واضحة و لا قامة المكونات او العيوب التي يجب معالجتها

حتى الان تم حل مشكلة عدم القدرة على زيادة ارتفاع الخلايا في DBGrid

كود :
DBGrid1.DefaultRowHeight:=51;


وتم حل مشكلة عدم توسيط الكتابة في الخلية عند زيادة الاتفاع
وتم حل مشكلة عدم توسيط الكتابة في المكون Tedit عند زيادة الارتفاع

[صورة: pPurQnN.jpg]

هناك مشكلة في المكون  TcomboBox لا يظهر الكتابة الا بعد تمرير الفأرة عليه فقط عندما تكون الخاصية Style له تساوي csOwnerDrawFixed

وعلى كل حال انا توقفت حتى احصل على شاشة اكبر لا تتعبني في معالجة وتتبع الكود

الخطة لازالت هناك مكونات TcomboBox و TlistBox بحاجة الى معالجة زيادة الارتفاع وتوسيط الكتابة
ولازال هناك مكونات بحاجة الى اضافة احداث لها مثل حدث تمرير زر عجلة الفأرة وهو مهم خاصة في مكون  TDateTimePicker حتى يتسنى زيادة الايام والشهور والسنين بعجلة الفأرة
ولازال هناك مكون TDateTimePicker بحاجة الى معالجة خاصية الـ Text فهي حتى وان لم تحدد التاريخ يبقى فيها القيمة ( /  / ) والخاصية Date حتى وان لم تحدد التاريخ فيها تاريخ قديم شئ مثل 1980/11/1
وايضا مكون SpainEdit بحاجة الى توسيط الكتابة رأسياً وأفقيا حتى TAlignment لليمين او الوسط او اليسار لا يوجد كما يحتاج الى اضافة حدث عجلة الفأرة لزيادة وانقاص قيمته بعجلة الفأرة والمفترض ان يكون تم حل مشكلة التوسيط الرأسي لانه يرث من TCustomEdit والتي تم حل المشكلة بها للمكون Edit والمفترض كل المكونات التي ترث من TCustomEdit لا تحتاج الى معالجتها 
وهناك خطاء رسم عندما تستخدم سكين داكن اللون او اسود يظهر بمكون Dbgrid خطوط بيضاء سبق وعالجتها من الكود في حدث الرسم
المكون TPageControl يحتاج الى اضافة خيار رسم الـ Tab ناحية اليمين
وهذا الذي اذكره الان و هناك الكثير يحتاج لاصلاح

اما المكونات الاصلية فتركنا امر وفكرة تعديلها


RE: استئصال وعلاج مرض وراثي - Delphi4Us - 26-11-2023

تم علاج مشكلة المكون EditSpain في المحاذاة الرأسية اما الأفقية فلم تعمل


[صورة: eaolbKg.jpg]

ولعلاج المشكلة رفعت الوحدة التي سوف يتم اضافتها للمشروع

وعلى العموم وجدت هناك برمجة غير مفهومة وغير منطقية على سبيل المثال يوجد الاجراء التالي المسؤول عن مكان كتابة النص

كود :
procedure TSpinEdit.SetEditRect; var   Loc: TRect; begin   SendMessage(Handle, EM_GETRECT, 0, IntPtr(@Loc));   Loc.Bottom := ClientHeight + 1;  {+1 is workaround for windows paint bug}   Loc.Right := ClientWidth - FButton.Width - 2; // Loc.Top := 0;   if  Alignment=taLeftJustify then   Loc.Left := 0;   SendMessage(Handle, EM_SETRECTNP, 0, IntPtr(@Loc));   SendMessage(Handle, EM_GETRECT, 0, IntPtr(@Loc));  {debug} end;


هذا الاجراء لاعادة تموضع مكان الكتابة بالمكون وهو السبب في عدم حل مشكلة المكون في كتابة النص بالمكان الصحيح عند حل المشكلة مع ابوه TCustomEdit 
والسؤال هو لماذا هذا الاجراء طالما المكون TCustomEdit له كل ما هو مطلوب من اجراءات وخصائص لكتابة النص ...؟

الحل طبعا كان التدخل في السطر

كود :
// Loc.Top := 0;

وطبعا لن يعمل المكون بهذه الطريقة لان هناك شئ غير منطقي أخر وهو أخر سطر والذي يجب ان يتم الغاءه

كود :
SendMessage(Handle, EM_GETRECT, 0, IntPtr(@Loc));

فهذا السطر سوف يعيد اي قيم تغيرها الى القيم الأصلية
والسؤال هو لماذا جعلو هذا السطر هنا اساسا ولماذا اعادة القيم

المهم باتباع الخطوات السابقة سيتم كتابة النص بمكانه الصحيح رأسيا اما افقيا فقد اضفت له

كود :
if  Alignment=taLeftJustify then   Loc.Left := 0;   if  Alignment=taCenter then   Loc.Left :=  Loc.Right div 2;   if  Alignment=taRightJustify then   Loc.Left := Loc.Right;

ولكن لم تعمل ولا اعرف لماذا حتى الان حتى اجرب الغاء هذا الاجراء كامل واترك الامر الى الوحدة  TCustomEdit حتى يصير الامر منطقيا أكثر

كما توقعت يكفي الغاء الاجراء الغبي  SetEditRect كاملا من الوحدة وسوف يعمل كل شئ بشكل طبيعي

[صورة: Oo01t49.jpg]

وسوف يتكفل الأب  TCustomEdit  بعمل كل شئ


اذا حتى الان لدينا سطران برمجيان عند الحاجة لهما يجب ان يكتبهما المستخدم في حدث Greate للنموذج

كود :
  DBGrid1.DefaultRowHeight:=31;   SpinEdit1.Alignment:=taCenter;

الاول لتغيير ارتفاع الخلايا
والثاني لوضع النص بالمنتصف للمكون EditSpain


RE: استئصال وعلاج مرض وراثي - Ndagor - 26-11-2023

بما اننا نعمل على نسختين مختلفتين من دالفي سيكون من صعب تبادل الاكواد
ينبغي فحص جيدا خاصة المكون TCustomEdit  لانه مورث في كثير من المكونات


RE: استئصال وعلاج مرض وراثي - Ndagor - 26-11-2023

الكود التصحيح الرسم العمودي في الجدول  الموجود في الخوارزمية DrawCell  في الوحدة D4AVcl.DBGrids يمكن و ضعه داخل الخوارزمة WriteText  مباشرة لانها مستعملة عدة مرات و الخلايا الجدول في حدث و عناوين الاعمدة في حدث اخر و يحتاج الى التصحيح ..حسب مافهمت 

كود :
            var h :Integer;             h :=  ARect.Height div 2 - Canvas.TextHeight(value) div 2;



RE: استئصال وعلاج مرض وراثي - Delphi4Us - 01-12-2023

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

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

[صورة: YrFjn2l.jpg]


RE: استئصال وعلاج مرض وراثي - Ndagor - 07-12-2023

إقتباس :وجربت عدة ارقام وانواع من النظارات ولكن كلها طالما ليست معدة بطريقة طبية صحيحة لمعالجة الرؤية فدائما تضر اكثر مما تنفع
وجاري حل المشكلة وبعدها ان شاء الله سوف نكمل

انت في حاجة الى نظارة مكبرة او مقربة لتمكنك من  التركيز على الاشاء القريبة من دون اجهاد العين ..


RE: استئصال وعلاج مرض وراثي - Ndagor - 08-12-2023

اظن انه تم معالجة الملاحظات السابقة حول Edit  -كود المرفق- اي النص متعدد الاسطر و مفتاح entry لانه باضافة خاصية multiline يصبح المكون يتعامل بطريقة اخرى غير المعهودة .. الا انه ادراج multiline  يقلل ارتجاف الكتابة و ارتجاج النص اثناء الكتابة ..

بالنسبة Combobox فعليا لا يوجد كود لرسم النص عندما يكون المكون ب ستايل csOwnerDrawFixed  او csOwnerDrawVariable هذه العملية متروكة للمبرمج.. csOwnerDrawVariable  معناه امكانية رسم كل عنصر بارتفاع مختلف هذا يتطلب استعمال الحدث OnMeasureItem للتحديد كل ارتفاع على حدة حسب الحاجة  ان لم يتم تحديثه فهو مثل csOwnerDrawFixed  يحدد الارتفاع جميع العناصر من خلال ItemHeight
الق نظرة على كود المرفق

بالنسبة ل TDBEdit  يعتمد على طريقة مختلفة لاظهار النص هو يعتمد على الحدث Paint لرسم النص على Canvas المكون الكود يبدو قديم جدا على الاقل منذ دالفي 7 عندما كان Edit لا يحتوي خاصية TAlignment  لهذا تم اللجوء الى الرسم مباشرة ..لكي تعمل التصحيحات المعمولة على Edit يجب حذف كود الخوارزمية  WMPaint  في TDBEdit 

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