• delphi开发日志——基窗体,使用面向对象编程的编程思想创建基类


    delphi的VCL就是面向对象的,因此我无论我们是使用她来开发数据库的管理信息系统,还是网络应用,都可以说是面向对象,虽然可能很多人都像我当初一样,不知道什么时面向对象,如何使用面向对象来编程。在这里我不用理论来说明什么是面积对象,我们将面向对象编程的思想应用到我们的程序开发中,边实践边理解。
    首先创建一个窗体,放入ActionList1控件,命名为actlstChild,放入ImageList1,命名为actlstChildImageList,再设置一些基本的属性,如:FormStyle为fsMDIChild,窗体最大化等。此窗体用于将来其它窗体的基窗体。当操作主窗体中的一些功能时需要关联到基窗体上。因此窗体创建的时候要将主窗体的操作事件全部赋值到基窗体。为了让界面和代码分离,我们需要创建一个类(单元文件),专门用于基窗体上的一些操作。新建单元文件untBaseClass.pas,代码如下:

    unit untBaseClass;

    interface

    uses
      Windows,Messages,SysUtils,Variants,Classes,DB,ADODB;

    type
      TBaseClass = class
      private
      public
        constructor create;
        destructor Destroy;override;

        procedure AddData;
        procedure CancelData;
        procedure SaveData;
        procedure DeleteData;
        procedure ModifyData;

      end;

    implementation

    uses untDM, untGlobal, untMain, untBase;

    constructor TBaseClass.create;
    begin

    end;

    destructor TBaseClass.Destroy;
    begin
      inherited;
    end;

    procedure TBaseClass.AddData;
    begin
      With frmDM do
      if Assigned(dsMaster.DataSet) then
        if  not(dsMaster.State in [dsEdit,dsInsert]) then
        begin
          try
            (dsMaster.DataSet as TADOQuery).Append;
          Except
            on E:exception do
              MsgBox('增加错误!'+#13+'出错数类名:'+E.ClassName+#13+'出错信息:'+E.Message,0);
          end;
        end;

    end;

    procedure TBaseClass.CancelData;
    begin
      MsgBox('取消操作',0)
    end;

    procedure TBaseClass.DeleteData;
    begin

    end;

    procedure TBaseClass.SaveData;
    begin
      With frmDM do
      if Assigned(dsMaster.DataSet) then
        if  dsMaster.State in [dsEdit,dsInsert] then
        begin
          try
            conDB.BeginTrans;
            (dsMaster.DataSet as TADOQuery).Post;
            (dsMaster.DataSet as TADOQuery).UpdateBatch;
            conDB.CommitTrans;
          Except
            conDB.RollbackTrans;
            Raise exception.Create('增加错误!'
          end;
        end;
    end;
    procedure TBaseClass.ModifyData;
    begin
      MsgBox('修改数据操作',0)
    end;

    end.

    此时将基窗体的事件关联起来,基窗体的主要功能代码如下:
    procedure TfrmBase.FormCreate(Sender: TObject);
    begin
      objBaseClass:=TBaseClass.create;
      RelationMainFormEvent;
    end;

    procedure TfrmBase.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
      Self:=nil;
    end;

    procedure TfrmBase.RelationMainFormEvent;
    begin
        frmMain.actAdd.OnExecute:=actAdd.OnExecute;
        frmMain.actAdd.Enabled:=True;
        frmMain.actModify.OnExecute:=actModify.OnExecute;
        frmMain.actModify.Enabled:=True;
        frmMain.actSave.OnExecute:=actSave.OnExecute;
        frmMain.actSave.Enabled:=true;
    end;

    procedure TfrmBase.actAddExecute(Sender: TObject);
    begin
      objBaseClass.AddData;
    end;

    procedure TfrmBase.actDeleteExecute(Sender: TObject);
    begin
      objBaseClass.DeleteData;
    end;

    procedure TfrmBase.actSaveExecute(Sender: TObject);
    begin
      objBaseClass.SaveData;
    end;

    procedure TfrmBase.actCancelExecute(Sender: TObject);
    begin
      objBaseClass.CancelData;
    end;

    procedure TfrmBase.actModifyExecute(Sender: TObject);
    begin
      objBaseClass.ModifyData;
    end;

    基本的功能做完后,下一步就可以创建一个新窗体并继承此窗体。

  • 相关阅读:
    from表单提交数组数据
    由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
    form表单提交的几种方式
    DuplicateMappingException: Table [xx] contains physical column name referred to by multiple ... .
    oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
    json对象与json字符串的转换
    免费的maven的archetype-catalog.xml文件下载
    SpringBoot集成Hibernate
    log4j.properties的配置信息
    service里无法注入mapper,mapper空指针
  • 原文地址:https://www.cnblogs.com/edrp/p/991259.html
Copyright © 2020-2023  润新知