起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 220|回复: 5

电子签章在表单上滚动重影问题**

[复制链接]
发表于 2009-4-1 17:31:22 | 显示全部楼层 |阅读模式
目前电子签章已经可以盖在X3 开发的表单上,但是移动表单的滚动条,就会出现重影,如图,
  1,可否X3开发平台提供就是针对滑动触发刷新下就可以了。进行图形的重绘
  2,或者直接提供滚动事件,我们自己刷新电子公章,目前对这个表单我们无法操作。

2222.jpg

36.97 KB, 下载次数: 161

回复

使用道具 举报

发表于 2009-4-2 17:20:51 | 显示全部楼层
这个问题一直在测试,请等待结果。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-3 15:58:10 | 显示全部楼层
一周又过去了。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2009-4-3 16:05:30 | 显示全部楼层
这个是我在平台里面做的测试,需要把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;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-3 16:24:42 | 显示全部楼层
目前控件已经有刷新方法,但是我们表单里面触发不了
回复 支持 反对

使用道具 举报

发表于 2009-4-3 16:29:46 | 显示全部楼层
就是使用4楼的触发条件啊,把Docview放到动态创建的scorllbox中,然后重载wndproc方法,处理scrollbox的滚动条消息。
docview 的align属性要设置成alnone,并且把它拉到最大,不让它本身产生滚动条。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 21:02 , Processed in 0.051269 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表