起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 5579|回复: 10

修改界面方案指南

[复制链接]
发表于 2004-5-10 10:51:16 | 显示全部楼层 |阅读模式
如果是自己新建一个主界面,请采用下面的方法
如果是想在26XX版本或者28XX版本上修改主界面,请跟这个类似
=======================================================

系统空间和思维加速空间,强力建议不做任何的修改,当然也不要增加自己的单元,在升级的时候,会删除这两个空间的所有内容的(除了可以扩展部门表、岗位表、人员表之外)。

Business平台本身提供了界面方案,用户在使用平台开发的过程中,往往希望使用个性化的界面方案,但是不能在“系统空间”下界面方案的基础上直接修改,因为在版本升级的时候,会删除“系统空间”。本部分主要讲述如何在Business平台中使用个性化的界面方案。

新建一个业务空间(JMKJ),用来专门存放主界面方案的相关资源,下面讲述的有:主界面、欢迎界面、关于窗体、登陆界面、工具栏、流传窗体、用户参数录入界面、历史数据窗体,其他的部分的修改,请参考系统空间下相应对象。

实现步骤:

1、新建一个资源集“主界面资源集”,在这个资源集(ZJMZYJ)中,新建一个主界面(TZJM),作为主窗体

提示: 在主窗体的修改中,如果是继承过来的,需要注意的问题如下:
A、主窗体的caption不可以修改
B、如果要修改主窗体的菜单显示需要在Actionlist的相应项上修改。
C、不要在系统空间和思维加速空间下面,做任何的修改,也不要增加自己的单元,在升级的时候,会删除这两个空间的所有内容。

2、新建一个资源集,从 系统空间\用户界面基础\界面\系统接口 继承,ID必须为SystemInterface

3、在“界面系统接口”引用创建的主窗体的资源集ZJMZYJ;引用刚才创建的主窗体的资源集ZKMainForm
    function CreateMainForm(AContext: TContext): TForm; override;

在单元的uses中增加Business.Forms

function TSystemInterface.CreateMainForm(AContext: TContext): TForm;
begin
  Result := ZJMZYJ.TZJM.Create(AContext);
end;

4、根据实际的需求设计相关的界面。(详细见相关界面的说明);

5、编译整个JMKJ空间,并签入;

6、运行“系统空间\系统功能\界面方案管理”加入空间JMKJ,并设置为默认。



注意:
A、 第3步,“新建一个窗体,作为主窗体”
这个窗体可以根据你的需要来任意的作,没有限制的,只要你能作一个这样的窗体把它作为主窗体就可以了
B、 在主界面中如果需要用到环境,请用下面的写法
TSystemCore.Operator.Context
(以前提供的组件库的方法现在的版本26xx以后的版本不能用了CommonComponentLibrary.TCommonComponentLibrary.UserSystem.CurrentPosition.Context)
C. 在系统核心库定义了三个事件,分别在功能运行、功能激活、功能终止时候触发,
TSystemCore.FuncManager.OnFuncRun
TSystemCore.FuncManager.OnFuncActivate
TSystemCore.FuncManager.OnFuncTerminate
可以在主窗体上定义三个函数来截获事件
函数的说明为:
  TFuncNotifyEvent = procedure(Sender: TObject; Func: TFunc) of object;
回复

使用道具 举报

 楼主| 发表于 2004-5-12 10:55:26 | 显示全部楼层

如何处理:欢迎界面、关于窗体、登陆界面

1、欢迎界面:只需要修改安装后bin目录下的splash图片。

2、关于窗体:在主界面资源集下建关于窗体“GYCT”,关于窗体不要继承直接新建(因为这个窗体里没有代码)。

procedure TZJM.actAboutTIBExecute(Sender: TObject);
var
  GYCT :TGYCT;
begin
// Inherited;
//提示  这个是继承的窗体,因为这个界面没有写代码,所以不必继承过来,只要自己新建一个窗体,显示出来就可以了。所以这时把Inherited屏蔽掉。
  try
    GYCT := TGYCT.Create(nil);
    GYCT.ShowModal;
  finally
    GYCT.Free;
  end;
end;


3、登陆界面

3.1、在“系统接口”继承登录对话框DLDHK ,然后设计这个窗体,在“系统接口”中定义

