استئصال وعلاج مرض وراثي
#12
اذا اردت ان تشتغل بسرعة ينبغي تفادي تثبيت المكونات في كل مرة  تقوم بتحديثات دع هذه العملية عندما يصبح المكون جاهز... 
الفكرة بسيطة ..بدل اعطاء المكون الجديد اسم اخر يجب الاحتفاظ بنفس الاسم اي TDBGrid ثم ضع اسم الوحدة unit التي تحتويه اي NewDBGrid  في اخر ال uses  في ملف المشروع الذي تعمل عليه
في هذه الحالة سيتم استعمال المكون الجديد على كل DBGrid التي على الفورم
التحديثات تظهر عند تشغيل ..

كود :
unit Unit1; interface uses   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls, Data.Win.ADODB,   Vcl.ExtCtrls,   Vcl.Grids, Vcl.DBGrids,  Vcl.DBCtrls,  NewDBGrid; type

لوحدة...

كود :
unit NewDBGrid; interface uses   System.SysUtils,Winapi.Windows, System.Classes,Graphics, Vcl.Controls, Vcl.Grids, Vcl.DBGrids; type TMyDBGrid = class(TDBGrid); type   TDBGrid = class(Vcl.DBGrids.TDBGrid)   private     FDefaultRowHeight:Integer;   protected     procedure SetDefaultRowHeight(const Value: Integer);     procedure Paint; override;     procedure DrawCell(ACol, ARow: Longint; ARect: TRect;  AState: TGridDrawState); override;     procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;       Column: TColumn; State: TGridDrawState); override;   public     constructor Create(AOwner: TComponent); override;   published     property DefaultRowHeight: Integer read FDefaultRowHeight write SetDefaultRowHeight default 21;   end; implementation { TNewDBGrid } function GetFontHeight(AFont:TFont):integer; var   DC: HDC;   oldFont: HFont;   Metrics: TTextMetric; begin   DC := GetDC(0);   try     oldFont := SelectObject(DC, AFont.Handle);     GetTextMetrics(DC, Metrics);     SelectObject(DC, oldFont);     Result := Metrics.tmHeight;   finally     ReleaseDC(0, DC);   end; end; constructor TDBGrid.Create(AOwner: TComponent); begin   inherited;   FDefaultRowHeight := 21;   TMyDBGrid(self).DefaultRowHeight := 21; end; procedure TDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;   AState: TGridDrawState); var   H:integer; begin   H := (DefaultRowHeight - Abs(GetFontHeight(Font))) div 2;   Canvas.MoveTo(ARect.Left + 2, ARect.Top  + H -3);   SetTextAlign(Canvas.Handle, TA_UPDATECP);   inherited;   SetTextAlign(Canvas.Handle, TA_NOUPDATECP); // DefaultDrawDataCell(ARect, Column.Field, State); end; procedure TDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;   Column: TColumn; State: TGridDrawState);   var   H:integer; begin   H := (DefaultRowHeight - Abs(GetFontHeight(Font))) div 2;   Canvas.MoveTo(Rect.Left + 2, Rect.Top  + H - 3 );   SetTextAlign(Canvas.Handle, TA_UPDATECP);   inherited;   SetTextAlign(Canvas.Handle, TA_NOUPDATECP); //  DefaultDrawDataCell(Rect, Column.Field, State); end; procedure TDBGrid.Paint; begin   inherited;   if TMyDBGrid(self).DefaultRowHeight <> FDefaultRowHeight then   TMyDBGrid(self).DefaultRowHeight := FDefaultRowHeight; end; procedure TDBGrid.SetDefaultRowHeight(const Value: Integer); begin   if FDefaultRowHeight <> Value then begin     FDefaultRowHeight := Value;     TMyDBGrid(self).DefaultRowHeight := FDefaultRowHeight;   end; end; end.

بالنسبة لل TEdit لاحظت انت حذفت inherited الذي كان في الدالة WMSize يجب ارجاعه لان هذه  دالة message و تعمل نوعا ما مثل الدلة مورثة  virtuel لهذا ينغي عدم نسيان inherited  لاعادة ارسال الى ancestor الذي يتعامل مع هذه الرسالة ...

انشاء TEdit بخاصية  multilines قد يصبح يقبل النص متعدد الاسطر و يقبل الضغط على ال entry لانشاء سطر جديد ...اذا يجب اخذ هذ الامور بعين الاعتبار لمعالجتها  فيما بعد..

اظن انه  ابقاء DefaultRowHeight بنفس الاسم الاصلي و هي ليس نفس ال property هذا تظليل و هي لا تقوم بنفس العمل  لان DBGrid محتواه متعلق بقاعدة البيانات اي عدد الاسطر و ليس باي Data  يحتويها مثل TStringGrid  و الذي يمكن التحكم بارتفاع كل سطر على حدة

إقتباس :الاخ  Ndagor وضعه عند التجربة وبازالته يمكن وضع النص بالمنتصف تماما ويجب ازالة الرقم 3 حتى من اجراء اعادة رسم العناوين ايضا

كما سبق و ان قلت الكود تجريبي و يحتاج الى مراجة و اختبار و كما قلت كل عمود يمكن ان يستعمل font مستقل هذا يحتاج الى ظبط ايضا
[-] كل من 2 users say قال شكرا ل Ndagor على المشاركة المفيدة
  • kobayashi maru, Delphi4Us
الرد


الردود في هذا الموضوع
استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 16-11-2023, 06:40 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 17-11-2023, 10:56 AM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 17-11-2023, 04:04 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 17-11-2023, 08:24 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 17-11-2023, 10:45 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 18-11-2023, 09:35 AM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 18-11-2023, 12:14 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 18-11-2023, 03:31 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 18-11-2023, 07:13 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 18-11-2023, 09:32 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 19-11-2023, 10:22 AM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 19-11-2023, 01:22 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 22-11-2023, 05:25 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 22-11-2023, 08:37 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 24-11-2023, 03:05 PM
RE: استئصال وعلاج مرض وراثي - بواسطة DAMOCLES - 24-11-2023, 04:30 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 24-11-2023, 07:08 PM
RE: استئصال وعلاج مرض وراثي - بواسطة DAMOCLES - 24-11-2023, 08:33 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 25-11-2023, 06:47 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 25-11-2023, 09:45 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 25-11-2023, 10:36 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 26-11-2023, 09:29 AM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 26-11-2023, 01:52 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 26-11-2023, 08:29 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Delphi4Us - 01-12-2023, 12:14 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 07-12-2023, 07:47 PM
RE: استئصال وعلاج مرض وراثي - بواسطة Ndagor - 08-12-2023, 05:13 PM

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


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