Delphi World - Многострочный TStringGrid
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Многострочный TStringGrid

Изобрели суперкомпьютер. Позвали англичанина, немца и русского колхозника и сказали:
- Назовите два числа и компьютер произведет с ними любую операцию. Если он не сможет посчитать, вы получите кучу денег!
Англичанин называет 10^6581 - компьютер все посчитал и его выгнали. Немец называет 236^65468749846 - компьютер все посчитал и его тоже выгнали.
Русский говорит:
- До х#я...
Компьютер зависает. Изобретатели посовещались и решили:
- Поехали к нему в колхоз, наверное, у них там все такие умные!
Приезжают в колхоз, смотрят - мужик поле косит. Подходят к нему и спрашивают:
- Мужик, скажи, а "до х#я" это много?
- Да как вам сказать... Видите поле, которое я кошу? Это до х#я.
- Не поняли... А вот поле через дорогу - это тоже до х#я?
- А это соседское, это до п#зды!!!

...да, но вы должны перекрыть событие OnDraw. Ниже приведен пример, делающий заголовок многострочным, центрированным и с жирным шрифтом:


// if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount,

procedure TForm1.grid1DrawCell(Sender: TObject; Col, Row: Longint;
  Rect: TRect; State: TGridDrawState);
var
  l_oldalign: word;
  l_YPos, l_XPos, i: integer;
  s, s1: string;
  l_col, l_row: longint;
begin
  l_col := col;
  l_row := row;
  with sender as tstringgrid do
  begin
    if (l_row = 0) then
      canvas.font.style := canvas.font.style + [fsbold];
    if l_row = 0 then
    begin
      l_oldalign := settextalign(canvas.handle, ta_center);
      l_XPos := rect.left + (rect.right - rect.left) div 2;
      s := cells[l_col, l_row];
      while s <> '' do
      begin
        if pos(#13, s) <> 0 then
        begin
          if pos(#13, s) = 1 then
            s1 := ''
          else
          begin
            s1 := trim(copy(s, 1, pred(pos(#13, s))));
            delete(s, 1, pred(pos(#13, s)));
          end;
          delete(s, 1, 2);
        end
        else
        begin
          s1 := trim(s);
          s := '';
        end;
        l_YPos := rect.top + 2;
        canvas.textrect(rect, l_Xpos, l_YPos, s1);
        inc(rect.top, rowheights[l_row] div 3);
      end;
      settextalign(canvas.handle, l_oldalign);
    end
    else
    begin
      canvas.textrect(rect, rect.left + 2, rect.top + 2, cells[l_col, l_row]);
    end;

    canvas.font.style := canvas.font.style - [fsbold];
  end;
end;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования