- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Canvas 、字形、文本和整数变量空间。我想根据 TRadioGroup 的 ItemIndex 将字形和文本绘制到 Canvas 上(例如,如果 ItemIndex = 1,则在文本的左侧绘制字形等)在任何情况下,必须在字形和文本之间插入空格作为空格。Glyph 和 Text 都必须在 Canvas 上居中,即使 Canvas 的宽度小于 Glyph 的宽度 + Text 的宽度。
我试图实现这个任务,但我对一些计算感到困惑。下面附上我的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
R1, R2: TRect;
S: String;
G, D: Integer;
B, C: TBitmap;
begin
S := 'This is an example text to show how WordWrap works';
B := TBitmap.Create;
B.LoadFromFile('C:\g.bmp');
C := TBitmap.Create;
C.Width := 242;
C.Height := 96;
Form1.Repaint;
Form1.Canvas.Brush.Color := clGreen;
Form1.Canvas.FillRect(Rect(0, 0, TrackBar1.Position, C.Height));
// left
if RadioGroup1.ItemIndex = 0 then
begin
R1 := Rect(B.Width + TrackBar2.Position, 0, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R1, S, [tfWordBreak, tfNoClip, tfCenter, tfCalcRect]);
Form1.Canvas.Brush.Color := clWebSkyBlue;
R2 := Rect(B.Width + TrackBar2.Position, (C.Height - R1.Bottom) div 2, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R2, S, [tfWordBreak, tfNoClip, tfCenter]);
Form1.Canvas.Draw((TrackBar1.Position - R1.Right - TrackBar2.Position) div 2, (C.Height - B.Height) div 2, B);
end;
//right
if RadioGroup1.ItemIndex = 1 then
begin
R1 := Rect(B.Width + TrackBar2.Position, 0, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R1, S, [tfWordBreak, tfNoClip, tfCenter, tfCalcRect]);
Form1.Canvas.Brush.Color := clWebSkyBlue;
R2 := Rect(0, (C.Height - R1.Bottom) div 2, TrackBar1.Position - B.Width - TrackBar2.Position, C.Height);
Form1.Canvas.TextRect(R2, S, [tfWordBreak, tfNoClip, tfCenter]);
Form1.Canvas.Draw((TrackBar1.Position + R1.Right - (B.Width*2) + TrackBar2.Position) div 2, (C.Height - B.Height) div 2, B);
end;
//top
if RadioGroup1.ItemIndex = 2 then
begin
R1 := Rect(0, B.Height + TrackBar2.Position, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R1, S, [tfWordBreak, tfNoClip, tfCenter, tfCalcRect]);
G := B.Height + R1.Bottom - R1.Top;
D := (C.Height - G) div 2;
Form1.Canvas.Brush.Color := clWebSkyBlue;
R2 := Rect(0, D + TrackBar2.Position, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R2, S, [tfWordBreak, tfNoClip, tfCenter]);
Form1.Canvas.Draw((TrackBar1.Position - B.Width) div 2, D - TrackBar2.Position, B);
end;
//bottom
if RadioGroup1.ItemIndex = 3 then
begin
R1 := Rect(0, B.Height + TrackBar2.Position, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R1, S, [tfWordBreak, tfNoClip, tfCenter, tfCalcRect]);
G := B.Height + R1.Bottom - R1.Top;
D := (C.Height + G) div 2;
Form1.Canvas.Brush.Color := clWebSkyBlue;
R2 := Rect(0, D - R1.Bottom - R1.Top + B.Height + TrackBar2.Position, TrackBar1.Position, C.Height);
Form1.Canvas.TextRect(R2, S, [tfWordBreak, tfNoClip, tfCenter]);
Form1.Canvas.Draw((TrackBar1.Position - B.Width) div 2, D + TrackBar2.Position, B);
end;
FreeAndNil(B);
end;
如何使用此代码:将两个 TrackBar 放到 Form 上,并将第一个 TrackBar 的最大值设置为 242,第二个设置为 10;将 TRadioGroup 放到 Form 上,并按照下一个顺序在其 Items 属性中设置 4 个项目:左、右、上、下。
因此,当选择“左侧”或“右侧”项目时,代码可以正确工作(正确 - 正如我所期望的),但是当选择“顶部”或“底部”项目时,字形和文本绘制不正确。我的意思是,例如,我们选择项目“顶部”并单击 Button1。我们看到了什么?右图,Glyph 绘制在 Text 上(更多详细信息请参见图片)。不幸的是,我试图克服这一点,但没有成功:
那么,有什么方法可以改进这段代码吗?或者我应该用另一种方式来达到我的目标?
附注抱歉我的英语不好;)
编辑更新源代码。
最佳答案
您对顶部和底部的计算是错误的。并且您可以直接在位图 Canvas 上而不是在表单 Canvas 上绘图。这是修复后的版本:
//top
if RadioGroup1.ItemIndex = 2 then
begin
R1 := Rect(0, B.Height + TrackBar2.Position, TrackBar1.Position, C.Height);
C.Canvas.TextRect(R1, S, [tfWordBreak, tfNoClip, tfCenter, tfCalcRect]);
G := (C.Height div 2);
// D is top for centered text rec + glyph size and spacing
D := G + ((R1.Height + B.Height + Trackbar2.Position) div 2);
C.Canvas.Brush.Color := clWebSkyBlue;
R2 := Rect(0, D - R1.Height, TrackBar1.Position, D+R1.Height);
C.Canvas.TextRect(R2, S, [tfWordBreak, tfNoClip, tfCenter]);
C.Canvas.Draw((TrackBar1.Position - B.Width) div 2, R2.Top - B.Height - TrackBar2.Position, B);
end;
//bottom
if RadioGroup1.ItemIndex = 3 then
begin
R1 := Rect(0, 0, TrackBar1.Position, C.Height);
C.Canvas.TextRect(R1, S, [tfWordBreak, tfNoClip, tfCenter, tfCalcRect]);
// G is absolute middle of draw canvas
G := (C.Height div 2);
// D is top for centered text rec + glyph size and spacing
D := G - ((R1.Height + B.Height + Trackbar2.Position) div 2);
C.Canvas.Brush.Color := clWebSkyBlue;
R2 := Rect(0, D, TrackBar1.Position, D + R1.Height);
C.Canvas.TextRect(R2, S, [tfWordBreak, tfNoClip, tfCenter]);
C.Canvas.Draw((TrackBar1.Position - B.Width) div 2, R2.Bottom + TrackBar2.Position, B);
end;
关于delphi - 将字形和 WordWrap 文本一起绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806534/
我该如何解决这个问题?第 3 点应该与其他点一样,但在自动换行之外会产生问题。自动换行也应与其他行具有相同的边距。出了什么问题? 这是背后的代码: .gruene-liste { list-s
我在 php 中使用 wordwrap() 函数时遇到问题,例如中文字符。当 wordwrap 函数中的 $cut 参数设置为 true 时,它会通过插入问号来破坏字符串。 有解决办法吗? 最佳答
我正在尝试使用 wordwrap() 来打断文本,但我不希望它在每次达到特定长度时都打断文本,我希望它只打断超过任何特定长度的单词,例如: "); ?> 好吧,它可以工作,但我只想打破超过特定长度的单
如何使用自动换行符显示长字符串、网站地址、单词或符号集以保持 div 宽度?我猜是某种自动换行。通常添加空格是可行的,但是否有 CSS 解决方案,例如自动换行? 例如,它(非常讨厌地)与 div 重叠
我应该如何设置 WordWrap = false到 System.Windows.Forms.Label ? 我在面板上有一个标题,它应该显示 "MyPanel capt..." .所以我使用 Aut
我有一个 Canvas 、字形、文本和整数变量空间。我想根据 TRadioGroup 的 ItemIndex 将字形和文本绘制到 Canvas 上(例如,如果 ItemIndex = 1,则在文本的左
我一直在阅读一些关于 WordWrap 不适用于 QTreeView 的论坛(如屏幕外显示的文本),但我找不到任何解决此问题的“黑客”。 bookTreeView 被封装在另一个小部件中,这可能是问题
我的 Windows 窗体应用程序中有一个 CheckedListBox,但可以添加太宽的项目以供控件显示。发生这种情况时,有什么办法可以让文本换行到下一行吗? 我知道对于标准的 ListBox 这是
我发现的大多数自动换行功能都绑定(bind)到 css 和/或浏览器 dom。我在 javascript 环境 (rhino) 中工作,需要找到或设计一个更好的自动换行,在给定行长度值之前的空白处中断
我创建了一个人们可以填写的 jQuery 表单。完成后,他们可以单击两个按钮之一将表单发布到 PHP 文件。 PHP文件处理表单中的数据并将其放入数据库中。然后数据库有一些触发器,并输出数据。 我想知
我有一个主登录页面,我们可以访问该页面并将其带入嵌入式浏览器。我正在尝试让文字在页面上正确换行。 我们将 CSS 类附加到通过的 html 元素,但自动换行似乎被忽略了。我倾向于认为这是可以设置的 W
我有一个自动换行算法,基本上可以生成适合文本宽度的文本行。不幸的是,当我添加太多文本时它会变慢。 我想知道我是否监督了可以进行的任何重大优化。此外,如果任何人的设计仍然允许更好的行字符串或行字符串指针
我创建了几个不同的 UITableViewCell我的 tableViewController ,这是因为我有不同的数据位要显示,具体取决于返回的内容。正因为如此,每个 UITableViewCell
我在一个简单的页面上有一个 Bootstrap 布局,只有一些行和一些列在全屏上排序,没有设置 with 或 hight 并且应该保持这种状态。 这是我的布局定义
我有一个标签 (#linkDiv),一旦“解锁”,它就会变成一个按钮。而作为标签,文本比按钮长,所以需要换行。我已经做了 white-space:normal; word-wrap: break-wo
有一个固定大小的字符和一个应该将整个单词包装到下一行的文本,计算应该最接近正方形的拟合中心正方形的最佳算法是什么占用最少的空间并且对用户来说看起来不错? 屏幕是这样定义的 #define max_wi
我目前有一个 wordwrapped-JTextArea 作为聊天程序的用户输入窗口。如何使 JTextArea 不调整大小以自动适应大文本?我已经将 JTextArea 设置为 2 行: user_
在 WordWrap 模式下,如何在 QLabel 中设置行高? 最佳答案 使用 HTML 文本: QString template = "%2"; QString targetText = temp
PHP 的 wordwrap()对于 UTF-8 等多字节字符串,该函数无法正常工作。 评论里有一些mb安全函数的例子,但是通过一些不同的测试数据,它们似乎都存在一些问题。 该函数应采用与 wordw
有没有办法在 IE7 中自动换行 Slickgrid 列标题?我有大约 20+网格中的列 - 几乎所有列都有 2 个或更多单词。 感谢您的帮助! 最佳答案 我通过编辑 2 个 css 标签解决了这个问
我是一名优秀的程序员,十分优秀!