function ShowLogonForm(var ALogonID, APassword: string): Boolean; override;

3.2、然后在这个函数中创建DHK登陆对话框TDLDHK;

function TSystemInterface.ShowLogonForm(var ALogonID, APassword: string): Boolean;
begin
  with TDLDHK.Create(nil) do
  try
    eName.Text := ALogonID;
    ePass.Text := APassword;
    if ShowModal = Business.Forms.Controls.mrOK then
    begin
      ALogonID := eName.Text;
      APassword := ePass.Text;
      Result := True;
      Forms.Application.ProcessMessages;
    end
    else
      Result := False;
  finally
      Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-31 10:46:50 | 显示全部楼层

如何处理: 工具栏、流转窗体

1、工具栏

拷贝“系统空间\默认用户界面\工具栏”到“界面空间\界面文件夹”中,修改这个工具栏ID一定要是ToolBar,然后拷贝“数据集导航条” 或者 新建一个数据集导航条,只要ID是DataSetBar就可以了,然后就可以在这个工具栏上增加新按钮或者修改图标、修改Caption等


2、流转窗体

2.1、在“系统接口”继承流转窗体LZCT ,设计该窗体。在“系统接口”中定义;

function EditFlowOutFlowTasks(ACommand: TFlowOutCommand): Boolean; override;

Function TSystemInterface.EditFlowOutFlowTasks(ACommand: TFlowOutCommand): Boolean;
begin
  Result:=TFlowOutForm1.EditFlowOutFlowTasks(Self.Context, ACommand.FlowTasks,
  ACommand.AllowFlowTasks, ACommand.FlowTaskGraph, True);
end;

2.2、然后在流转窗体LZCT里定义

static function EditFlowOutFlowTasks(AContext:TContext;
  AFlowTasks, AAllowFlowTasks: TFlowTasks; AFlowTaskGraph: TFlowTaskGraph;
       const AShowUnPassNode: Boolean): Boolean;

static function TLZCT.EditFlowOutFlowTasks(AContext: TContext;
  AFlowTasks, AAllowFlowTasks: TFlowTasks; AFlowTaskGraph: TFlowTaskGraph;
const AShowUnPassNode: Boolean): Boolean;
begin
  with TLZCT.Create(AContext) do
  try
    FlowTasks := AFlowTasks;
    AllowFlowTasks := AAllowFlowTasks;
    ShowUnPassNode := AShowUnPassNode;
    FlowTaskGraph := AFlowTaskGraph;
    Result := (ShowModal = Business.Forms.Controls.mrOk);
  finally
    Free;
  end;
end;



如果发现自定义的TBizToolBar没有被应用,请检查一下该组件的 UseUITheme 属性是否选中。 这个属性为True时,系统自动到用户自定义的界面空间中寻找这个ID的工具条;如果为False,就取系统默认的工具条,即“系统功能 - 用户界面基础 - 界面 -工具栏”。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-30 17:51:15 | 显示全部楼层

如何处理:用户参数录入界面

步骤:

1、在“系统接口”继承 用户参数录入YHCSLR ,设计该窗体;
在“系统接口”中定义
function EditParamsValue(AContext: TContext; AParams: TStrings): Boolean; override;

function TSystemInterface.EditParamsValue(AContext: TContext; AParams: TStrings): Boolean;
begin
  Result := TYHCSLR.EditParamsValue(AContext, AParams);
end;
2、在用户参数录入YHCSLR窗体里定义
static function EditParamsValue(AContext: TContext;AParams: TStrings): Boolean;

static function TYHCSLR.EditParamsValue(AContext: TContext;
  AParams: TStrings): Boolean;
begin
  with TYHCSLR.Create(AContext) do
    try
      Params := AParams;
      Result := (ShowModal = Business.Forms.Controls.mrOk);
    finally
      Free;
    end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-16 10:12:52 | 显示全部楼层

如何处理:历史数据窗体

步骤:

1、在“系统接口”继承 历史数据窗体LSSJCT ,设计该窗体。在“系统接口”中定义

procedure ShowTaskHistoryData(const AContext: TContext;
       const ATask: TTask); overload; override;

procedure ShowTaskHistoryData(const ADeptID, APositionID, APersonID: string;
      const ATask: TTask); overload; override;

