Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Многосторный текст! как сделать / 3 сообщений из 3, страница 1 из 1
04.04.2007, 18:48
    #34438627
mikola1982
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многосторный текст! как сделать
Проблема слдующая! Язык программирования C++ Builder 6.0
Необходимо зделать вкладку, вкоторой описанны перменные, из стандартных компонентов наиболее подходит StringGrid, но проблема описание переменной очень длинное и полностью не вмещаеться в отведенное место, уходя за облость видемости. Подскажите как сделать что бы строка разбивалась на несколько(как в екселе допустим, во вкладке формат есть галка "Переностить по словам", что бы так же переносилося). или другой какой компонет.
Зарание блогодарен!
...
Рейтинг: 0 / 0
04.04.2007, 19:17
    #34438703
Lexogen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многосторный текст! как сделать
В связи с тем, что для билдера не могу найти код, кидаю для делфи (все примеры не мои, а взяты с DelphiWorld. Когда то много программил для билдера, а информации по делфи было намного больше, потому пришлось портировать. Так как это было быстрее, нежели найти решение под билдер. Надеюсь для Вас это не составит проблемы):

1-й вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow:
  Integer;
  Rect: TRect; State: TGridDrawState);
var
  Format: Word;
  C: array[ 0 .. 255 ] of Char;
begin
  Format := DT_LEFT or DT_WORDBREAK;
  (Sender as TStringGrid).Canvas.FillRect(Rect);
  StrPCopy(C, (Sender as TStringGrid).Cells[ACol, ARow]);
  WinProcs.DrawText((Sender as TStringGrid).Canvas.Handle, C,
    StrLen(C), Rect, Format);
end;

2-й вариант:
Сперва необходимо установить свойство DefaultDrawing в False. Далее, необходимо вставить следующий код в обработчик события OnDrawCell:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
procedure TForm1.StringGrid1DrawCell(Sender: TObject;
  Col, Row: Longint;
  Rect: TRect;
  State: TGridDrawState);
var
  Line1: string;
  Line2: string;
  ptr: integer;
  padding: integer;
  hGrid: TStringGrid;

begin
  hGrid := (Sender as TStringGrid);
  ptr := Pos(';', hGrid.Cells[Col, Row]);
  if ptr >  0  then
  begin
    Line1 := Copy(hGrid.Cells[Col, Row],  1 , ptr -  1 );
    Line2 := Copy(hGrid.Cells[Col, Row], ptr +  1 ,
      Length(hGrid1.Cells[Col, Row]) - ptr);
  end
  else
    Line1 := hGrid.Cells[Col, Row];
  hGrid.Canvas.FillRect(Rect);
  hGrid.Canvas.TextOut(Rect.Left, Rect.Top +  2 , Line1);
  if ptr >  0  then
    hGrid.Canvas.TextOut(Rect.Left, Rect.Top -
      hGrid.Canvas.Font.Height +  3 , Line2);
end;
Теперь достаточно для переноса строки вставить в неё точку с запятой. Так же не забудьте изменить высоту строки так, чтобы переносы строки поместились в ячейку:
Код: plaintext
StringGrid1.RowHeights[ 0 ] := StringGrid1.DefaultRowHeight *  2 ;
...
Рейтинг: 0 / 0
04.04.2007, 19:22
    #34438719
mikola1982
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многосторный текст! как сделать
спасибо!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Многосторный текст! как сделать / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]