Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringGrid [D6, Win95/98, WinME]


mike.dld ©   (2002-03-29 09:24:00) 

Существует ли какой-нибудь способ, чтобы в StringGrig.Cells[x,y] можно было выводить более одной строки?


Кулюкин Олег   (2002-03-29 10:14:00) [1]

2 mike.dld
Упустил в первом ответе.
Еще нужно подогнать высоту строки под текст.
Поможет функция DrawText+ флаг DT_CALCRECT.

Пример кода был в "Советах по Дельфи" Валентина Озерова.


mike.dld   (2002-03-29 10:06:00) [2]

Честно говоря, я не так уж и хорошо разбираюсь в Дельфи, как хотелось бы, поэтому, если те трудно, напишите, уважаемый MBo, кусочек кода и разъясните, как мне потом из этой двустрочной ячейки переслать данные в Excel.


MBo   (2002-03-29 09:58:00) [3]

DrawText спасет


Song   (2002-03-29 09:57:00) [4]

пользуйтесь Excel"ем через OLE.


mike.dld   (2002-03-29 09:53:00) [5]

Вот то и нужно. Программа такова, что в StringGrid 6 колонок, 4 из них имеют фиксированную ширину, а 2 изменяются в зависимости от длины строк, в них помещенных. Надо всё это дело потом распечатывать, а что же это будет такое, если таблица по ширине не влезет на лист? Вот поэтому нужно переносить строку, если она слишком длинная.


MBo   (2002-03-29 09:48:00) [6]

а что именно нужно?


mike.dld   (2002-03-29 09:46:00) [7]

А нет ли такой компоненты готовой (может, постарался кто-то)?


Song   (2002-03-29 09:44:00) [8]

Заносите в ячейки как обычно, но рисуйте разделение ячеек (вообщем всю сетку) сами. Другого варианта не вижу. Или делайте двойное хранение: в гриде и в каком-нить замсловатом массиве вставленном в Record. Но тут.... проблем будет много.


MBo   (2002-03-29 09:43:00) [9]

а чему это противоречит?


mike.dld   (2002-03-29 09:41:00) [10]

Но мне же потом с этой ячейки еще и читать нужно! Это же не для красоты!


MBo   (2002-03-29 09:40:00) [11]

OK, c DrawText будет проще


MBo   (2002-03-29 09:36:00) [12]

пример - если в строке есть перевод строки

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var i:integer;
s:string;
begin
with stringgrid1 do begin
s:=Cells[ACol,ARow];
i:=pos(#13#10,s);
if i>0 then begin
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2,Rect.Top+2,copy(s,1,i-1));
Canvas.TextOut(Rect.Left+2,Rect.Top+20,copy(s,i+2,length(s)-i-1));
end else
Canvas.TextOut(Rect.Left+2,Rect.Top+2,s);
end;
end;


Кулюкин Олег   (2002-03-29 09:35:00) [13]

Можно.
Если выводить текст ручками (в обработчике события OnDrawCell) при помощи функции DrawText с флагом DT_WORDBREAK.


Наверх

Титульная страница Поиск, карта сайта Написать письмо