powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Многосторный текст! как сделать
3 сообщений из 3, страница 1 из 1
Многосторный текст! как сделать
    #34438627
mikola1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема слдующая! Язык программирования C++ Builder 6.0
Необходимо зделать вкладку, вкоторой описанны перменные, из стандартных компонентов наиболее подходит StringGrid, но проблема описание переменной очень длинное и полностью не вмещаеться в отведенное место, уходя за облость видемости. Подскажите как сделать что бы строка разбивалась на несколько(как в екселе допустим, во вкладке формат есть галка "Переностить по словам", что бы так же переносилося). или другой какой компонет.
Зарание блогодарен!
...
Рейтинг: 0 / 0
Многосторный текст! как сделать
    #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
Многосторный текст! как сделать
    #34438719
mikola1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Многосторный текст! как сделать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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