0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 35
1

Отрисовка объединенных ячеек Stringgrid

14.10.2015, 16:40. Показов 804. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Нужна помощь в рисовании ячеек Stringgrid.

В фиксированной строке Stringgrid есть несколько полей (например, text4 и text5 или text6 и text), которые должны идти под одним заголовком (например, label1 или label2).
Все text - содержат несколько слов и соответственно для того, чтобы при изменении ширины столбцов текст был виден полностью, текст выводится в событии OnDrawCell с помощью
Delphi
1
2
3
4
5
6
7
if ARow=0 then begin
                 DrawText(Can.Handle, PChar(s),-1, Rect,DT_CENTER or DT_WORDBREAK);
                 h:=DrawText(Can.Handle, PChar(s),-1, Rect,DT_CENTER or DT_WORDBREAK);
                 if h> StringGrid.RowHeights[ARow] then StringGrid.RowHeights[ARow]:=H;
                 end
                 else
                 Can.TextOut(Rect.Left+2,Rect.Top+4, StringGrid.Cells[ACol, ARow]);
т.е. выводится по центру с переносом слов.

Для того чтобы отрисовать заголовки я сделал еще один StringGrid, состоящий из label1 и label2, который просто накладываю поверх основного, связав его местоположение и размеры с параметрами основного StringGrid (в примере у меня 4 колонки, попарно объединенных, на самом деле их 8), рассчитывая их в том же событии OnDrawCell

Delphi
1
2
3
4
5
6
7
8
9
 if (ARow=0) and (ACol in [4..11]) then
      begin
         SG_label.Left:=SG_main.CellRect(4,0).Left;
         SG_label.ColWidths[0]:=SG_main.ColWidths[4]+SG_main.ColWidths[5]+1;
         SG_label.ColWidths[1]:=SG_main.ColWidths[6]+SG_main.ColWidths[7]+1;
         SG_label.ColWidths[2]:=SG_main.ColWidths[8]+SG_main.ColWidths[9]+1;
         SG_label.ColWidths[3]:=SG_main.ColWidths[10]+SG_main.ColWidths[11]+1;
         SG_label.Width:=SG_main.ColWidths[4]+SG_main.ColWidths[5]+SG_main.ColWidths[6]+SG_main.ColWidths[7]+SG_main.ColWidths[8]+SG_main.ColWidths[9]+SG_main.ColWidths[10]+SG_main.ColWidths[11];
      end;
Размер меняется, выводится все в нужном месте, но наложенный поверх StringGrid закрывает часть текста основного, т.к. флаги DT_WORDBREAK и DT_BOTTOM нельзя использовать вместе и текст в основном StringGrid начинает выводится от верхнего левого угла ячейки.

Как можно решить данную проблему? Надо чтобы были видны все надписи вне зависимости от ширины столбцов.
Миниатюры
Отрисовка объединенных ячеек Stringgrid  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2015, 16:40
Ответы с готовыми решениями:

Отрисовка ячеек StringGrid
Приветствую! Столкнулся с проблемой при динамическом создании StringGrid-ov. Ячейки почему-то...

Отрисовка цветных ячеек в StringGrid
Делаю ИСС Кинотеатр и нужно сделать выбор места в зале. Делаю так создаю массив из 0 1 и 2. 0 -...

StringGrid, скрытие и отрисовка ячеек
Здраствуйте, хотел спросить совета у знающих людей. У меня есть StringGrid1 заполненный данными. ...

StringGrid Цвет фона пустых ячеек и ячеек с текстом
Доброго дня.. Задачка следующая: Ячейки в StringGrid'e заполняются по блоку из Timer. В...

6
5056 / 3942 / 1303
Регистрация: 14.04.2014
Сообщений: 18,140
Записей в блоге: 18
14.10.2015, 22:47 2
вариант неудачный
для объединения ячеек в SG надо слишком глубоко копать
проще написать свой грид, чем переделывать этот
либо взять готовые с этой фичей. их хватает
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 35
15.10.2015, 09:33  [ТС] 3
Цитата Сообщение от krapotkin Посмотреть сообщение
либо взять готовые с этой фичей
Можете посоветовать какой-нибудь бесплатный? Сейчас я использую TJvStringGrid от JEDI-Project, т.к. нашел в нем другие необходимые мне фичи
0
3863 / 3290 / 862
Регистрация: 29.08.2013
Сообщений: 21,576
Записей в блоге: 2
15.10.2015, 09:40 4
BagrAlex,
а какие фичи в нем есть?

вам бесплатный? или "бесплатный" ))
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 35
15.10.2015, 10:10  [ТС] 5
Цитата Сообщение от qwertehok Посмотреть сообщение
а какие фичи в нем есть?
Например, хорошая гибкая сортировка, возможность легко скрывать/показывать или удалять/вставлять столбцы/строки, сохраняться и загружаться в *.csv....

Цитата Сообщение от qwertehok Посмотреть сообщение
вам бесплатный? или "бесплатный"
Нужен именно бесплатный
0
3863 / 3290 / 862
Регистрация: 29.08.2013
Сообщений: 21,576
Записей в блоге: 2
15.10.2015, 10:19 6
EhLib посмотрите

а вы не могли бы подсказать где скачать последний JEDI?
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 35
15.10.2015, 10:45  [ТС] 7
Ссылки тут нельзя давать) На оф сайте (найти можно в гугле по запЧУросу JEDI delphi), в разделе JVCL (JEDI Visual Component Library) , там есть download. Когда я искал себе для XE8, на сайте еще не было загрузки для XE8, поэтому качал с ftp для предыдущей версии и менял скрипт установки под XE8, ориентируясь на материал в чьем-то блоге (найти можно по запросу Unofficial JEDI JCL and JVCL patch for Delphi XE8)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2015, 10:45

Отрисовка StringGrid
procedure TForm16.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State:...

TStringGrid отрисовка ячеек
добрый вечер. Есть ValueListEditor (по сути тот же StringGrid). естественно, рисуется с учетом...

Нумерация ячеек StringGrid
Парни подскажите как мне прономеровать ячейки(динамически) в елементе StringGrid. Должно получится...

Stringgrid размер ячеек
Здравствуйте. Есть StringGrid, на котором количество строк и столбцов устанавливается в работающем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.