25-11-2023, 06:47 PM
25-11-2023, 09:45 PM
إقتباس :هذه هي المشكلة هذه الشركة لم افهم توجهها ولا تفكيرها
دعك من هذه الفكرة نعم قرات عن كثير من ترفض اقثرحاتهم مع العلم ان هذه ليست ثغرات ليتم تصحيحها انما تحسينات او اخطاء في هندسة و تصميم المكونات.
القت نظرة على الكود و لكن لم استطع تجربه النسخة دالفي ليست نفسها و مثال و حدة D4AVcl.StdCtrls حجمها 371ko اما التي عندي حجمها 341ko فرق 40 كيلو
لحد الان لاتوجد خطة عمل واضحة و لا قامة المكونات او العيوب التي يجب معالجتها
و هل ينبغي ان يكون الحل في تعديل الوحدات الاصلية .
25-11-2023, 10:36 PM
إقتباس :مثال و حدة 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]](https://i.imgur.com/pPurQnN.jpg)
هناك مشكلة في المكون TcomboBox لا يظهر الكتابة الا بعد تمرير الفأرة عليه فقط عندما تكون الخاصية Style له تساوي csOwnerDrawFixed
وعلى كل حال انا توقفت حتى احصل على شاشة اكبر لا تتعبني في معالجة وتتبع الكود
الخطة لازالت هناك مكونات TcomboBox و TlistBox بحاجة الى معالجة زيادة الارتفاع وتوسيط الكتابة
ولازال هناك مكونات بحاجة الى اضافة احداث لها مثل حدث تمرير زر عجلة الفأرة وهو مهم خاصة في مكون TDateTimePicker حتى يتسنى زيادة الايام والشهور والسنين بعجلة الفأرة
ولازال هناك مكون TDateTimePicker بحاجة الى معالجة خاصية الـ Text فهي حتى وان لم تحدد التاريخ يبقى فيها القيمة ( / / ) والخاصية Date حتى وان لم تحدد التاريخ فيها تاريخ قديم شئ مثل 1980/11/1
وايضا مكون SpainEdit بحاجة الى توسيط الكتابة رأسياً وأفقيا حتى TAlignment لليمين او الوسط او اليسار لا يوجد كما يحتاج الى اضافة حدث عجلة الفأرة لزيادة وانقاص قيمته بعجلة الفأرة والمفترض ان يكون تم حل مشكلة التوسيط الرأسي لانه يرث من TCustomEdit والتي تم حل المشكلة بها للمكون Edit والمفترض كل المكونات التي ترث من TCustomEdit لا تحتاج الى معالجتها
وهناك خطاء رسم عندما تستخدم سكين داكن اللون او اسود يظهر بمكون Dbgrid خطوط بيضاء سبق وعالجتها من الكود في حدث الرسم
المكون TPageControl يحتاج الى اضافة خيار رسم الـ Tab ناحية اليمين
وهذا الذي اذكره الان و هناك الكثير يحتاج لاصلاح
اما المكونات الاصلية فتركنا امر وفكرة تعديلها
26-11-2023, 09:29 AM
تم علاج مشكلة المكون EditSpain في المحاذاة الرأسية اما الأفقية فلم تعمل
![[صورة: eaolbKg.jpg]](https://i.imgur.com/eaolbKg.jpg)
ولعلاج المشكلة رفعت الوحدة التي سوف يتم اضافتها للمشروع
وعلى العموم وجدت هناك برمجة غير مفهومة وغير منطقية على سبيل المثال يوجد الاجراء التالي المسؤول عن مكان كتابة النص
هذا الاجراء لاعادة تموضع مكان الكتابة بالمكون وهو السبب في عدم حل مشكلة المكون في كتابة النص بالمكان الصحيح عند حل المشكلة مع ابوه TCustomEdit
والسؤال هو لماذا هذا الاجراء طالما المكون TCustomEdit له كل ما هو مطلوب من اجراءات وخصائص لكتابة النص ...؟
الحل طبعا كان التدخل في السطر
وطبعا لن يعمل المكون بهذه الطريقة لان هناك شئ غير منطقي أخر وهو أخر سطر والذي يجب ان يتم الغاءه
فهذا السطر سوف يعيد اي قيم تغيرها الى القيم الأصلية
والسؤال هو لماذا جعلو هذا السطر هنا اساسا ولماذا اعادة القيم
المهم باتباع الخطوات السابقة سيتم كتابة النص بمكانه الصحيح رأسيا اما افقيا فقد اضفت له
ولكن لم تعمل ولا اعرف لماذا حتى الان حتى اجرب الغاء هذا الاجراء كامل واترك الامر الى الوحدة TCustomEdit حتى يصير الامر منطقيا أكثر
كما توقعت يكفي الغاء الاجراء الغبي SetEditRect كاملا من الوحدة وسوف يعمل كل شئ بشكل طبيعي
![[صورة: Oo01t49.jpg]](https://i.imgur.com/Oo01t49.jpg)
وسوف يتكفل الأب TCustomEdit بعمل كل شئ
اذا حتى الان لدينا سطران برمجيان عند الحاجة لهما يجب ان يكتبهما المستخدم في حدث Greate للنموذج
الاول لتغيير ارتفاع الخلايا
والثاني لوضع النص بالمنتصف للمكون EditSpain
![[صورة: eaolbKg.jpg]](https://i.imgur.com/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]](https://i.imgur.com/Oo01t49.jpg)
وسوف يتكفل الأب TCustomEdit بعمل كل شئ
اذا حتى الان لدينا سطران برمجيان عند الحاجة لهما يجب ان يكتبهما المستخدم في حدث Greate للنموذج
كود :
DBGrid1.DefaultRowHeight:=31;
SpinEdit1.Alignment:=taCenter;الاول لتغيير ارتفاع الخلايا
والثاني لوضع النص بالمنتصف للمكون EditSpain
26-11-2023, 01:52 PM
بما اننا نعمل على نسختين مختلفتين من دالفي سيكون من صعب تبادل الاكواد
ينبغي فحص جيدا خاصة المكون TCustomEdit لانه مورث في كثير من المكونات
ينبغي فحص جيدا خاصة المكون TCustomEdit لانه مورث في كثير من المكونات
26-11-2023, 08:29 PM
الكود التصحيح الرسم العمودي في الجدول الموجود في الخوارزمية DrawCell في الوحدة D4AVcl.DBGrids يمكن و ضعه داخل الخوارزمة WriteText مباشرة لانها مستعملة عدة مرات و الخلايا الجدول في حدث و عناوين الاعمدة في حدث اخر و يحتاج الى التصحيح ..حسب مافهمت
كود :
var h :Integer;
h := ARect.Height div 2 - Canvas.TextHeight(value) div 2;01-12-2023, 12:14 PM
السلام عليكم ورحمة الله
اعتذر عن توقف العمل وهذا لظروف خارجة عن الارادة واوجه مشكلة في معالجة الكود والتدقيق فيه
وجربت عدة ارقام وانواع من النظارات ولكن كلها طالما ليست معدة بطريقة طبية صحيحة لمعالجة الرؤية فدائما تضر اكثر مما تنفع
وجاري حل المشكلة وبعدها ان شاء الله سوف نكمل
![[صورة: YrFjn2l.jpg]](https://i.imgur.com/YrFjn2l.jpg)
اعتذر عن توقف العمل وهذا لظروف خارجة عن الارادة واوجه مشكلة في معالجة الكود والتدقيق فيه
وجربت عدة ارقام وانواع من النظارات ولكن كلها طالما ليست معدة بطريقة طبية صحيحة لمعالجة الرؤية فدائما تضر اكثر مما تنفع
وجاري حل المشكلة وبعدها ان شاء الله سوف نكمل
![[صورة: YrFjn2l.jpg]](https://i.imgur.com/YrFjn2l.jpg)
07-12-2023, 07:47 PM
إقتباس :وجربت عدة ارقام وانواع من النظارات ولكن كلها طالما ليست معدة بطريقة طبية صحيحة لمعالجة الرؤية فدائما تضر اكثر مما تنفع
وجاري حل المشكلة وبعدها ان شاء الله سوف نكمل
انت في حاجة الى نظارة مكبرة او مقربة لتمكنك من التركيز على الاشاء القريبة من دون اجهاد العين ..
08-12-2023, 05:13 PM
اظن انه تم معالجة الملاحظات السابقة حول Edit -كود المرفق- اي النص متعدد الاسطر و مفتاح entry لانه باضافة خاصية multiline يصبح المكون يتعامل بطريقة اخرى غير المعهودة .. الا انه ادراج multiline يقلل ارتجاف الكتابة و ارتجاج النص اثناء الكتابة ..
بالنسبة Combobox فعليا لا يوجد كود لرسم النص عندما يكون المكون ب ستايل csOwnerDrawFixed او csOwnerDrawVariable هذه العملية متروكة للمبرمج.. csOwnerDrawVariable معناه امكانية رسم كل عنصر بارتفاع مختلف هذا يتطلب استعمال الحدث OnMeasureItem للتحديد كل ارتفاع على حدة حسب الحاجة ان لم يتم تحديثه فهو مثل csOwnerDrawFixed يحدد الارتفاع جميع العناصر من خلال ItemHeight
الق نظرة على كود المرفق
بالنسبة ل TDBEdit يعتمد على طريقة مختلفة لاظهار النص هو يعتمد على الحدث Paint لرسم النص على Canvas المكون الكود يبدو قديم جدا على الاقل منذ دالفي 7 عندما كان Edit لا يحتوي خاصية TAlignment لهذا تم اللجوء الى الرسم مباشرة ..لكي تعمل التصحيحات المعمولة على Edit يجب حذف كود الخوارزمية WMPaint في TDBEdit
ملاحظة مهمة فيما يخص الطريقة التي اعتمتها من اجل تصحيح العيوب و التي لا تعتمد على التوريث وانما تعتمد على النسخ الاصلية مع تغيير في اسماء الوحدات... هذه الطريقة سوف تسبب مشاكل اخرى منها تضارب الانواع و الاسماء الرموز و المكونات و لربها هناك بعض المتغيرات العامة المشتركة و التي لاتقبل انشاء نسختين .. اذا من الان عليك التفكير في تغيير اسماء المكونات التي قمت بتعديلها و حذف جميع الرموز و الانواع و المتغيرات العامة و الثوابث و استعمال الاصلية مثال TTextLayout
بالنسبة Combobox فعليا لا يوجد كود لرسم النص عندما يكون المكون ب ستايل csOwnerDrawFixed او csOwnerDrawVariable هذه العملية متروكة للمبرمج.. csOwnerDrawVariable معناه امكانية رسم كل عنصر بارتفاع مختلف هذا يتطلب استعمال الحدث OnMeasureItem للتحديد كل ارتفاع على حدة حسب الحاجة ان لم يتم تحديثه فهو مثل csOwnerDrawFixed يحدد الارتفاع جميع العناصر من خلال ItemHeight
الق نظرة على كود المرفق
بالنسبة ل TDBEdit يعتمد على طريقة مختلفة لاظهار النص هو يعتمد على الحدث Paint لرسم النص على Canvas المكون الكود يبدو قديم جدا على الاقل منذ دالفي 7 عندما كان Edit لا يحتوي خاصية TAlignment لهذا تم اللجوء الى الرسم مباشرة ..لكي تعمل التصحيحات المعمولة على Edit يجب حذف كود الخوارزمية WMPaint في TDBEdit
ملاحظة مهمة فيما يخص الطريقة التي اعتمتها من اجل تصحيح العيوب و التي لا تعتمد على التوريث وانما تعتمد على النسخ الاصلية مع تغيير في اسماء الوحدات... هذه الطريقة سوف تسبب مشاكل اخرى منها تضارب الانواع و الاسماء الرموز و المكونات و لربها هناك بعض المتغيرات العامة المشتركة و التي لاتقبل انشاء نسختين .. اذا من الان عليك التفكير في تغيير اسماء المكونات التي قمت بتعديلها و حذف جميع الرموز و الانواع و المتغيرات العامة و الثوابث و استعمال الاصلية مثال TTextLayout