Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Работа с Tstringgrid

Автор: APAL 12.04.2004 20:31

Подскажите как изменить (пример - сделать жирным) текст в заголовках колонок таблицы TStringGrid?

Нашел вроде бы
Tabl.Cells.Canvas.Font.Style:=[fsBold]; - да не работает... sad.gif

Автор: KRUTOY 12.04.2004 22:08

APAL

stringgrid1.Font.Style:=[fsBold];
а в Cells надо указывать номер строки и столбца: Cells[i,j]

Автор: APAL 12.04.2004 22:14

Цитата(KRUTOY @ 12.04.04 19:08)
APAL

stringgrid1.Font.Style:=[fsBold];
а в Cells надо указывать номер строки и столбца: Cells[i,j]

Спасибо! Работает!

Вроде мелочь, но я замучился с ней... smile.gif

Автор: APAL 12.04.2004 22:33

Только теперь другая проблема...

Жирный шрифт нужен был для заголовков колонок - он им и становиться, но после возврата предидущего стиля заголовки опять стандартного стиля.
Как сделать раздельное определение стиля на разные ячейки, а не на всю таблицу целиком?


Код
procedure TfMain.TablEnter(Sender: TObject);
Var
 Style: TFontStyles;
begin
 Style := Tabl.Font.Style;  // Получение стиля текущего шрифта.
 Tabl.Font.Style:=[fsBold];
 Tabl.Cells[0,0]:='Дата';
 Tabl.Cells[1,0]:='Время';
 Tabl.Cells[2,0]:='№ документа';
 Tabl.Cells[3,0]:='Документ';
 Tabl.Cells[4,0]:='Сумма';
 Tabl.Cells[5,0]:='Получатель';
 Tabl.Cells[6,0]:='Поставщик';
 Tabl.Cells[7,0]:='Информация';
{ Tabl.Font.Style:=Style;      }
end;

Автор: KRUTOY 13.04.2004 1:08

Да, проблемка, попробуй что-нибудь с Canvas-ом:
Tab1.Canvas.textout...или textrect(cellsrect(0,0),0,0,'hsgjkfsk');
Tab1.Canvas.Font.Style...

Автор: APAL 16.04.2004 19:16

Еще есть какие нибудь идеи???

Автор: P@sh@ 19.04.2004 9:34

Попробуй запихать смену шрифта в обработчик OnDrawCell, в зависимости от координаты

Автор: APAL 21.04.2004 15:49

Искал, читал, так и не понял как это реализовать.

Автор: KRUTOY 21.04.2004 23:29

Попробуй этот код!!!!!! МОжно даже разными цветами!!
я думаю,для себя приспособишь...
в цикле if...then параметр смени;
запускай,кликай по Stringgrid-у rolleyes.gif

Код
type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
     Rect: TRect; State: TGridDrawState);
   procedure StringGrid1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
const
 CharOffset = 3;
begin
 with StringGrid1.canvas do
 begin
   if  State=[gdFixed]then
   begin
   font.color := clMaroon;
   font.Style:=[fsBold];
   textout(rect.left + CharOffset, rect.top + CharOffset, 'Lloyd');
     font.color := clNavy;
   font.Style:=[];
   textout(rect.left + CharOffset + TextWidth('L'),
     rect.top + CharOffset, 'loyd');
 end
   else

 end;

end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
Stringgrid1.Font.Style:=[];
Stringgrid1.Cells[2,2]:='kruto';
Stringgrid1.Cells[3,3]:='офонареть';
end;

end.

Автор: APAL 25.04.2004 16:40

Спасибо, KRUTOY!
Немного подкорректировал и все заработало как надо!

Автор: KRUTOY 25.04.2004 16:57

Без моргания??

Автор: APAL 25.04.2004 18:58

Никакого моргания не наблюдаю...

Привожу итоговый код:

Код

procedure TfMain.TablEnter(Sender: TObject);
begin
 Tabl.Cells[0,0]:='Дата';
 Tabl.Cells[1,0]:='Время';
 Tabl.Cells[2,0]:='№ документа';
 Tabl.Cells[3,0]:='Документ';
 Tabl.Cells[4,0]:='Сумма';
 Tabl.Cells[5,0]:='Получатель';
 Tabl.Cells[6,0]:='Поставщик';

 Tabl.Cells[0,1]:='Информация';
 Tabl.Cells[1,1]:='Информация';
 Tabl.Rowcount:=Tabl.Rowcount+1;
 Tabl.Cells[0,2]:='Информация';
 Tabl.Cells[1,2]:='Информация';
 Tabl.Rowcount:=Tabl.Rowcount+1;
 Tabl.Cells[0,3]:='Информация';
 Tabl.Cells[1,3]:='Информация';
 Tabl.Rowcount:=Tabl.Rowcount+1;
 Tabl.Cells[0,4]:='Информация';
 Tabl.Cells[1,4]:='Информация';
 Tabl.Rowcount:=Tabl.Rowcount+1;
 Tabl.Cells[0,5]:='Информация';
 Tabl.Cells[1,5]:='Информация';

end;

procedure TfMain.TablDrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
const
CharOffset = 2;
begin

With TStringGrid(Sender),TStringGrid(Sender).Canvas Do
 Begin
  IF (Odd(ARow)) then
    Brush.Color:=$f7f9fc else If ARow<>0 then Brush.Color:=Cl3Dlight;
  IF ARow<>0 then FillRect(Rect);
  TextOut(Rect.Left+2,Rect.Top+2,Cells[ACol,ARow]);
 End;

with Tabl.canvas do
begin
  if  State=[gdFixed]then
  begin
    font.Style:=[fsBold];
    textout(rect.left + CharOffset, rect.top + CharOffset,
        Tabl.Cells[ACol,Arow]);
  end
    else
  font.Style:=[fsBold];
end;
end;

Автор: KRUTOY 3.06.2004 21:33

тоже столкнулся с этой проблемой, только при появлении скролла Stringgrid-a
отрисовка глючит, надо свой обработчик писать... sad.gif

Автор: APAL 3.06.2004 23:20

А вот скролл я еще не испытывал... :o

Автор: KRUTOY 11.06.2004 20:18

надо вместо TextOut использовать:

 SG.Canvas.TextRect(SG.CellRect(0,0),SG.CellRect(0,0).left+ch,
        SG.CellRect(0,0).top+ch,'S');