程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 再學GDI+[45]: 文本輸出 - 在矩形中格式化輸出 <2>

再學GDI+[45]: 文本輸出 - 在矩形中格式化輸出 <2>

編輯:Delphi

本例效果圖:

代碼文件:unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
 TForm1 = 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;
var
 Form1: TForm1;
implementation
{$R *.dfm}
uses GDIPOBJ, GDIPAPI, TypInfo;
var
 sfFlag: Integer;
procedure TForm1.FormCreate(Sender: TObject);
var
 i: Integer;
begin
 for i := 0 to 2 do
  RadioGroup1.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);
var
 g: TGPGraphics;
 b: TGPBrush;
 font: TGPFont;
 sf: TGPStringFormat;
 rect: TGPRectF;
begin
 g := 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);
begin
 PaintBox1.Repaint;
end;
procedure TForm1.RadioGroup2Click(Sender: TObject);
begin
 PaintBox1.Repaint;
end;
procedure TForm1.RadioGroup3Click(Sender: TObject);
begin
 case RadioGroup3.ItemIndex of
  0: 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: TForm1
 Left = 0
 Top = 0
 Caption = 'Form1'
 ClientHeight = 348
 ClientWidth = 383
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 Position = poDesktopCenter
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object PaintBox1: TPaintBox
  Left = 8
  Top = 195
  Width = 367
  Height = 145
  OnPaint = PaintBox1Paint
 end
 object RadioGroup1: TRadioGroup
  Left = 239
  Top = 8
  Width = 136
  Height = 81
  Caption = 'RadioGroup1'
  TabOrder = 0
  OnClick = RadioGroup1Click
 end
 object RadioGroup2: TRadioGroup
  Left = 239
  Top = 104
  Width = 136
  Height = 85
  Caption = 'RadioGroup2'
  TabOrder = 1
  OnClick = RadioGroup2Click
 end
 object RadioGroup3: TRadioGroup
  Left = 8
  Top = 8
  Width = 225
  Height = 181
  Caption = 'RadioGroup3'
  TabOrder = 2
  OnClick = RadioGroup3Click
 end
end

文本對齊方式:

Delphi 微軟 說明 StringAlignmentCenter Center 指定文本在布局矩形中居中對齊。 StringAlignmentFar Far 指定文本遠離布局矩形的原點位置對齊。在左到右布局中,遠端位置是右。 在右到左布局中,遠端位置是左。 StringAlignmentNear Near 指定文本靠近布局對齊。在左到右布局中,近端位置是左。在右到左布局中 ,近端位置是右。

文本格式化標志:

Delphi 微軟 說明 StringFormatFlagsDirectionRightToLeft DirectionRightToLeft 按從右向左的順序顯示文本。 StringFormatFlagsDirectionVertical DirectionVertical 文本垂直對齊。 StringFormatFlagsDisplayFormatControl DisplayFormatControl 控制字符(如從左到右標記)隨具有代表性的標志符號一起顯示在輸出中。 StringFormatFlagsFitBlackBox FitBlackBox 允許部分字符延伸該字符串的布局矩形。默認情況下,將重新定位字符以避 免任何延伸。 StringFormatFlagsLineLimit LineLimit 在格式化的矩形中只布置整行。默認情況下,這種布置要繼續到文本的結尾 為止,或者到由於剪輯而不再有可見的行為止,看哪一種情況先發生。注意,此默認設置允許 不是行高整數倍的格式化矩形將最後一行部分地遮住。若要確保看到的都是整行,請指定此值 ,並仔細地提供格式化矩形,使其高度至少為一個行高。 StringFormatFlagsMeasureTrailingSpaces MeasureTrailingSpaces 包括每一行結尾處的尾隨空格。在默認情況下,MeasureString 方法返回的 邊框都將排除每一行結尾處的空格。設置此標記以便在測定時將空格包括進去。 StringFormatFlagsNoClip NoClip 允許顯示標志符號的伸出部分和延伸到邊框外的未換行文本。在默認情況下 ,延伸到邊框外側的所有文本和標志符號部分都被剪裁。 StringFormatFlagsNoFontFallback NoFontFallback 對於請求的字體中不支持的字符,禁用回退到可選字體。缺失的任何字符都 用缺失標志符號的字體顯示,通常是一個空的方塊。 StringFormatFlagsNoWrap NoWrap 在矩形內設置格式時,禁用文本換行功能。當傳遞的是點而不是矩形時,或 者指定的矩形行長為零時,已隱含此標記。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved