Как известно, Гай Юлий Цезарь умел делать несколько дел одновременно, но при этом ужасно тормозил процесс демократизации империи, за что и был убит своим лучшим другом - Хомой Брутом.
Вопрос: нужна ли нам истинная многозадачность такой ценой?
procedure TForm1.grid1DrawCell(Sender: TObject; Col, Row: Longint;
Rect: TRect; State: TGridDrawState);
var l_oldalign : word;
l_YPos,l_XPos,i : integer;
s,s1 : string;
l_col,l_row :longint;
begin
l_col := col;
l_row := row;
with sender as tstringgrid dobeginif (l_row=0) then
canvas.font.style:=canvas.font.style+[fsbold];
if l_row=0 thenbegin
l_oldalign:=settextalign(canvas.handle,ta_center);
l_XPos:=rect.left + (rect.right - rect.left) div 2;
s:=cells[l_col,l_row];
while s<>'' dobeginif pos(#13,s)<>0 thenbeginif pos(#13,s)=1 then
s1:=''
elsebegin
s1:=trim(copy(s,1,pred(pos(#13,s))));
delete(s,1,pred(pos(#13,s)));
end;
delete(s,1,2);
endelsebegin
s1:=trim(s);
s:='';
end;
l_YPos:=rect.top+2;
canvas.textrect(rect,l_Xpos,l_YPos,s1);
inc(rect.top,rowheights[l_row] div 3);
end;
settextalign(canvas.handle,l_oldalign);
endelsebegin
canvas.textrect(rect,rect.left+2,rect.top+2,cells[l_col,l_row]);
end;
canvas.font.style:=canvas.font.style-[fsbold];
end;
end;
Вот перевод текста на русский язык:
Это компонент VCL (Visual Component Library) для Delphi или Borland C++Builder, который является программным языком и средой разработки, разработанными компанией Borland.
Код appears to be for a TStringGrid control, which is a multi-ровед grid that can display text. The grid1DrawCell procedure is an event handler that gets called whenever the grid needs to draw a cell.
Вот что код делает:
Он устанавливает стиль шрифта канваса (т.е., поверхности рисования) в жирный если это первая строка.
Если это первая строка, он устанавливает выравнивание текста в центр и рисует каждую ячейку в этой строке с помощью цикла. Цикл читает содержимое каждой ячейки, разбивает его на строки, разделенные символами новой строки (#13), и затем рисует каждую строку на слегка смещенной позиции (для создания эффекта "абзаца").
Если это не первая строка, он просто рисует ячейку без специального форматирования.
После рисования всех ячеек, он устанавливает стиль шрифта обратно в нормальный.
Код также имеет некоторые переменные, объявленные, которые используются внутри процедуры:
l_oldalign: целочисленная переменная, хранящая оригинальное настройку выравнивания текста (используемую позднее для восстановления).
l_YPos и l_XPos: целочисленные переменные, хранящие Y и X координаты текста соответственно.
i, s и s1: строковые переменные, используемые для временного хранения значений текста.
l_col и l_row: длина переменных, хранящих номер столбца и строки соответственно.
Код можно улучшить:
Используя более описательные имена переменных (например, вместо l_ col, используйте GridColumn).
Добавляя комментарии для объяснения того, что каждый раздел кода делает.
Рассматривайте использование отдельной процедуры для обработки форматирования текста, а не смешивая его с логикой рисования.
Возможно, стоит использовать более эффективный алгоритм для разбиения длинных строк на несколько строк (например, используя TStringList для хранения строк и затем итерируясь над ним).
В целом, это кажется-solidным куском кода, но некоторые улучшения можно было бы сделать, чтобы сделать его более maintainable и readable.
В статье описывается создание многострочного TStringGrid 2 с использованием процедуры TForm1.grid1DrawCell для отображения текста в ячейках грида.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.