procedure TSystemInterface.ShowTaskHistoryData(const ADeptID, APositionID, APersonID: string;const ATask: TTask);
begin
  TLSSJCT.ShowTaskHistoryData(ADeptID, APositionID, APersonID, ATask);
end;
Procedure TSystemInterface.ShowTaskHistoryData(const AContext: TContext;const ATask: TTask);
begin
  TLSSJCT.ShowTaskHistoryData(AContext, ATask);
end;

2、然后在历史数据窗体LSSJCT里定义

static procedure ShowTaskHistoryData(const AContext: TContext;
      const ATask: TTask); overload;

static procedure ShowTaskHistoryData(const ADeptID, APositionID,
      APersonID: string; const ATask: TTask); overload;

static procedure TLSSJCT.ShowTaskHistoryData(const AContext: TContext;
  const ATask: TTask);
const
  cFormat_HistoryDataCaption = '阳光集团历史数据 [ %s ]';
var
  lForm: TLSSJCT;
begin
  lForm := TLSSJCT.Create(AContext);
  try
    lForm.PositionContext := AContext; //必须在赋值Task之前赋
    lForm.Task := ATask;
    lForm.Caption:=SysUtils.Format(cFormat_HistoryDataCaption, [ATask.Subject]);
    lForm.ShowModal;
  finally
    lForm.Free;
  end;
end;
static procedure TLSSJCT.ShowTaskHistoryData(const ADeptID,
  APositionID, APersonID: string; const ATask: TTask);
const
  cFormat_HistoryDataCaption = '阳光集团历史数据 [ %s ]';
var
  lForm: TLSSJCT;
begin
  lForm := TLSSJCT.Create(nil);
  try
    lForm.DeptID := ADeptID;
    lForm.PositionID := APositionID;
    lForm.PersonID := APersonID;
    lForm.Task := ATask;
    lForm.Caption := SysUtils.Format(cFormat_HistoryDataCaption, [ATask.Subject]);
    lForm.ShowModal;
  finally
    lForm.Free;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2004-8-25 17:34:13 | 显示全部楼层

用户界面的系统接口(BaseSystemInterface)继承函数说明

1.创建系统运行主界面的虚函数
声明:
function CreateMainForm(AContext: TContext): TForm; override;
实现:
function TSystemInterface.CreateMainForm(AContext: TContext): TForm;
begin
  Result := ZKMainForm.TXPMainForm.Create(AContext);
end;
2.创建系统登陆界面的虚函数。
声明:
function ShowLogonForm(var ALogonID,APassword:string):Boolean;override;
实现:
function TSystemInterface.ShowLogonForm(var ALogonID, APassword: string): Boolean;
begin
  Result := TLogonForm.ShowLogonForm(ALogonID, APassword);
end;
3.创建登陆用户参数界面的虚函数。
声明:
function EditParamsValue(AContext: TContext; AParams: TStrings): Boolean; override;
实现:
function EditParamsValue(AContext: TContext; AParams: TStrings): Boolean;
begin
Result := TUserParamValueEditorForm.EditParamsValue(AContext, AParams);
end;
4.创建SQL条件构造窗体的虚函数。
声明:
    function BuildSQLFilter(ADataSet: TBizDataSet; var AFilter: string): Boolean; override;
实现:
function TBaseSystemInterface.BuildSQLFilter(ADataSet: TBizDataSet; var AFilter: string): Boolean;
begin
  Result := TSimpleSQLFilterBuildForm.BuildSQLFilter(ADataSet, AFilter);
end;
4.创建选择任务对话框的虚函数。
声明:
function SelectTasks(ASoruce, ASelected: TList): Boolean; override;
实现:
function TBaseSystemInterface.SelectTasks(ASoruce, ASelected: TList): Boolean;
begin
  Result := TSelectTasksForm.SelectTasks(Self.Context, ASoruce, ASelected);
end;
5.控制流程流转的虚函数。
声明:
function EditFlowOutFlowTasks(ACommand: TFlowOutCommand): Boolean; override;
实现:
function TBaseSystemInterface.EditFlowOutFlowTasks(ACommand: TFlowOutCommand): Boolean;
begin
  Result := TFlowOutForm.EditFlowOutFlowTasks(Self.Context, ACommand.FlowTasks,
    ACommand.AllowFlowTasks, ACommand.FlowTaskGraph, True);
