出售功能强大稳定运行多年软件架构源码(0)

  • 主题发起人 风清杨
  • 开始时间

风清杨

Unregistered / Unconfirmed
GUEST, unregistred user!
系统框架是非常重要的软件基础架构,它就如DELPHI一样提供了一个开发平台,在这个平台上可以开发出任意的数据库系统软件(如HR系统,ERP系统,进销存等等),架构封装了常用的功能于基类中,提供一个企业级系统所需要的所有功能(如身份验证,菜单注册,权限控制、动态菜单等等),拥有一套成熟稳定的框架即可以快速的开发出应用软件,能大大提高开发速度和软件稳定性。本C/S软件架构利用面向对象编程的特性,把诸如权限控制,消息传送等技术放在基类窗体,然后所有窗体从基类继承,派生窗体加入各自独特的功能,如新增修改删除操作无须写一句代码,可以大大减少工作量,提高系统可维护性。运用此框架能实现快速开发任意数据库系统。开发工具:DELPHI 7数据库:SQL SERVER 2000第三方控件:4个(一起赠送) 本框架特性: *** 本框架EXE+DLL的组织方式,一个模块(如采购管理,库存管理等)编译成一个DLL,所有功能窗体都包含在里面,由主EXE调用,增加模块独立性,如某个模块有更新只需更新相应的DLL,方便发布更新,同时也减少了主程序的体积。 *** 主程序跟DLL之间全部采用消息机制系,增强模块独立性,DLL与主程序共享链接,不管打开N个DLL都只有一个数据库链接。主程序与DLL共享全局数据,如登陆用户信息在主程序中设置好的在任一DLL窗体中都可以调用,方便开发者使用。 *** 主程序的工具栏按扭是征对于所有窗体的可用,其状态根据当前窗体的权限而定,如打印和导出按扭根据当前用户是否有权限来决定灰色还是可用的。这样使系统更加专业化。  *** 每一个窗体都保存了一个当前窗体的记录类型数据,此数据由初始化时设置,保存当前窗体对应的菜单编号,类名,窗体类型等等,方便用户知晓当前功能模块的信息。 *** 所有窗体都由基类窗体BaseForm继承,由此派生出几种常用的窗体基类,如普通对话框窗体,普通子窗体,有表格子窗体,有固定列的窗体,编辑子窗体,查询子窗体等等,窗体要实现的基础功能都放在这些基类窗体,从而在开发时这些窗体的实例就无需写代码就可以实现所有基础功能,如所有数据的新增,修改,删除,导出等操作无须写一句代码,这样大大提高开发速度。  *** 窗体表格采用cxGrid6.22控件,这套控件有以下优点:1、 字段排序功能,有图样标识顺排或逆排2、 单个或多个字段多个过滤值过滤,表格下会显示过滤条件描述,3、 字段可以显示或隐藏(点击表格左上角)4、 每个列可设置为固定列,多表头,设置各种汇总数据(求和,平均值,记录行数)等等,5、 完整导出EXCEL,包括导出颜色,记录数等,在本框架此功能已封装在基类窗体了,实例窗体直接拥有这个功能。 *** 权限设置:1、 菜单显示权限:系统只显示当前用户有打开权限的菜单,没有权限的菜单不会列出来。系统初始化时,根据这份权限表动态生成菜单。2、 默认权限(参阅功能模块管理/新增菜单):系统预设6个默认权限([新增],[修改],[删除],[审核],[导出EXECL],[打印]),用户新增一个菜单就自动添加这些默认权限,可根据当前窗体实际情况设置是否有这些权限,这样设计可以节省用户设计权限的时间。 图23、 用户扩展权限:每个窗体的功能各式各样,不可能只有默认的6个权限,所以系统设计了可以由用户自定义权限,可增加任意多个权限,扩充系统功能。 4、 部门权限:系统DEMO是HR系统,每个用户可操作部门各不相同,这里可让用户设置可操作哪些部门。 5、用户组权限:以组的形式来管理权限,当更新了某个组的权限后,其组内的所有用户就会马上更新权限,这样提高权限设置的效率。 *** 拥有菜单和TreeView两种显示菜单的方式,由用户选择习惯的操作方式,两个控件都调用同一入口函数显示窗体。可以显示多级菜单。 *** 登陆管理:验证系统合法性,防止非法用户进入。输错三次(可设置)密码自动退出。 *** [更改密码]:用户可以通过此界面更改自己的密码。 *** [用户权限管理]:增加用户及修改单个用户权限。为保障系统安全,此功能只对系统管理员可见 *** [用户组权限管理]:编辑用户组资料,保存时可将权限更新到每个组内成员中去。为保障系统安全,此功能只对系统管理员可见 *** [登出系统]:不退出系统的情况下换另一个用户登陆,相当于WINDOWS的注销 *** [系统锁定]:当暂时有时离开桌面时,使用此功能使系统锁定状态,输入密码以后才能解开。 *** [已分配权限用户查询]:界面列出所有功能菜单,点击某个菜单时右边表格会显示出此菜单已分配给哪些用户,这样可以非常清楚权限的分配情况。为保障系统安全,此功能只对系统管理员可见 *** 菜单注册(功能模块管理):此界面用于添加修改菜单,设置默认权限和自定义权限,当你新加一个功能窗体,在这里简单的加一个菜单注册,重启系统就可以看到。为保障系统安全,此功能只对系统管理员可见。 *** 系统全局关联数据: 此功能使系统性能得到很大提升,系统初始化时将所有需用到的关联的数据一次性加载到本地数据集中,当需要使用关联数据(如工号关联带出姓名)的窗体,则直接使用这些内存中的数据,不用再从服务器取数据,减少服务器资源的消耗。 当关联数据有变动时,基础窗体会传送窗体给主程序,由主程序将全局关联数据集重新加载,这样保证数据是最新的,而哪些数据变动后会更新,则只需要菜单表里设置一下就可以了,其它的全部由基类窗体自动实现。 *** 动态报表:系统经常要做各种报表,客户也可能按照自己要求定制报表,此功能提供了非常灵活的报表创建功能。此功能可以根据以下三种为数据来源:1、 表:以表为数据来源,设置了以表名以后,可以自动带出所有字段,2、 SQL语句:以SQL语句查询的数据为来源,设置了SQL语句以后,可以自动带出所有字段。3、 存储过程:当上述两个值都为空,则取存储过程作为数据源,存储过程以“SP_DynamicReport_+报表编号” 为存储过程名。你可以将某个字段作为查找条件,可以设置某个字段的关联属性(如:人事表的部门编号带出部门表的部门名称),当所有设置完后,点击菜单会自动创建窗体和所有控件,自动生成查询条件窗体,这一切都无须再写代码,不须生成PAS文件,大大提高开发速度,做出的软件也对客户具有较大的吸引力,因为这个功能让客户自定义报表。 *** 动态编辑窗体:系统经常需要编辑数据,此功能以完全自动的方式生成编辑窗体,只须要系统设置一下要编辑的表和字段,打开菜单就会自动生成窗体和所有编辑控件,用户可以在这些窗体上实现新增、修改、删除功能,本功能还可以设置某字段为非空字段,在保存前系统会进行非空检查。此项功能不用生成PAS文件,只须简单设置,这样可以提高开发速度。 *** 自动生成窗体文件:此功能与动态编辑窗体类似,区别在于这里会生成PAS/DFM文件,用户设置一个表后,根据字段名生成相应的控件,然后将PAS文件加入到工程中就可以看到窗体,也可以设置查找条件、非空、关联设置等,生成PAS文件是为了便于开发人员扩展功能。 *** 标签式窗体(如下图):此功能为本框架一大特色,一般的系统框架都是常规MDI窗体,打开N个子窗体后都只能看到当前一个窗体,不方便进行切换,而本框架每打开一个窗体会自动生成一个标签页,用户可以一目了然打开了几个窗体,当需要用到哪个窗体时,只需要点击该标签即可。此功能使用一个小技巧,实现方法很简单,并非将窗体画在PAGE上,查阅原代码即可知晓。  *** 编辑窗体在不同编辑状态时(如新增或修改)会自动设置相应按扭的Enabled属性(如新增状态时删除按钮不可用等),这样使软件更加专业化。 *** 每次用户登陆系统时都会记录在LOG表中,记录哪个用户什么时候登陆,哪台机登陆,如发生用户异常操作可即时查出。 *** 系统消息通知功能:系统中有许多需通知用户的消息,如有加班单须要用户审核,采购货物到货后都需要在系统中有提示信息,本框架提供了这个功能。系统录入数据将消息保存到数据库表,系统每隔几秒种去扫描消息表,查看有无新消息,有则在任务栏冒泡显示信息,当用户点击冒泡提示时会弹出消息列表窗体,双击某一条消息会弹出对应的窗体,这样的使用户操作更方便,软件更专业化。消息采用分类的形式,每条消息都属于一个类别,每个类别对应打开一个窗体,而每条消息也可以自带属于本条消息的参数,这样既减少消息数据存储量也增加系统稳定性。窗体打开时会调用本窗上次的审核人显示为默认,窗体保存时调用一个方法可以将审核保存到注册表中,方便下次显示。(范例参阅加班申请/审核)。  *** 所有表都有[创建用户],[创建时间],[更新用户],[更新时间]四个字段,当发现输入错误数据时可以即时发现是哪个用户输入的。而这四个字段是由框架自动赋值的,无须再写语句 *** 拥有批次数据一次插入的基类,继承这个类可实现快速插入成批数据的功能,如输入整个部门100人的加班单,按一般操作须录入100次,而继承这个窗体只须操作一次就即产生100条记录。大大提高录入速度。(参阅加班申请的添加多人) *** 报表打印功能已集成在框架内,开发者只须在窗体上设置好一个报表,当窗体打开时框架会自动将报表列表加载到主程序界面按扭上,用户可以选择任一报表,点击后即弹出报表,此功能已封装好,无须开发者再写代码。  *** 拥有自动更新功能,用户每次打开EXE是会检查系统文件有否更新,有则下载到本地再打开主程序,无则直接打开主程序。 *** 高质量OOP的源码编写,每个过程都有文字说明,有表结构说明文档,参研源码可以学习到很多软件开发方面新的思想及实现方式。有很高的参考价值。每个功能点都提供了范例程序源码,加快开发人员理解框架操作。 *** 此框架已稳定使用了几年,曾用此开发出十几套数据库软件,在各个企业内成功部署。 *** 框架使用了几个第三方控件,购买时一并附送。有意向请留下联系方式或直接加我QQ聊。在我的空间有界面图片:http://blog.sina.com.cn/s/blog_40ed44100100fxmh.html联系方式:邮件:dinghello@163.comqq: 864339754
 
