热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

再学GDI+[45]:文本输出在矩形中格式化输出

为什么80%的码农都做不了架构师?本例效果图:代码文件:unitUnit1;interfaceusesWindows,Messages,SysUtils,Var

为什么80%的码农都做不了架构师?>>>   hot3.png

本例效果图:

26153917_shv1.gif

代码文件:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls, ExtCtrls;typeTForm1 = class(TForm)RadioGroup1: TRadioGroup;RadioGroup2: TRadioGroup;RadioGroup3: TRadioGroup;PaintBox1: TPaintBox;procedure FormCreate(Sender: TObject);procedure RadioGroup1Click(Sender: TObject);procedure RadioGroup2Click(Sender: TObject);procedure PaintBox1Paint(Sender: TObject);procedure RadioGroup3Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses GDIPOBJ, GDIPAPI, TypInfo;varsfFlag: Integer;procedure TForm1.FormCreate(Sender: TObject);
vari: Integer;
beginfor i := 0 to 2 doRadioGroup1.Items.Add(GetEnumName(TypeInfo(TStringAlignment), i));RadioGroup1.ItemIndex := 0;RadioGroup2.Items := RadioGroup1.Items;RadioGroup2.ItemIndex := 0;RadioGroup3.Items.CommaText := 'StringFormatFlagsDirectionRightToLeft,' +'StringFormatFlagsDirectionVertical,' +'StringFormatFlagsNoFitBlackBox,' +'StringFormatFlagsDisplayFormatControl,' +'StringFormatFlagsNoFontFallback,' +'StringFormatFlagsMeasureTrailingSpaces,' +'StringFormatFlagsNoWrap,' +'StringFormatFlagsLineLimit,' +'StringFormatFlagsNoClip';
end;procedure TForm1.PaintBox1Paint(Sender: TObject);
varg: TGPGraphics;b: TGPBrush;font: TGPFont;sf: TGPStringFormat;rect: TGPRectF;
beging := TGPGraphics.Create(PaintBox1.Canvas.Handle);b := TGPSolidBrush.Create($FF000000);g.SetTextRenderingHint(TextRenderingHintAntiAlias);font := TGPFont.Create('Arial Black', 22);sf := TGPStringFormat.Create;sf.SetFormatFlags(StringFormatFlagsNoClip);sf.SetAlignment(TStringAlignment(RadioGroup1.ItemIndex));sf.SetLineAlignment(TStringAlignment(RadioGroup2.ItemIndex));sf.SetFormatFlags(sfFlag);rect.X := 0;rect.Y := 0;rect.Width := PaintBox1.ClientWidth;rect.Height := PaintBox1.ClientHeight;g.DrawString('Delphi', -1, font, rect, sf, b);sf.Free;font.Free;b.Free;g.Free;
end;procedure TForm1.RadioGroup1Click(Sender: TObject);
beginPaintBox1.Repaint;
end;procedure TForm1.RadioGroup2Click(Sender: TObject);
beginPaintBox1.Repaint;
end;procedure TForm1.RadioGroup3Click(Sender: TObject);
begincase RadioGroup3.ItemIndex of0: sfFlag := StringFormatFlagsDirectionRightToLeft;1: sfFlag := StringFormatFlagsDirectionVertical;2: sfFlag := StringFormatFlagsNoFitBlackBox;3: sfFlag := StringFormatFlagsDisplayFormatControl;4: sfFlag := StringFormatFlagsNoFontFallback;5: sfFlag := StringFormatFlagsMeasureTrailingSpaces;6: sfFlag := StringFormatFlagsNoWrap;7: sfFlag := StringFormatFlagsLineLimit;8: sfFlag := StringFormatFlagsNoClip;end;PaintBox1.Repaint;
end;end.
窗体文件:


object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 348ClientWidth = 383Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePosition = poDesktopCenterOnCreate = FormCreatePixelsPerInch = 96TextHeight = 13object PaintBox1: TPaintBoxLeft = 8Top = 195Width = 367Height = 145OnPaint = PaintBox1Paintendobject RadioGroup1: TRadioGroupLeft = 239Top = 8Width = 136Height = 81Caption = 'RadioGroup1'TabOrder = 0OnClick = RadioGroup1Clickendobject RadioGroup2: TRadioGroupLeft = 239Top = 104Width = 136Height = 85Caption = 'RadioGroup2'TabOrder = 1OnClick = RadioGroup2Clickendobject RadioGroup3: TRadioGroupLeft = 8Top = 8Width = 225Height = 181Caption = 'RadioGroup3'TabOrder = 2OnClick = RadioGroup3Clickend
end
文本对齐方式:

Delphi微软说明
StringAlignmentCenter Center 指定文本在布局矩形中居中对齐。
StringAlignmentFarFar指定文本远离布局矩形的原点位置对齐。在左到右布局中,远端位置是右。在右到左布局中,远端位置是左。
StringAlignmentNearNear指定文本靠近布局对齐。在左到右布局中,近端位置是左。在右到左布局中,近端位置是右。


文本格式化标志:

Delphi微软说明
StringFormatFlagsDirectionRightToLeftDirectionRightToLeft按从右向左的顺序显示文本。
StringFormatFlagsDirectionVerticalDirectionVertical文本垂直对齐。
StringFormatFlagsDisplayFormatControlDisplayFormatControl控制字符(如从左到右标记)随具有代表性的标志符号一起显示在输出中。
StringFormatFlagsFitBlackBoxFitBlackBox允许部分字符延伸该字符串的布局矩形。默认情况下,将重新定位字符以避免任何延伸。
StringFormatFlagsLineLimitLineLimit在格式化的矩形中只布置整行。默认情况下,这种布置要继续到文本的结尾为止,或者到由于剪辑而不再有可见的行为止,看哪一种情况先发生。注意,此默认设置允许不是行高整数倍的格式化矩形将最后一行部分地遮住。若要确保看到的都是整行,请指定此值,并仔细地提供格式化矩形,使其高度至少为一个行高。
StringFormatFlagsMeasureTrailingSpaces MeasureTrailingSpaces 包括每一行结尾处的尾随空格。在默认情况下,MeasureString 方法返回的边框都将排除每一行结尾处的空格。设置此标记以便在测定时将空格包括进去。
StringFormatFlagsNoClipNoClip允许显示标志符号的伸出部分和延伸到边框外的未换行文本。在默认情况下,延伸到边框外侧的所有文本和标志符号部分都被剪裁。
StringFormatFlagsNoFontFallbackNoFontFallback对于请求的字体中不支持的字符,禁用回退到可选字体。缺失的任何字符都用缺失标志符号的字体显示,通常是一个空的方块。
StringFormatFlagsNoWrapNoWrap在矩形内设置格式时,禁用文本换行功能。当传递的是点而不是矩形时,或者指定的矩形行长为零时,已隐含此标记。



转:https://my.oschina.net/hermer/blog/320800



推荐阅读
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 出库管理 | 零件设计中的状态模式学习心得与应用分析
    出库管理 | 零件设计中的状态模式学习心得与应用分析 ... [详细]
  • 在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢! ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
author-avatar
小男生2502863203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有