end;
6.控制流程回退的虚函数。
声明:
    function EditFlowBackFlowTasks(ACommand: TFlowBackCommand): Boolean; override;
实现:
function TBaseSystemInterface.EditFlowBackFlowTasks(ACommand: TFlowBackCommand): Boolean;
begin
  Result := TSelectFlowTaskListForm.EditFlowTasks(Self.Context, '回退', ACommand.FlowTasks,
    True);
end;
7.控制流程转发的虚函数。
声明:
    function EditFlowTransmitFlowTasks(ACommand: TFlowTransmitCommand): Boolean; override;
实现:
function TBaseSystemInterface.EditFlowTransmitFlowTasks(ACommand: TFlowTransmitCommand): Boolean;
begin
  Result := TSelectFlowTaskListForm.EditFlowTasks(Self.Context, '转发', ACommand.FlowTasks,
    True);
end;
8.选择流程任务列表窗体的虚函数。
声明:
    function EditFlowNotifyFlowTasks(ACommand: TFlowNotifyCommand): Boolean; override;
实现:
function TBaseSystemInterface.EditFlowNotifyFlowTasks(ACommand: TFlowNotifyCommand): Boolean;
begin
  Result := TSelectFlowTaskListForm.EditFlowTasks(Self.Context, '通知', ACommand.FlowTasks,
    False);
end;
9.创建历史数据窗体的虚函数。
声明:
    procedure ShowTaskHistoryData(const AContext: TContext;
       const ATask: TTask); overload; override;
    procedure ShowTaskHistoryData(const ADeptID, APositionID, APersonID: string;
实现:
procedure TBaseSystemInterface.ShowTaskHistoryData(const ADeptID, APositionID, APersonID: string;
  const ATask: TTask);
begin
    TTaskHistoryDataForm.ShowTaskHistoryData(ADeptID, APositionID, APersonID, ATask);
end;

    False);
end;
10.创建流程浏览的虚函数。
声明:
    procedure ShowFlowView(const AFlow: TFlow); override;
实现:
procedure TBaseSystemInterface.ShowFlowView(const AFlow: TFlow);
begin
  TFlowViewForm.ShowFlowViewForm(AFlow);
end;


你可以理解8楼的虚函数的声明、实现,然后就可以根据自己的个性化需求重载相应的函数更改相应的窗体了
回复 支持 反对

使用道具 举报

发表于 2004-12-10 16:15:08 | 显示全部楼层

例子

附件是一个以这些说明生成的例子

界面.rar

84.68 KB, 下载次数: 659

回复 支持 反对

使用道具 举报

发表于 2004-12-10 16:18:41 | 显示全部楼层

如何自定义图标

步骤:

1、创建自己的资源集,新建自己的图标,注意图标的ID一定要与 系统空间\用户界面基础\库\公共图形资源库 中的一样

2、在 系统接口 中,引入 系统空间\用户界面基础\库\公共组件库

3、在 系统接口 的创建主窗体函数中,修改 CommonComponentLibrary.TCommonComponentLibrary.UserGraphics.GraphicsLibraryURL 为刚才创建的资源集
function TSystemInterface.CreateMainForm(AContext: TContext): TForm;
begin
  CommonComponentLibrary.TCommonComponentLibrary.UserGraphics.GraphicsLibraryURL := 'Biz:\CSKJ\CommonGraphicsResourceLibraryXP.Library';
  Result := MyMainForm.TProfessional.Create(AContext);
end;
回复 支持 反对

使用道具 举报

发表于 2004-12-28 10:42:34 | 显示全部楼层

如何修改窗体的图标

实现步骤:

1、通过界面方案实现界面

2、在主窗体中,修改它的“Icon”属性就可以了,但需要遵循Windows的标准,大图标是32*32,小图标是16*16规格。
   Icon 是存放大图标的(程序切换时使用的),还有一个属性 SmallIcon 是存放小图标,就是运行窗体的图标。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-18 14:54:51 | 显示全部楼层
如果要在26XX版本上修改主界面,可以参考 http://wiki.justep.cn/mywiki/moin.cgi/UserInterface
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-4-24 20:52 , Processed in 0.052155 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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