博客打不开,图片看不到,又被HUYOU了
 
败类,拿着共享的资源来卖钱。{----------------------------------------------------------------------------- Unit Name: BaseForm Author: DING Purpose: History:-----------------------------------------------------------------------------}unit BaseForm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, MisString, DBGrids, StdCtrls, Grids, Mask, wwdbedit, Wwdbspin, DBCtrls, wwdbdatetimepicker, wwdblook, Wwdbcomb;type TfrmBaseForm = class(TForm) procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); private { Private declarations } protected DLLModule: TDLLModule; PUserInfo: TPUserInfo; function CheckISNull(MyControl: TObject; ControlDesc: string): Boolean; function CheckISLessZero(MyControl: TObject; ControlDesc: string): Boolean; public { Public declarations } function GetUserInfo: TPUserInfo; end;var frmBaseForm: TfrmBaseForm;implementation{$R *.dfm}{----------------------------------------------------------------------------- Procedure : TfrmBaseForm.FormCreate Author : DING Date : 2003-10-17 Description : 获取当前登陆的用户信息 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseForm.FormCreate(Sender: TObject);begin Icon.Assign(Application.Icon); //设置Form ICON if (Application.MainForm <> nil) and (Self <> Application.MainForm) then //设置UserInfo,每个子窗口之UserInfo指向MainForm之UserInfo begin PUserInfo := TfrmBaseForm(Application.MainForm).GetUserInfo; DLLModule := PUserInfo.ActiveModule; end else begin New(PUserInfo); PUserInfo.UserID := ''; PUserInfo.UserName := ''; PUserInfo.Password := ''; PUserInfo.IsAdmin := False; end; if DLLModule <> nil then DLLModule.DLLEnter;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseForm.FormKeyDown Author : DING Date : 2003-10-17 Description : 按Enter到下一个按件 Parameter : Sender: TObject; var Key: Word; Shift: TShiftState Result : None-----------------------------------------------------------------------------}procedure TfrmBaseForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if Key = VK_RETURN then begin if ActiveControl is TCustomDBGrid then begin if TCustomDBGrid(ActiveControl).SelectedIndex <= TCustomDBGrid(ActiveControl).FieldCount - 1 then TCustomDBGrid(ActiveControl).SelectedIndex := TCustomDBGrid(ActiveControl).SelectedIndex + 1 else TCustomDBGrid(ActiveControl).SelectedIndex := 0; end else if not (ActiveControl is TCustomMemo) then begin SendMessage(Handle, WM_NEXTDLGCTL, 0, 0); Key := 0; end; end else if (Key = VK_DOWN) and (not (ActiveControl is TCustomMemo)) and not (ActiveControl is TCustomGrid) then begin SendMessage(Handle, WM_NEXTDLGCTL, 1, 0); Key := 0; end;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseForm.FormClose Author : DING Date : 2003-10-17 Description : 关闭窗口 Parameter : Sender: TObject; var Action: TCloseAction Result : None-----------------------------------------------------------------------------}procedure TfrmBaseForm.FormClose(Sender: TObject; var Action: TCloseAction);begin Action := caFree;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseForm.GetUserInfo Author : DING Date : 2003-10-22 Description : 得到用户信息 Parameter : None Result : TPUserInfo-----------------------------------------------------------------------------}function TfrmBaseForm.GetUserInfo: TPUserInfo;begin Result := PUserInfo;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseForm.FormDestroy Author : DING Date : 2003-10-22 Description : 窗口摧毁事件 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseForm.FormDestroy(Sender: TObject);begin if Self = Application.MainForm then begin FreeMem(PUserInfo); end; if DLLModule <> nil then DLLModule.DLLLeave;end;function TfrmBaseForm.CheckISNull(MyControl: TObject; ControlDesc: string): Boolean;begin if (MyControl is TDBEdit) then begin Result := Trim(TDBEdit(MyControl).Text) = ''; // if TDBEdit(MyControl).Enabled then TDBEdit(MyControl).SetFocus ; end; if (MyControl is TwwDBEdit) then begin Result := Trim(TwwDBEdit(MyControl).Text) = ''; // if TwwDBEdit(MyControl).Enabled then TwwDBEdit(MyControl).SetFocus ; end; if (MyControl is TEdit) then begin Result := Trim(TEdit(MyControl).Text) = ''; // if TEdit(MyControl).Enabled then TEdit(MyControl).SetFocus ; end; if (MyControl is TMemo) then begin Result := Trim(TMemo(MyControl).Text) = ''; //if TMemo(MyControl).Enabled then TMemo(MyControl).SetFocus ; end; if (MyControl is TwwDBDateTimePicker) then begin Result := Trim(TwwDBDateTimePicker(MyControl).Text) = ''; //if TwwDBDateTimePicker(MyControl).Enabled then TwwDBDateTimePicker(MyControl).SetFocus ; end; if (MyControl is TwwDBSpinEdit) then begin Result := Trim(TwwDBSpinEdit(MyControl).Text) = ''; //if TwwDBSpinEdit(MyControl).Enabled then TwwDBSpinEdit(MyControl).SetFocus ; end; if (MyControl is TwwDBLookupCombo) then begin Result := Trim(TwwDBLookupCombo(MyControl).Text) = ''; // if TwwDBLookupCombo(MyControl).Enabled then TwwDBLookupCombo(MyControl).SetFocus ; end; if (MyControl is TDBMemo) then begin Result := Trim(TDBMemo(MyControl).Text) = ''; //if TDBMemo(MyControl).Enabled then TDBMemo(MyControl).SetFocus ; end; if (MyControl is TComBoBox) then begin Result := Trim(TComBoBox(MyControl).Text) = ''; //if TComBoBox(MyControl).Enabled then TComBoBox(MyControl).SetFocus ; end; if (MyControl is TwwDBComboBox) then begin Result := Trim(TwwDBComboBox(MyControl).Text) = ''; // if TwwDBComboBox(MyControl).Enabled then TwwDBComboBox(MyControl).SetFocus ; end; if Result then begin if TWinControl(MyControl).Enabled and TWinControl(MyControl).Visible then TWinControl(MyControl).SetFocus; MisString.INFORMATION_BOX(handle, PAnsiChar(ControlDesc + '不能为空')); end;end;function TfrmBaseForm.CheckISLessZero(MyControl: TObject; ControlDesc: string): Boolean;begin if (MyControl is TwwDBSpinEdit) then begin Result := (Trim(TwwDBSpinEdit(MyControl).Text) = '') or (TwwDBSpinEdit(MyControl).Value <= 0); if Result and TwwDBSpinEdit(MyControl).Enabled then begin TwwDBSpinEdit(MyControl).SetFocus; MisString.INFORMATION_BOX(handle, PAnsiChar(ControlDesc + sErrorNullOrNegativeValue)); end; end;end;end.
 
unit BaseEditForm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, BaseDialog, StdCtrls, Buttons, ExtCtrls, DB, ADODB, MisString,TypInfo, Grids, ComCtrls, DBCtrls, Mask, DBGrids,DSUtils;type TfrmBaseEditForm = class(TfrmBaseDialog) Bevel1: TBevel; btnContinue: TBitBtn; MainDataSource: TDataSource; procedure FormCreate(Sender: TObject); procedure btnContinueClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private MainDS:TDataSet; protected FirstFocusControl, OldControl: TWinControl; OldColor: Variant; function DoPost: Boolean; overload; virtual; function DoPost(SaveDataSource: TDataSource): Boolean; overload; virtual; procedure NewActiveControlChange(Sender: TObject); public constructor Create(AOwner:TComponent;ADataSet:TDataSet);overload; end; TfrmBaseEditFormClass = class of TfrmBaseEditForm;var frmBaseEditForm: TfrmBaseEditForm;implementation{$R *.dfm}{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.DoPost Author : DING Date : 2003-10-22 Description : 数据提交 Parameter : None Result : Boolean-----------------------------------------------------------------------------}function TfrmBaseEditForm.DoPost: Boolean;begin Result:=DoPost(MainDataSource);end;{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.FormCreate Author : DING Date : 2003-10-22 Description : 创建窗口 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseEditForm.FormCreate(Sender: TObject);var i: integer;begin inherited; MainDS:=MainDS; btnContinue.Caption := again_button; if (MainDS <> nil) and (MainDS.Active) then begin if (MainDS.State = dsInsert) then begin if (Application.MainForm <> nil) and (Application.MainForm.ActiveMDIChild <> nil) then Caption := Application.MainForm.ActiveMDIChild.Caption + ' -新增'; end else if (MainDS.State = dsEdit) then begin if (Application.MainForm <> nil) and (Application.MainForm.ActiveMDIChild <> nil) then Caption := Application.MainForm.ActiveMDIChild.Caption + ' -修改'; btnContinue.Visible := False; end else begin Caption := Application.MainForm.ActiveMDIChild.Caption + ' -浏览'; btnOk.Enabled := False; btnContinue.Enabled := False; for i := 0 to self.ComponentCount - 1 do if (Components is TWinControl) and not (Components is TPageControl) and not (Components is TTabSheet) and not ((Components = btnOk) or (Components = btnCancel) or (components = btnContinue)) then TWinControl(Components).Enabled := False; end; end else begin if (Application.MainForm <> nil) and (Application.MainForm.ActiveMDIChild <> nil) then Caption := Application.MainForm.ActiveMDIChild.Caption; end; Screen.OnActiveControlChange := NewActiveControlChange;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.btnContinueClick Author : DING Date : 2003-10-22 Description : 继续新增数据 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseEditForm.btnContinueClick(Sender: TObject);begin if DoPost then begin MainDS.Append(); if FirstFocusControl <> nil then FirstFocusControl.SetFocus; end;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.btnOKClick Author : DING Date : 2003-10-22 Description : 保存数据并退出 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseEditForm.btnOKClick(Sender: TObject);begin ModalResult := Ord(DoPost);end;{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.btnCancelClick Author : DING Date : 2003-10-22 Description : 取消输入数据 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseEditForm.btnCancelClick(Sender: TObject);begin inherited; if (MainDataSource.DataSet <> nil) and (MainDataSource.State in [dsEdit, dsInsert]) then MainDataSource.DataSet.Cancel;end;procedure TfrmBaseEditForm.FormShow(Sender: TObject);begin inherited; if (FirstFocusControl <> nil) and (FirstFocusControl.CanFocus) then FirstFocusControl.SetFocus;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.NewActiveControlChange Author : DING Date : 2003-11-11 Description : 改变当前控件的颜色 Parameter : Sender: TObject Result : None-----------------------------------------------------------------------------}procedure TfrmBaseEditForm.NewActiveControlChange(Sender: TObject);begin if Assigned(OldControl) and (GetPropInfo(OldControl, 'Color') <> nil) and (GetPropInfo(OldControl, 'Checked') = nil) and not (OldControl is TCustomCheckBox) then SetPropValue(OldControl, 'Color', OldColor); if GetPropInfo(Screen.ActiveControl, 'Color') <> nil then begin OldColor := GetPropValue(Screen.ActiveControl, 'Color', True); OldControl := Screen.ActiveControl; if (GetPropInfo(OldControl, 'Checked') = nil) and not (OldControl is TCustomCheckBox) then SetPropValue(Screen.ActiveControl, 'Color', clMoneyGreen); end;end;{----------------------------------------------------------------------------- Procedure : TfrmBaseEditForm.FormClose Author : DING Date : 2003-11-11 Description : 取消当前控件的颜色 Parameter : Sender: TObject; var Action: TCloseAction Result : None-----------------------------------------------------------------------------}procedure TfrmBaseEditForm.FormClose(Sender: TObject; var Action: TCloseAction);begin inherited; Screen.OnActiveControlChange := nil;end;function TfrmBaseEditForm.DoPost(SaveDataSource: TDataSource): Boolean;var ADataSet:TDataSet;begin Result := False; ADataSet:=SaveDataSource.DataSet; if ADataSet <> nil then try if ADataSet.State = dsInsert then begin DSSetSingleFieldValue(ADataSet,'CREATE_TIME',Now); DSSetSingleFieldValue(ADataSet,'CREATE_BY',PUserInfo.UserName); DSSetSingleFieldValue(ADataSet,'CREATE_USERID',PUserInfo.UserID); end else begin DSSetSingleFieldValue(ADataSet,'UPDATE_TIME',Now); DSSetSingleFieldValue(ADataSet,'UPDATE_BY',PUserInfo.UserName); end; ADataSet.Post; Result := True; except on E: Exception do ERROR_BOX(Handle, pchar(E.Message)); end;end;procedure TfrmBaseEditForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin inherited; btnCancel.Click;end;constructor TfrmBaseEditForm.Create(AOwner: TComponent; ADataSet: TDataSet);begin inherited Create(AOwner); MainDataSource.DataSet:=ADataSet;end;end.
 
unit BaseChildGridBtnQueryForm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, BaseChildGridForm, Menus, DBActns, StdActns, ActnList, ImgList, DB, ComCtrls, ExtCtrls, StdCtrls, Grids, Wwdbigrd, Wwdbgrid, MisString, DataModule, ADODB, typinfo, DBGrids;type TfrmBaseChildGridBtnQueryForm = class(TfrmBaseChildGridForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabQuery: TTabSheet; btnQuery: TButton; pan: TPanel; Panel3: TPanel; btnNew: TButton; btnDelete: TButton; btnCancel: TButton; btnModify: TButton; btnSave: TButton; btnCheck: TButton; btnContinue: TButton; PanelDataEnter: TPanel; procedure FormCreate(Sender: TObject); procedure btnContinueClick(Sender: TObject); procedure btnNewClick(Sender: TObject); procedure btnModifyClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure mnuNewRecordClick(Sender: TObject); procedure mnuModifyRecordClick(Sender: TObject); procedure mnuCheckRecordClick(Sender: TObject); procedure PageControl1Changing(Sender: TObject; var AllowChange: Boolean); procedure btnQueryClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure New1Click(Sender: TObject); procedure Modify1Click(Sender: TObject); procedure PopmnuModifyRecordClickClick(Sender: TObject); procedure PopmnuNewRecordClick(Sender: TObject); private { Private declarations } procedure SetBtnState; procedure DoPost; procedure SetControlReadOnly(ISTrue: boolean); procedure DoNew; procedure DoModify; protected PrimaryKeyDesc: string; pISSaveOK: Boolean; UploadDataSetState: TDatasetState; public { Public declarations } end;var frmBaseChildGridBtnQueryForm: TfrmBaseChildGridBtnQueryForm;implementation{$R *.dfm}procedure TfrmBaseChildGridBtnQueryForm.FormCreate(Sender: TObject);begin inherited; if PUserInfo.ActiveRights.bAdd then btnNew.Tag := 1; if PUserInfo.ActiveRights.bEdit then btnModify.Tag := 1; if PUserInfo.ActiveRights.bDelete then btnDelete.Tag := 1; if PUserInfo.ActiveRights.bCheck then btnCheck.Tag := 1; self.btnNew.Enabled := PUserInfo.ActiveRights.bAdd; self.btnModify.Enabled := PUserInfo.ActiveRights.bEdit; self.btnDelete.Enabled := PUserInfo.ActiveRights.bDelete; self.btnCheck.Enabled := PUserInfo.ActiveRights.bCheck; self.btnSave.Enabled := PUserInfo.ActiveRights.bAdd or PUserInfo.ActiveRights.bEdit; self.btnCancel.Enabled := self.btnSave.Visible; self.btnContinue.Enabled := self.btnNew.Visible; SetBtnState; pISSaveOK := false;end;procedure TfrmBaseChildGridBtnQueryForm.btnContinueClick(Sender: TObject);begin inherited; try btnSave.Click; if pISSaveOK then btnNew.Click; except end;end;procedure TfrmBaseChildGridBtnQueryForm.btnNewClick(Sender: TObject);begin inherited; DoNew;end;procedure TfrmBaseChildGridBtnQueryForm.btnModifyClick(Sender: TObject);begin inherited; DoModify;end;procedure TfrmBaseChildGridBtnQueryForm.btnDeleteClick(Sender: TObject);begin inherited; mnuDeleteRecord.OnClick(nil); SetBtnState;end;procedure TfrmBaseChildGridBtnQueryForm.SetBtnState;var lsState: TDataSetState;begin lsState := MainDataSet.State ; self.btnNew.Enabled :=(lsState in [dsBrowse, dsInactive]) and (btnNew.Tag =1); self.btnModify.Enabled := (lsState in [dsBrowse, dsInactive]) and (btnModify.Tag = 1) and MainDataSet.Active and (MainDataSet.RecordCount > 0); self.btnDelete.Enabled := (lsState in [dsBrowse, dsInactive]) and (btnDelete.Tag = 1) and MainDataSet.Active and (MainDataSet.RecordCount > 0); self.btnCancel.Enabled := (lsState in [dsInsert, dsEdit]) and ((btnNew.Tag = 1) or (btnModify.Tag = 1)); self.btnSave.Enabled := self.btnCancel.Enabled; self.btnContinue.Enabled := (lsState = dsInsert) and (btnNew.Tag = 1); self.btnCheck.Enabled := (lsState in [dsBrowse, dsInactive]) and (btnCheck.Tag = 1); self.btnQuery.Enabled := (lsState in [dsBrowse, dsInactive]); if lsState in [dsInsert, dsEdit] then SetControlReadOnly(false) else SetControlReadOnly(true); self.MainDBGrid.Enabled := not (lsState in [dsInsert, dsEdit]); TToolButton(Application.MainForm.FindComponent('tlbNewRecord')).Enabled := self.btnNew.Enabled; TToolButton(Application.MainForm.FindComponent('tlbModifyRecord')).Enabled := self.btnModify.Enabled; TToolButton(Application.MainForm.FindComponent('tlbDeleteRecord')).Enabled := self.btnDelete.Enabled; TToolButton(Application.MainForm.FindComponent('tlbCheckRecord')).Enabled := self.btnCheck.Enabled; TToolButton(Application.MainForm.FindComponent('tlbQueryRecords')).Enabled := self.btnQuery.Enabled; TToolButton(Application.MainForm.FindComponent('tlbLocateRecord')).Enabled := self.btnQuery.Enabled; // TToolButton(Application.MainForm.FindComponent('tlbPrint')).Enabled := self.btnNew.Enabled and (self.mnuReport.Count >0) and puserInfo.ActiveRights.bPrint; // TToolButton(Application.MainForm.FindComponent('tlbPrintPreview')).Enabled := self.btnNew.Enabled and (self.mnuReport.Count >0); TToolButton(Application.MainForm.FindComponent('tlbOutputData')).Enabled := puserInfo.ActiveRights.bOutPutData; self.PopmnuNewRecord.Enabled := self.btnNew.Enabled; self.PopmnuModifyRecord.Enabled := self.btnModify.Enabled; self.PopmnuDeleteRecord.Enabled := self.btnDelete.Enabled; self.mnuNewRecord.Enabled := self.btnNew.Enabled; self.mnuModifyRecord.Enabled := self.btnModify.Enabled; self.mnuModifyRecord.Enabled := self.btnModify.Enabled; self.mnuDeleteRecord.Enabled := self.btnDelete.Enabled; self.mnuCheckRecord.Enabled := self.btnCheck.Enabled;end;procedure TfrmBaseChildGridBtnQueryForm.btnSaveClick(Sender: TObject);begin inherited; DoPost; SetBtnState;end;procedure TfrmBaseChildGridBtnQueryForm.btnCancelClick(Sender: TObject);begin inherited; self.MainDataSource.DataSet.Cancel; SetBtnState;end;procedure TfrmBaseChildGridBtnQueryForm.DoPost;var s: string;begin if self.PrimaryKeyDesc = '' then s := '记录已经存在' else s := PrimaryKeyDesc + '已经存在'; if (MainDataSource.DataSet <> nil) and (MainDataSource.DataSet.Active) and (MainDataSource.DataSet.State in [dsEdit, dsInsert]) then begin try if MainDataSource.DataSet.State = dsInsert then begin if MainDataSource.DataSet.FindField('CREATE_TIME') <> nil then MainDataSource.DataSet.FieldByName('CREATE_TIME').AsDateTime := Now(); if MainDataSource.DataSet.FindField('CREATE_BY') <> nil then MainDataSource.DataSet.FieldByName('CREATE_BY').AsString := PuserInfo.UserName; if MainDataSource.DataSet.FindField('CREATE_USERID') <> nil then MainDataSource.DataSet.FieldByName('CREATE_USERID').AsString := PuserInfo.UserID; end else begin if MainDataSource.DataSet.FindField('UPDATE_TIME') <> nil then MainDataSource.DataSet.FieldByName('UPDATE_TIME').AsDateTime := Now(); if MainDataSource.DataSet.FindField('UPDATE_BY') <> nil then MainDataSource.DataSet.FieldByName('UPDATE_BY').AsString := PuserInfo.UserName; end; MainDataSource.DataSet.Post; pISSaveOK := true; except on E: Exception do begin self.pISSaveOK := false; if MainDataSet.Connection.Errors.Item[0].NativeError = 2627 then begin INFORMATION_BOX(Handle, pchar(s)); end else raise Exception.Create(E.Message); end; end; end;end;procedure TfrmBaseChildGridBtnQueryForm.mnuNewRecordClick(Sender: TObject);begin inherited; DoNew;end;procedure TfrmBaseChildGridBtnQueryForm.mnuModifyRecordClick(Sender: TObject);begin inherited; DoModify;end;procedure TfrmBaseChildGridBtnQueryForm.mnuCheckRecordClick(Sender: TObject);begin inherited; btnCheck.Click;end;procedure TfrmBaseChildGridBtnQueryForm.PageControl1Changing( Sender: TObject; var AllowChange: Boolean);begin inherited; AllowChange := not (MainDataSet.State in [dsInsert, dsEdit]);end;procedure TfrmBaseChildGridBtnQueryForm.SetControlReadOnly( ISTrue: boolean);var i: integer;begin for i := 0 to PanelDataEnter.ControlCount - 1 do begin if not (PanelDataEnter.Controls is TLabel) then begin if (GetPropertyIfExists(PanelDataEnter.Controls, 'ReadOnly')) and (PanelDataEnter.Controls.Tag > 0) then SetBooleanPropertyIfExists(PanelDataEnter.Controls, 'ReadOnly', True); if (GetPropertyIfExists(PanelDataEnter.Controls, 'ReadOnly')) and (PanelDataEnter.Controls.Tag = 0) then SetBooleanPropertyIfExists(PanelDataEnter.Controls, 'ReadOnly', ISTrue); end; end;end;procedure TfrmBaseChildGridBtnQueryForm.btnQueryClick(Sender: TObject);begin inherited; SetBtnState; if (MainDBGrid.DataSource.DataSet = MainDataSet) and MainDataSet.Active and (MainDataSet.RecordCount>0) then PageControl1.ActivePageIndex :=0;end;procedure TfrmBaseChildGridBtnQueryForm.FormClose(Sender: TObject; var Action: TCloseAction);begin inherited; if (self.MainDataSet.State in [dsInsert, dsEdit]) then self.MainDataSet.Cancel;end;procedure TfrmBaseChildGridBtnQueryForm.DoModify;begin self.MainDataSet.Edit; self.UploadDataSetState := self.MainDataSet.State; SetBtnState; self.PageControl1.ActivePageIndex := 0; pISSaveOK := false;end;procedure TfrmBaseChildGridBtnQueryForm.DoNew;begin self.MainDataSet.Append; self.UploadDataSetState := self.MainDataSet.State; SetBtnState; self.PageControl1.ActivePageIndex := 0; pISSaveOK := false;end;procedure TfrmBaseChildGridBtnQueryForm.New1Click(Sender: TObject);begin inherited; DoNew;end;procedure TfrmBaseChildGridBtnQueryForm.Modify1Click(Sender: TObject);begin inherited; DoModify;end;procedure TfrmBaseChildGridBtnQueryForm.PopmnuModifyRecordClickClick( Sender: TObject);begin inherited; self.UploadDataSetState := dsEdit;end;procedure TfrmBaseChildGridBtnQueryForm.PopmnuNewRecordClick( Sender: TObject);begin inherited; self.UploadDataSetState := dsInsert;end;end.
 
unit SysRoles;interfaceuses DSUtils,RegIniUtils,MisString;type TSysUser = class(TObject) private FIdentifier: AnsiString; //用户代码 FName: WideString; //用户姓名 FPassword: AnsiString; //登录密码 FIsAdmin: Boolean; //是否为管理用户 FIPAddress: AnsiString; //登录IP FLoginHostName: WideString; //登录电脑名称 FIsLogined: Boolean; //是否登录 FLoginTime: TDateTime; //登录时间 FLogoutTime: TDateTime; //登出出时 FActiveModule: TDLLModule; //当前激活DLL模块 FActiveRights: TRights; //当前操作权限 DeptRightStr: AnsiString; //用户部门操作权限字串 DepartmentID: AnsiString; //用户部门编号 protected public constructor Create; destructor Destroy; override; published end; TSysGroup = class (TObject) private protected public constructor Create; destructor Destroy; override; published end;implementation{ TSysGroup }constructor TSysGroup.Create;begin inherited;end;destructor TSysGroup.Destroy;begin inherited;end;{ TSysUser }constructor TSysUser.Create;beginend;destructor TSysUser.Destroy;begin inherited;end;end.
 
你的就是这些代码吧....有需要的和我联系,免费赠送。哼╭(╯^╰)╮
 
源码泄漏难免,不过楼上的兄弟不厚道,我自己写的东西,别人上传上去了,竟然说是共享?这次框架增加了许多功能,提升了性能:1、增加标签式窗体,使用户切换窗体操作更方便2、使用了功能强大的CxGrid窗体3、增加全局关联数据:大大提升性能,初始化时就将数据加载进内存,不用每次打开窗体时加载4、动态编辑窗体:只须简单设置,不用保存PAS文件就要以实现新增、修改删除功能5、动态报表:只须简单设置不须保存PAS文件就可以实现报表查询,可以随意添加客户所需的报表。
 
这个楼主要价多少钱啊?
 
加我QQ聊吧。
 
希望楼上ningj123,兄弟学会尊重别人的劳动成果。
 
现在界面图可以看到了。我换了另一外地方放
 
1000元,对我来说贵了。
 

Similar threads

回复
0
查看
666
不得闲
回复
0
查看
678
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部