L
littley
Unregistered / Unconfirmed
GUEST, unregistred user!
我根据论坛上的帖子,采用以下方法将RICHEDIT的内容存到IMAGE中,最终目的是得到BMP图形。
既richedit-->bmp的问题。
原文作者说,只要IMAGE的尺寸合适,可得到整个RICHEDIT的内容,我的问题就是,如何确定
这个IMAGE的尺寸,使得其能存下RICHEDIT的所有内容?
或者:下述方法得到的图形与RICHEDIT中的显示格式又出入(特别是在RICHEDIT中有大段的文字
时尤为明显),如果诸位大侠有更好的将RICHEDIT中内容转化为BMP的方法(完全所见所得)
可得这300分外,我愿意再送200分。我试过抓图(抓当前显示的部分内容),剩下部分如何
滚动到一个合适的位置,一直让我头痛,因为有可能有最后一行字只有上半部分显示再RICHEDIT上
///////////////////////////////
附:我上文所说的RICHEDIT-->BMP的方法
uses RichEdit;
procedure TForm1.Button1Click(Sender: TObject);
var
Range: TFormatRange;
LastChar, MaxLen, LogX, LogY: Integer;
begin
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(RichEdit1.Handle, EM_FORMATRANGE, 1,
Longint(@Range));
until (LastChar >= MaxLen) or (LastChar = -1);
end;
SendMessage(RichEdit1.Handle, EM_FORMATRANGE, 0, 0);
Image1.Refresh;
end;
既richedit-->bmp的问题。
原文作者说,只要IMAGE的尺寸合适,可得到整个RICHEDIT的内容,我的问题就是,如何确定
这个IMAGE的尺寸,使得其能存下RICHEDIT的所有内容?
或者:下述方法得到的图形与RICHEDIT中的显示格式又出入(特别是在RICHEDIT中有大段的文字
时尤为明显),如果诸位大侠有更好的将RICHEDIT中内容转化为BMP的方法(完全所见所得)
可得这300分外,我愿意再送200分。我试过抓图(抓当前显示的部分内容),剩下部分如何
滚动到一个合适的位置,一直让我头痛,因为有可能有最后一行字只有上半部分显示再RICHEDIT上
///////////////////////////////
附:我上文所说的RICHEDIT-->BMP的方法
uses RichEdit;
procedure TForm1.Button1Click(Sender: TObject);
var
Range: TFormatRange;
LastChar, MaxLen, LogX, LogY: Integer;
begin
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(RichEdit1.Handle, EM_FORMATRANGE, 1,
Longint(@Range));
until (LastChar >= MaxLen) or (LastChar = -1);
end;
SendMessage(RichEdit1.Handle, EM_FORMATRANGE, 0, 0);
Image1.Refresh;
end;