这个是我在平台里面做的测试,需要把docview放到动态创建的Tscollbox(继承的)里面,然后在override的wndproc事件中进行刷新,刷新的方法是递归刷新docview所有的twincontrol控件,我这里测试图章盖到docview中的sheetdoc上是没有问题了,因为控件本身刷新有问题,不排除个别地方还有重影的问题。
unit MainForm;
interface
uses
Business.System, Business.Model, Business.Forms, YWXX1, jg,Borland.Delphi.Messages;
type
TMainForm = class(TForm)
FuncBroker: TFuncBroker;
InfoBrokerYWXX1: TInfoBroker;
ControlBar: TControlBar;
DataNavigator: TDataNavigator;
DocViewBar: TDocViewBar;
Button1: TButton;
Image1: TImage;
Button2: TButton;
Button3: TButton;
DocViewYWXX1_BGWD2: TDocView;
SignatureForm1: TSignatureForm;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure BizFormCreate(Sender: TObject);
procedure BizFormDestroy(Sender: TObject);
private
{private declarations}
public
static procedure digui(lwc:TwinControl);
//procedure New(var message: Borland.Delphi.Messages.TMessage); {public declarations}
end;
TMyScrollBox =Class(TScrollBox)
protected
procedure WndProc(var Message: TMessage);override;
end;
implementation
var lMyScrollBox :TMyScrollBox;
lDV :TDocView;
procedure TMainForm.Button2Click(Sender: TObject);
begin
SignatureForm1.RunSignature(True);
end;
procedure TMainForm.Button3Click(Sender: TObject);
begin
{TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[0]).controls[0]).Controls[0]).controls[0]).Invalidate;
TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[1]).controls[0]).Controls[0]).controls[0]).Invalidate;
TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[2]).controls[0]).Controls[0]).controls[0]).Invalidate;
//TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[2]).controls[1]).Controls[1]).Invalidate;
//TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[2]).controls[1]).Controls[1]).controls[0]).Invalidate;
//TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[2]).controls[1]).Controls[2]).controls[0]).Invalidate;
TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(TWinControl(DocViewYWXX1_BGWD2.Controls[0]).controls[0]).controls[3]).controls[0]).Controls[0]).controls[0]).Invalidate;
}
end;
static procedure TMainForm.digui(lwc:TwinControl);
var i :Integer;
o :TWinControl;
begin
if lwc.ControlCount > 0 then
begin
for i :=0 to lwc.ControlCount -1 do
begin
if lwc.Controls is TWinControl then
begin
o :=TWinControl(lwc.Controls);
o.Invalidate;
digui(o);
end;
end;
end;
end;
procedure TMainForm.BizFormCreate(Sender: TObject);
begin
lDV := DocViewYWXX1_BGWD2;
lMyScrollBox := TMyScrollBox.Create(nil);
lMyScrollBox.Parent :=self;
lMyScrollBox.Height :=400;
lMyScrollBox.Width :=400;
lMyScrollBox.Visible :=True;
DocViewYWXX1_BGWD2.Parent :=lMyScrollBox;
SignatureForm1.BringToFront;
end;
procedure TMainForm.BizFormDestroy(Sender: TObject);
begin
lMyScrollBox.Free;
end;
procedure TMyScrollBox.WndProc(var Message: TMessage);
begin
inherited;
if ((Message.Msg=WM_VSCROLL)or (Message.Msg=WM_HSCROLL)or(Message.Msg=WM_MOUSEWHEEL))then
TMainForm.digui(TwinControl(lDV));
end; |