Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
ВнизПеренос слова в TQRLabel Найти похожие ветки
← →
a125 (2007-05-06 14:48) [0]Есть TQRLabel фиксированной ширины и достаточной высоты (несколько строк), wordwrap:=true. Проблема : если попадается слово (строка символов между пробелами) длинее, чем ширина TQRLabel , то выводится только видимая часть слова, а остальная пропадает, поясню примером:
исходная строка : Премия за особоважное задание
выдводится так
премия
за
особоваж
задание
Как сделать, чтобы выводились так:
премия
за
особоваж
ное
задание
← →
DimaBr © (2007-05-07 12:11) [1]1. Написать потомок от TQRLabel, который будет это реализовывать. При возникновении трудностей спрашиваем здесь
http://www.delphimaster.ru/cgi-bin/forum.pl?n=12
2. Попытаться переформатировать текст расставив пробелы. Например так
procedure TQuickReport2.QRLabel1Print(sender: TObject; var Value: String);
var i: integer;
s,s1,s2: string;
Flag: boolean;
begin
s := "";
s1 := "";
S2 := value;
while Length(s2)> 0 do begin
s1 := s1 + s2[1];
s := s + s2[1];
delete(s2,1,1);
with QRLabel1 do
if Muldiv(Longint(ParentReport.TextWidth(Font, s1)),Zoom,100) > Width then begin
Flag := true;
for i := Length(s1) downto 0 do
if s1[i] = #32 then begin
s1 := Copy(s1,i+1,Length(s1)-i);
Flag := false;
Break;
end;
if Flag then begin
s1 := Copy(s1,Length(s1),1);
s := copy(s,1,Length(S)-1)+" "+ s1;
end;
end;
end;
Value := s;
end;
← →
DimaBr © (2007-05-07 12:11) [2]1. Написать потомок от TQRLabel, который будет это реализовывать. При возникновении трудностей спрашиваем здесь
http://www.delphimaster.ru/cgi-bin/forum.pl?n=12
2. Попытаться переформатировать текст расставив пробелы. Например так
procedure TQuickReport2.QRLabel1Print(sender: TObject; var Value: String);
var i: integer;
s,s1,s2: string;
Flag: boolean;
begin
s := "";
s1 := "";
S2 := value;
while Length(s2)> 0 do begin
s1 := s1 + s2[1];
s := s + s2[1];
delete(s2,1,1);
with QRLabel1 do
if Muldiv(Longint(ParentReport.TextWidth(Font, s1)),Zoom,100) > Width then begin
Flag := true;
for i := Length(s1) downto 0 do
if s1[i] = #32 then begin
s1 := Copy(s1,i+1,Length(s1)-i);
Flag := false;
Break;
end;
if Flag then begin
s1 := Copy(s1,Length(s1),1);
s := copy(s,1,Length(S)-1)+" "+ s1;
end;
end;
end;
Value := s;
end;
← →
DimaBr © (2007-05-07 12:34) [3]Извиняюсь за второй пост, ещё как вариант, можно заменить Label на RichText
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c