Subject: 忠实的CnPack控件的爱好者关于AAText的难问题 [Print This Page]
Author:
xjhwc Time: 2005-11-18 15:22 Subject: 忠实的CnPack控件的爱好者关于AAText的难问题
我在做触摸屏查询软件(BCB6.0),用到了AAText控件。客户给的比较大WORD文件,可能要3屏才可以显示完。我把WORD文件保存为TXT文件。在TXT文件中的标题前面加<Title1><Center>,在段落前面加<Text1><Left>,都是手动加的。
T_List=new TStringList();
T_List->LoadFromFile("e:\\touch\\files\\3.txt");
AAText1->Text->Lines->Clear();
for (int i=0;i<=18;i++)
{
AAText1->Text->Lines->Add(T_List->Strings[i]);
}
用AAText1->Text->Lines->Add(T_List->Strings[i])一行一行的添加TXT文件中的文字。AAText控件的大小是确定的,如何让AAText1刚显示满的时候,就不要在往AAText1中添加文字。如果按下“下一页”把第一屏清除,接者第一屏的最后的文字,再重新读一屏文字。
帮忙!就差这点了。
Author:
croslq Time: 2005-11-18 18:26
哈哈,你自已重新写三,
通过
TAALabel->TextHeight高度判断,从新做一个三
Author:
xjhwc Time: 2005-11-18 23:22
出点钱也可以。QQ:16107371
Author:
drop Time: 2005-11-19 14:29
倒,我也正要问这个问题
怎么让AAFONT换行 显示
aafadetext1.Text.Lines.Add(aStream2.DataString);
aStream2.DataString的长度超过了200 而aafadetext1 只能一次完整显示20
Author:
drop Time: 2005-12-6 00:43
问题已解决,晕哦,细心想一想就行了.
Author:
zjy Time: 2005-12-6 08:50 Subject: 针对您遇到的问题,可以使用以下代码来判断:
type
TAATextAccess = class(TAAText);
// 返回 AAText 控件在加载 ALines 文本后实际显示的有效高度
function GetAATextHeight(AAText: TAAText; ALines: TStrings): Integer;
var
i, j: Integer;
WrapLines: TStrings;
CurrText: string;
CurrAlign: TAlignment;
TextWidth: Integer;
TextHeight: Integer;
AWidth: Integer;
xFree: Boolean;
MaxCol: Integer;
begin
Result := 0;
WrapLines := TStringList.Create;
try
with TAATextAccess(AAText), AAText.Text do
begin
xFree := not WordWrap and AutoSize and (Align in [alNone, alLeft, alRight]);
if xFree then AWidth := 0
else AWidth := ClientWidth;
AAFont.Canvas := Canvas;
AAFont.Effect.Assign(FontEffect);
Canvas.Font.Assign(Font);
for i := 0 to ALines.Count - 1 do
begin
CurrText := ALines[i]; //当前处理字符串
if LabelEffect = leOnlyALine then
begin
Canvas.Font.Assign(Font);
AAFont.Effect.Assign(FontEffect);
end;
Fonts.Check(CurrText, Canvas.Font, AAFont.Effect); //检查字体标签
Labels.Check(CurrText, CurrAlign); //检查用户标签
TextWidth := AAFont.TextWidth(CurrText);
if WordWrap and (TextWidth > AWidth) then //自动换行
begin
MaxCol := AWidth * Length(CurrText) div TextWidth;
while AAFont.TextWidth(Copy(CurrText, 1, MaxCol)) > AWidth do
Dec(MaxCol);
WrapText(CurrText, WrapLines, MaxCol);
end else if CurrText <> '' then
WrapLines.Text := CurrText
else
WrapLines.Text := ' ';
if xFree and (TextWidth > AWidth) then //确定宽度
begin
AWidth := TextWidth;
end;
for j := 0 to WrapLines.Count - 1 do
begin
CurrText := WrapLines[j];
TextHeight := AAFont.TextHeight(CurrText + ' ');
Inc(Result, TextHeight);
if (i < ALines.Count - 1) or (j < WrapLines.Count - 1) then
Inc(Result, Round(TextHeight * RowPitch / 100));
end;
end;
Result := Result + 2 * Border;
end;
finally
WrapLines.Free;
end;
end;
使用时,将需要加载的文本先放到临时字符串列表中,逐行增加并调用该函数判断当前有效高度是否大于控件实际高度。
另外,如果在 BCB 下使用,可以将这个函数放到 AACtrls 单元或新建一个 pas 单元来调用。
Author:
weijxin Time: 2005-12-7 12:51 Subject: 我也有问题。
请各位前辈帮帮忙,小弟当前在使有AAFONT的控件组,使用AATEXT的控件,这是个可支持多行文件的LABEL,且可以设置每一行文字的字体和大小,风格等。但当我想在程序里动态生成时,却发现以上说的那些功能都不能使用,请各位指点指点。在线等待。程序如下:
tmpaatext:=TAAText.Create(self);
tmpaatext.Parent:=self;
tmpaatext.Left:=10;
tmpaatext.Top:=10;
tmpaatext.Text.Lines.Add('新标签');
tmpaatext.Show;
tmpaatext.Fonts[0].Font.size:=18;//出错,不可以使用
请问,我如何才可以控制每行的字体的大小和颜色。
Welcome to CnPack Forum (http://bbs.cnpack.org/) |
Powered by Discuz! 5.0.0 |