القيت نظرة على الكود قمت بعض المحاولات ...
الكود التالي يعمل لاظهار النص في منتصف الخانات عموديا و لكن يحتاج الى كثير من التنقيح لانه كما يقال الشيطان في التفاصيل
الكود يعمل و لكن لا ياخذ بعين الاعتبار نمط font لكل عمود اذا تم تحدده بشكل مستقل لكل عمود..
تعديل كود الدالة DrawCell
![[صورة: bd.png]](https://i.ibb.co/Mp8jPpv/bd.png)
بالنسبة Edit
يمكن استعمال EM_SETRECT للتحديد مساحة العمل المتاحة و هذا يتطلت انشاء المكون بخاصية
mulitilines
![[صورة: bd.png]](https://i.ibb.co/Zh88MH7/bd.png)
يجب التنبيه انه الكود على النحو Canvas.Font.Height احيانا لايعمل اذا لم تكن font فعليا مستعملة في Canvas
الكود التالي يعمل لاظهار النص في منتصف الخانات عموديا و لكن يحتاج الى كثير من التنقيح لانه كما يقال الشيطان في التفاصيل
الكود يعمل و لكن لا ياخذ بعين الاعتبار نمط font لكل عمود اذا تم تحدده بشكل مستقل لكل عمود..
تعديل كود الدالة DrawCell
كود :
procedure TNewDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TGridDrawState);
var
H:integer;
begin
H := (DefaultRowHeight - Abs(Canvas.Font.Height)) div 2;
Canvas.MoveTo(ARect.Left + 2, ARect.Top + H -3);
SetTextAlign(Canvas.Handle, TA_UPDATECP);
inherited;
SetTextAlign(Canvas.Handle, TA_NOUPDATECP);
end;![[صورة: bd.png]](https://i.ibb.co/Mp8jPpv/bd.png)
بالنسبة Edit
يمكن استعمال EM_SETRECT للتحديد مساحة العمل المتاحة و هذا يتطلت انشاء المكون بخاصية
mulitilines
كود :
TEdit2 = class(Vcl.StdCtrls.TEdit)
protected
procedure UpdateClientRect();
procedure CreateParams(var params:TCreateParams); override;
procedure CreateWnd(); override;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
end;
implementation
{ TEdit }
procedure TEdit2.CreateParams(var params: TCreateParams);
begin
inherited;
Params.Style := Params.Style
or ES_MULTILINE;
end;
procedure TEdit2.CreateWnd;
begin
inherited;
UpdateClientRect;
end;
procedure TEdit2.WMSize(var Message: TWMSize);
begin
inherited;
UpdateClientRect();
end;
procedure TEdit2.UpdateClientRect;
var
R: TRect;
H, dlt:integer;
begin
R := ClientRect;
H := Abs(Font.Height) * 120 div 100;
dlt := (R.Height - H) div 2;
R.Top := R.Top + dlt;
R.Height := H;
Perform(EM_SETRECT, 0, Longint(@R));
end;![[صورة: bd.png]](https://i.ibb.co/Zh88MH7/bd.png)
يجب التنبيه انه الكود على النحو Canvas.Font.Height احيانا لايعمل اذا لم تكن font فعليا مستعملة في Canvas


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)