التفاف النص
#1
السلام عليكم.
هل يوجد طريقة لجعل خلايا dbgrid تظهر النص كاملا على أكثر من سطر في الخلية الواحدة. يعني هل يوجد خاصية التفاف النص في dbgrid
الرد
#2
وعليكم السلام
هي تسمى multiline  اي تعدد الاسطر
جرب هذا
كود :
procedure TForm4.Grid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);  begin Grid1.Canvas.TextRect(Rect, Rect.Left+1, Rect.Top+1, WrapText(Grid1.Cells[ACol,ARow], 40)); end;


هذا مثال أخر

كود :
type   TForm1 = class(TForm)     StringGrid1: TStringGrid;     procedure FormCreate(Sender: TObject);     procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;       Rect: TRect; State: TGridDrawState);   private     procedure FillWithRandomText(AGrid: TStringGrid);     procedure UpdateRowHeights(AGrid: TStringGrid);   end; procedure TForm1.FillWithRandomText(AGrid: TStringGrid); const   S = 'This is a sample'#13#10'text that contains'#13#10'multiple lines.'; var   X: Integer;   Y: Integer; begin   for X := AGrid.FixedCols to AGrid.ColCount - 1 do     for Y := AGrid.FixedRows to AGrid.RowCount - 1 do       AGrid.Cells[X, Y] := Copy(S, 1, 8 + Random(Length(S) - 8));   UpdateRowHeights(AGrid); end; procedure TForm1.FormCreate(Sender: TObject); begin   FillWithRandomText(StringGrid1); end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;   Rect: TRect; State: TGridDrawState); begin   with TStringGrid(Sender) do     if Pos(#13#10, Cells[ACol, ARow]) > 0 then     begin       Canvas.FillRect(Rect);       Inc(Rect.Left, 2);       Inc(Rect.Top, 2);       DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -1, Rect,         DT_NOPREFIX or DT_WORDBREAK);     end; end; procedure TForm1.UpdateRowHeights(AGrid: TStringGrid); var   Y: Integer;   MaxHeight: Integer;   X: Integer;   R: TRect;   TxtHeight: Integer; begin   for Y := AGrid.FixedRows to AGrid.RowCount - 1 do   begin     MaxHeight := AGrid.DefaultRowHeight - 4;     for X := AGrid.FixedCols to AGrid.ColCount - 1 do     begin       R := Rect(0, 0, AGrid.ColWidths[X] - 4, 0);       TxtHeight := DrawText(AGrid.Canvas.Handle, PChar(AGrid.Cells[X, Y]), -1,         R, DT_WORDBREAK or DT_CALCRECT);       if TxtHeight > MaxHeight then         MaxHeight := TxtHeight;     end;     AGrid.RowHeights[Y] := MaxHeight + 4;   end; end;

[صورة: phXGU.png]

كود :
var   R: TRect; begin   NLDStringGrid1.Columns.Add;   NLDStringGrid1.Columns.Add;   NLDStringGrid1.Cells[1, 1] := 'Sample test'#13#10'Second line';   NLDStringGrid1.Columns[1].MultiLine := True;   NLDStringGrid1.AutoRowHeights := True;   SetRect(R, 2, 2, 3, 3);   NLDStringGrid1.MergeCells(TGridRect(R), True, True);   NLDStringGrid1.ColWidths[2] := 40;   NLDStringGrid1.Cells[2, 2] := 'Sample test'#13#10'Second line'; end;


[صورة: fx6eV.png]


هنا مثال اخر

كود :
procedure DrawSGCell(Sender : TObject; C, R : integer; Rect : TRect;           Style : TFontStyles; Wrap : boolean; Just : TAlignment;           CanEdit : boolean);   { draws formatted contents in string grid cell at col C, row R;     Style is a set of fsBold, fsItalic, fsUnderline and fsStrikeOut;     Wrap invokes word wrap for the cell's text; Just is taLeftJustify,     taRightJustify or taCenter; if CanEdit false, cell will be given     the background color of fixed cells; call this routine from     grid's DrawCell event } var   S        : string;   DrawRect : TRect; begin   with (Sender as tStringGrid), Canvas do begin     { erase earlier contents from default drawing }     if (R >= FixedRows) and (C >= FixedCols) and CanEdit then       Brush.Color:= Color     else       Brush.Color:= FixedColor;     FillRect(Rect);     { get cell contents }     S:= Cells[C, R];     if length(S) > 0 then begin       case Just of         taLeftJustify  : S:= ' ' + S;         taRightJustify : S:= S + ' ';         end;       { set font style }       Font.Style:= Style;       { copy of cell rectangle for text sizing }       DrawRect:= Rect;       if Wrap then begin         { get size of text rectangle in DrawRect, with word wrap }         DrawText(Handle, PChar(S), length(S), DrawRect,           dt_calcrect or dt_wordbreak or dt_center);         if (DrawRect.Bottom - DrawRect.Top) > RowHeights[R] then begin           { cell word-wraps; increase row height }           RowHeights[R]:= DrawRect.Bottom - DrawRect.Top;           SetGridHeight(Sender as tStringGrid);           end         else begin           { cell doesn't word-wrap }           DrawRect.Right:= Rect.Right;           FillRect(DrawRect);           case Just of             taLeftJustify  : DrawText(Handle, PChar(S), length(S), DrawRect,                               dt_wordbreak or dt_left);             taCenter      : DrawText(Handle, PChar(S), length(S), DrawRect,                               dt_wordbreak or dt_center);             taRightJustify : DrawText(Handle, PChar(S), length(S), DrawRect,                               dt_wordbreak or dt_right);             end;           end         end       else         { no word wrap }         case Just of           taLeftJustify  : DrawText(Handle, PChar(S), length(S), DrawRect,                             dt_singleline or dt_vcenter or dt_left);           taCenter      : DrawText(Handle, PChar(S), length(S), DrawRect,                             dt_singleline or dt_vcenter or dt_center);           taRightJustify : DrawText(Handle, PChar(S), length(S), DrawRect,                             dt_singleline or dt_vcenter or dt_right);           end;       { restore no font styles }       Font.Style:= [];       end;     end; end;
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 5 users say قال شكرا ل Delphi4Us على المشاركة المفيدة
  • samnaj00, wadoud, h-farid, لؤي, أبو معاذ
الرد


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


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