我想问一下memo里边如何增加图片?能否后台读取word文档(带图片)?(100分)

  • 主题发起人 主题发起人 天堂鸟5
  • 开始时间 开始时间

天堂鸟5

Unregistered / Unconfirmed
GUEST, unregistred user!
我想问一下memo里边如何增加图片?能否后台读取word文档(带图片)?
 
Delphi自带的memo里边是不可能增加图片的,你还是用第三方控件吧,比如:RichView
 
TMS Component Pack
 
我是一个新手,请问跟哪下载那些空件?
 
还是不明白怎么下载控件~
 
http://www.51delphi.com 上有...
 
memo 当然可以带图片,只是需要自己写代码完成。如果不想写成控件,可以利用 memo
的重画时间,画出自己的东西,要知道它什么时候重画,就要找到它的窗口方法,分析
进入 memo 的全部消息,从中取得 WM_Paint 消息。
1) 获取和改变 memo 的窗口方法:
var
NewPiont:Pointer;
Begin
MemoPiont:=Pointer(GetWindowLong(Memo.Handle,GWL_WNDPROC));
NewPiont:=MakeObjectInstance(MemoWndMethod);
SetWindowLong(memo.Handle, GWL_WNDPROC, Longint(NewPiont));
end;
2)写自己的窗口方法,分离进入 Memo 的消息
procedure TForm1.MemoWndMethod(var Msg: TMessage);
begin
case Msg.Msg of
WM_Paint:
begin
MemoPaint(TWMPaint(Msg));// 分离得到 WM_Paint 消息
Msg.Result:=0;
end;
end;
Msg.Result := CallWindowProc(MemoPiont,Memo.Handle,Msg.Msg,Msg.WParam,Msg.LParam);
end;
3)执行新的重画任务
procedure TForm1.MemoPaint(var Message: TWMPaint);
var
PS: TPaintStruct;
DC: HDC;
Bitmap:TBitmap;
begin
DC := Message.DC;
Bitmap:TBitmap.Create;
Bitmap.LoadFromFile('xx.bmp');

if DC = 0 then
DC := BeginPaint(Memo.Handle, PS);
try
// 这里有点细工夫,就是确定绘图位置,确定滚动等
// 比较烦琐,略掉了.... 然后就是往 memo 画:
BitBlt(DC,x,y,w,h,Bitmap.Canvas.Handle,sx,sy,SrcCopy);
// 其他处理 ....
finally
EndPaint(Memo.Handle, PS);
Bitmap.Free;
end;
end;
原理大概就是这样了,但要做得好,就要花工夫,有专门的控件的话,建议利用。
 

Similar threads

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