📄 formrichesavetobmpunit.pas
字号:
unit FormRichESaveToBmpUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, RichEdit, Spin;
type
TFormRichESaveToBmp = class(TForm)
ScrollBox1: TScrollBox;
SaveDialog1: TSaveDialog;
Panel1: TPanel;
Panel2: TPanel;
Button2: TButton;
Button1: TButton;
SpinEdit1: TSpinEdit;
Label1: TLabel;
SpinEdit2: TSpinEdit;
Label2: TLabel;
Button3: TButton;
Panel3: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
private
Image1: TImage;
public
procedure createImage;
procedure DrawRichEditImage;
end;
var
FormRichESaveToBmp: TFormRichESaveToBmp;
implementation
uses FormMainUnit;
{$R *.dfm}
procedure TFormRichESaveToBmp.createImage;
begin
Image1 := TImage.Create(nil);
Image1.Parent := ScrollBox1;
Image1.Width := SpinEdit2.Value;
Image1.Height := spinEdit1.Value;
image1.Visible := true;
end;
procedure TFormRichESaveToBmp.DrawRichEditImage;
var
Range : TFormatRange;
LastChar, MaxLen, LogX, LogY: Integer;
begin
createImage;
FillChar(Range, SizeOf(TFormatRange), 0);
with Image1, Range do
begin
LogX := GetDeviceCaps(Canvas.Handle, LOGPIXELSX);
LogY := GetDeviceCaps(Canvas.Handle, LOGPIXELSY);
hdc := Canvas.Handle;
hdcTarget := hdc;
rc.right := Image1.ClientWidth * 1440 div LogX;
rc.bottom := Image1.ClientHeight * 1440 div LogY;
rcPage := rc;
LastChar := 0;
MaxLen := GetTextLen;
chrg.cpMax := -1;
repeat
chrg.cpMin := LastChar;
LastChar := SendMessage(FormMainUnit.FormMain.richEdit.Handle,
EM_FORMATRANGE, 1,
Longint(@Range));
until (LastChar >= MaxLen) or (LastChar = -1);
end;
SendMessage(FormMainUnit.FormMain.richEdit.Handle, EM_FORMATRANGE, 0, 0);
Image1.Refresh;
end;
procedure TFormRichESaveToBmp.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Image1.Picture.SaveToFile(ChangeFileExt(SaveDialog1.fileName, '.bmp'));
end;
procedure TFormRichESaveToBmp.FormCreate(Sender: TObject);
begin
if abs(formMain.richEdit.Lines.Count * (abs(formMain.RichEdit.Font.Height) +
5)) > 400 then
Spinedit1.Value := abs(formMain.richEdit.Lines.Count *
(abs(formMain.RichEdit.Font.Height) + 5))
else
spinedit1.value := 400;
spinedit2.Value := 640;
DrawRichEditImage;
end;
procedure TFormRichESaveToBmp.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
image1.Free;
end;
procedure TFormRichESaveToBmp.Button3Click(Sender: TObject);
begin
image1.Free;
DrawRichEditImage;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -