请教高手如何把具有滚动条的RichEdit控件内的图像保存到TBitmap对象中去? ( 积分: 100 )

  • 主题发起人 主题发起人 phoenixwonder
  • 开始时间 开始时间
P

phoenixwonder

Unregistered / Unconfirmed
GUEST, unregistred user!
RichEdit控件中的内容比较多,超出了控件客户区的可显示范围,我想把整个RichEdit控件中的所有内容(包括看不见的)保存至一个TBitmap对象中去,如何实现呢?
 
RichEdit控件中的内容比较多,超出了控件客户区的可显示范围,我想把整个RichEdit控件中的所有内容(包括看不见的)保存至一个TBitmap对象中去,如何实现呢?
 
咳, 自己顶了!
 
好久以前盒子上就有这样的代码了,自己找找吧
 
希望懂的朋友能够赐教一下实现的原理, 多谢了!
 
沉的真快阿
 
看看RichEdit的打印方法代码就可以了!
把打印机的HDC换成图片的HDC,简单之极!

procedure TCustomRichEdit.Print(const Caption: string);
var
Range: TFormatRange;
LastChar, MaxLen, LogX, LogY, OldMap: Integer;
SaveRect: TRect;
begin
FillChar(Range, SizeOf(TFormatRange), 0);
with Printer, Range do
begin
Title := Caption;
BeginDoc;
hdc := Handle;
hdcTarget := hdc;
LogX := GetDeviceCaps(Handle, LOGPIXELSX);
LogY := GetDeviceCaps(Handle, LOGPIXELSY);
if IsRectEmpty(PageRect) then
begin
rc.right := PageWidth * 1440 div LogX;
rc.bottom := PageHeight * 1440 div LogY;
end
else begin
rc.left := PageRect.Left * 1440 div LogX;
rc.top := PageRect.Top * 1440 div LogY;
rc.right := PageRect.Right * 1440 div LogX;
rc.bottom := PageRect.Bottom * 1440 div LogY;
end;
rcPage := rc;
SaveRect := rc;
LastChar := 0;
MaxLen := GetTextLen;
chrg.cpMax := -1;
// ensure printer DC is in text map mode
OldMap := SetMapMode(hdc, MM_TEXT);
SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); // flush buffer
try
repeat
rc := SaveRect;
chrg.cpMin := LastChar;
LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, Longint(@Range));
if (LastChar < MaxLen) and (LastChar <> -1) then NewPage;
until (LastChar >= MaxLen) or (LastChar = -1);
EndDoc;
finally
SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); // flush buffer
SetMapMode(hdc, OldMap); // restore previous map mode
end;
end;
end;
 
上面仁兄的回答对我还是很有启发的,多谢了。其实我是想问更一般得情况,比如像Memo,ListBox, ListView这样的控件,这里只是拿了一个RichEdit控件来讲,一旦数
据多得超出了控件尺寸显示范围、产生了滚动条之后,我如何能把控件当中的所有内
容(包括看见的和不可见的)能够存到我指定的一块内存DC里去。
希望能帮忙的朋友多提宝贵意见了![:)]
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部