المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كتابة عنوان بسطرين في DBgrid


alili mostafa
06-04-2010, 09:03 PM
هل بالإمكان كتابة عنوان بسطرين في DBgrid
لقد جربت الكود التالي لكنه لم ينجح
dbgrid1.columns[0].title.caption:='poids en'+#13+#10+'Kg'

kachwahed
06-04-2010, 09:25 PM
السلام عليكم ورحمة الله
الأخ alili mostafa أهلا بك!
أعددت لك هذا المثال:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls;

type
//هنا للتعديل على المكون TDBGrid الأصلي
TDBGrid = class(DBGrids.TDBGrid)
private
FTitleHeight: Integer;
FTitleFlat: Boolean; // bonus property
procedure SetTitleHeight(Value: Integer);
procedure SetTitleFlat(Value: Boolean);
protected
public
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
published
constructor Create(AOwner: TComponent); override;
property TitleHeight: Integer read FTitleHeight write SetTitleHeight;
property TitleFlat: Boolean read FTitleFlat write SetTitleFlat;
end;

TForm1 = class(TForm)
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

{ TDBGrid }

constructor TDBGrid.Create(AOwner: TComponent);
begin
Inherited;
FTitleHeight := 32;
end;

procedure TDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var
S: String;
C: TColumn;
F: Integer;
begin
F := 0;
RowHeights[0] := FTitleHeight;
if (ARow = 0) and ((ACol > 0) or not (dgIndicator in Options)) and
(ColCount > 0) then
begin
if not FTitleFlat then
begin
Inherited;
InflateRect(ARect, -1, -1);
end;
C := Columns[ACol - Integer(dgIndicator in Options)];
S := C.Title.Caption;
Canvas.Font := C.Font;
Canvas.FillRect(ARect);
case C.Title.Alignment of
taLeftJustify: F := DT_LEFT;
taCenter: F:= DT_CENTER;
taRightJustify: F := DT_RIGHT;
end;
F := F + DT_WORDBREAK;
InflateRect(ARect, -1, -1);
DrawText(Canvas.Handle, PChar(S), Length(S), ARect, F);
end
else
Inherited;
end;

procedure TDBGrid.SetTitleHeight(Value: Integer);
begin
FTitleHeight := Value;
RowHeights[0] := Value;
end;

procedure TDBGrid.SetTitleFlat(Value: Boolean);
begin
FTitleFlat := Value;
Invalidate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid1.Columns[1].Title.Caption := 'First Line'+#13#10+'Second Line';
end;

end.

مثال أبسط:
type
TAccessDBGrid = class(TDBGrid);

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
S1, S2: String;
begin
with TAccessDBGrid(DBGrid1) do
begin
// Increase title height
RowHeights[0] := 32;

Canvas.Brush.Style := bsClear;

// Column Titles
case Column.Index of
0: begin
Column.Title.Caption := '';
S1 := 'Row 1';
S2 := 'Row 2';
end;
1: begin
Column.Title.Caption := '';
S1 := 'Row 1';
S2 := 'Row 2';
end;
end;
// write title:
Canvas.TextOut(Rect.Left+2, 2, S1);
Canvas.TextOut(Rect.Left+2, 16, S2);
end;
end;

استخدم مكون TSMDBGrid (http://www.delphi4arab.com/forum/showthread.php?t=2787)
مجاني ومفتوح المصدر ويحتوي هذه الخاصية أيضا.
بالتوفيق.

alili mostafa
07-04-2010, 10:18 AM
شكرا جزيلا
حل المشكل