![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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.