Объединение ячеек в шапке таблицы TStringGrid
Запись от Arigato размещена 21.06.2016 в 09:33
Показов 18201
Комментарии 11
Размещено в Delphi
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 11
Комментарии
-
Запись от Avazart размещена 21.06.2016 в 14:01 -
Запись от SatanaXIII размещена 21.06.2016 в 14:42 -
Запись от Arigato размещена 21.06.2016 в 22:59 -
Запись от Avazart размещена 22.06.2016 в 17:09 -
Запись от Arigato размещена 22.06.2016 в 23:03 -
Запись от Avazart размещена 23.06.2016 в 15:55 -
Это у меня такой стиль в системе выставлен. Но на таблицу оно никак не влияет: https://yadi.sk/i/UZeeApB_skV7G
Запись от Arigato размещена 24.06.2016 в 01:12 -
Запись от Avazart размещена 25.06.2016 в 13:09 -
Запись от Arigato размещена 25.06.2016 в 19:09 -
а почему бы не объединить ячейки визуально путем перекрытия метода отрисовки.
вот набросал код с созданием наследника таблицы в пределах проекта.
происходит визуальное объединение ячеек с возможностью изменения ширины столбца, входящего в диапазон.
единственный небольшой глюк вылазит, когда стиль таблицы равен gdsClassic.
Кликните здесь для просмотра всего текстаDelphi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, Vcl.ExtCtrls; type // наследник таблицы TStringGrid = class(Vcl.Grids.TStringGrid) protected procedure DrawCell(ACol: Integer; ARow: Integer; ARect: TRect; AState: TGridDrawState); override; end; TForm2 = class(TForm) StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.FormCreate(Sender: TObject); var i: byte; begin with StringGrid1 do begin Cells[0,0]:= '№ п/п'; Cells[1,0]:= 'Ф.И.О.'; Cells[7,0]:= 'Итого'; end; end; { TStringGrid } procedure TStringGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); var NewRect: TRect; RLeft: integer; Text: string; begin if (gdFixed in AState) and (ACol = 6) then begin Text:= 'Баллы'; // вычисляем объединенный Rect RLeft:= CellRect(2,0).Left; NewRect:= Bounds(RLeft,ARect.Top,CellRect(6,0).Right-RLeft,ARect.Height); // Рисуем стилем, установленным в винде в случае если стиль таблицы не равен gdsClassic DrawCellBackground(NewRect,FixedColor,AState,ACol,ARow); // здесь не знаю как иначе заставить текст рисоваться с отступом слева NewRect.Left:= NewRect.Left + 5; Canvas.TextRect(NewRect,Text,[tfLeft,tfSingleLine,tfVerticalCenter]); end else inherited; end; end.
Запись от DenNik размещена 24.11.2016 в 12:24 -
Запись от Сергей 190 размещена 24.11.2016 в 12:56