⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pobject_base.pas

📁 培训管理系统
💻 PAS
字号:
unit pobject_base;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrls, StdCtrls, Buttons, ExtCtrls,Wwquery, Wwdatsrc, ImgList,
  ComCtrls, ToolWin, DBTables, DB, Mask, wwdbedit, Wwdotdot, Wwdbcomb,inifiles;

type
  Tobject_base = class(TForm)
    Dts_Master: TwwDataSource;
    Data_Master: TwwQuery;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    Btn_Append: TToolButton;
    ImageList1: TImageList;
    Btn_Save: TToolButton;
    Btn_modify: TToolButton;
    Btn_Delete: TToolButton;
    Btn_Find: TToolButton;
    Btn_copy: TToolButton;
    Btn_Cancel: TToolButton;
    Btn_Refresh: TToolButton;
    Dbn_master: TDBNavigator;
    Btn_Print: TToolButton;
    Btn_check: TToolButton;
    Btn_audit: TToolButton;
    Btn_end: TToolButton;
    Btn_quit: TToolButton;
    Btn_help: TToolButton;
    Upd_master: TUpdateSQL;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure EditEnter(Sender: TObject);
    procedure EditExit(Sender:Tobject);
    procedure EditKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Btn_quitClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Btn_AppendClick(Sender: TObject);
    procedure Btn_DeleteClick(Sender: TObject);
    procedure Btn_SaveClick(Sender: TObject);
    procedure Btn_CancelClick(Sender: TObject);
    procedure Btn_FindClick(Sender: TObject);
    procedure Btn_PrintClick(Sender: TObject);
    procedure Btn_auditClick(Sender: TObject);
    procedure Btn_endClick(Sender: TObject);
    procedure Btn_checkClick(Sender: TObject);
    procedure Btn_copyClick(Sender: TObject);
    procedure Btn_modifyClick(Sender: TObject);
    procedure Btn_RefreshClick(Sender: TObject);
    procedure Data_MasterAfterScroll(DataSet: TDataSet);
    procedure Data_MasterBeforeEdit(DataSet: TDataSet);
    procedure Data_MasterAfterOpen(DataSet: TDataSet);
    procedure Btn_helpClick(Sender: TObject);
  private
    { Private declarations }
    inifile:tinifile;   //vmaoedit;20021118
    procedure DisplayHint(Sender :Tobject);
  public
    { Public declarations }

    MAXTABORDER :smallint;
    savedData:boolean;
    BtnTyp:string;
    procedure deletedata;virtual;abstract;
    procedure savedata;virtual;abstract;
    procedure append_button;        //新增状态的BUTTON
    procedure Edit_button;         //编辑状态的BUTTON
    procedure norecord_button;     //无记录状态
    procedure record_button;      //有记录状态
    procedure brow_button;         //浏览状态的BUTTON
  end;

var
  object_base: Tobject_base;

implementation
uses Pdlgloading, main, pdatabse,htmlhlp;
{$R *.dfm}

procedure Tobject_base.FormCreate(Sender: TObject);
var w,h:integer;
begin
//读窗体配置文件
  if self.BorderStyle=bsSizeToolWin then
  begin
   inifile:=tinifile.Create(extractfilepath(application.exename)+'\ini\form.ini');
   //窗体
   w:=inifile.ReadInteger(self.Name,'width',0);
   if w>0 then self.Width:=w;
   h:=inifile.ReadInteger(self.Name,'height',0);
   if h>0 then self.Height:=h;
   //panel
   w:=inifile.ReadInteger(self.Name,'panleftw',0);
   if w>0 then tpanel(self.FindComponent('panleft')).Width:=w;
   h:=inifile.ReadInteger(self.Name,'panlefth',0);
   if h>0 then tpanel(self.FindComponent('panleft')).Height:=h;
   //在close中写配置和释放文件;
  end;

  MAXTABORDER:=30;
  with Dlgloading.progress do  Position:=Position+Step;
  with Dlgloading.Progress do position:=position+step;
end;

procedure Tobject_base.FormActivate(Sender: TObject);
begin
Application.OnHint :=DisplayHint;
end;

procedure Tobject_base.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if btn_save.Enabled then
  if Application.MessageBox('资料没有存盘,是否退出?', '返回', MB_OKCANCEL + MB_DEFBUTTON1+ MB_ICONWARNING) = IDCANCEL then Abort;
//写窗体配置文件
  if self.BorderStyle=bsSizeToolWin then
  begin
   //窗体
   inifile.writeInteger(self.Name,'width',self.Width);
   inifile.writeInteger(self.Name,'height',self.Height);
   //panel
   inifile.writeInteger(self.Name,'panleftw',tpanel(self.FindComponent('panleft')).Width);
   inifile.writeInteger(self.Name,'panlefth',tpanel(self.FindComponent('panleft')).Height);
   //在close中写配置和释放文件;
   inifile.Free;
  end;

  Application.OnHint :=nil;
  Action:=Cafree;
//  self:=nil;
end;

procedure Tobject_base.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
   key:=#0;
   if ActiveControl <> nil then
   if ActiveControl.TabOrder<MAXTABORDER then
      selectnext(Activecontrol,True,True)
   else
  end;
end;

procedure Tobject_base.DisplayHint(Sender:Tobject);
begin
  mainform.StatusBar1.Panels[1].text:=Application.Hint;
end;

procedure Tobject_base.EditEnter(Sender: TObject);
begin
   TDBEdit(Sender).Color              :=clyellow;
   TwwDBEdit(Sender).Color            :=clyellow;
   TwwDBComboBox(Sender).Color        :=clyellow;
   mainform.StatusBar1.Panels[1].Text := Copy(Hint, Pos('|', Hint) + 1, Length(Hint));
end;

procedure Tobject_base.EditExit(Sender:Tobject);
begin
   TDBEdit(Sender).Color              :=clwindow;
   TwwDBEdit(Sender).Color            :=clwindow;
   TwwDBComboBox(Sender).Color        :=clwindow;
   mainform.StatusBar1.Panels[1].Text := '';
end;

procedure Tobject_base.EditKeyDown(Sender: TObject; var Key: Word;
                                  Shift: TShiftState);
begin
   if Key=VK_ESCAPE then  Key:=0;
   case Key of
      VK_DOWN:
      begin
         Key := 0;
         if ActiveControl<>nil then
         if TWinControl(ActiveControl).TabOrder < MAXTABORDER then
            SelectNext(ActiveControl, True, True);
      end;
      VK_UP:
      begin
         Key := 0;
         if ActiveControl<>nil then         
         if TWinControl(ActiveControl).TabOrder <> 0 then
            SelectNext(ActiveControl, False, True);
      end;
   end;
end;

procedure Tobject_base.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case Key of
      VK_DOWN:
      begin
         Key := 0;
         if ActiveControl<>nil then         
         if TWinControl(ActiveControl).TabOrder < MAXTABORDER then
            SelectNext(ActiveControl, True, True);
      end;
      VK_UP:
      begin
         Key := 0;
         if ActiveControl<>nil then         
         if TWinControl(ActiveControl).TabOrder <> 0 then
            SelectNext(ActiveControl, False, True);
      end;
   end;
end;

procedure Tobject_base.Btn_quitClick(Sender: TObject);
begin
  close;
end;

procedure Tobject_base.FormShow(Sender: TObject);
begin
   dlgloading.close;
   dlgloading.free;
end;

procedure Tobject_base.Btn_AppendClick(Sender: TObject);
begin
   BtnTyp:='Append';
   mainform.Statusbar1.Panels[0].text:='资料新增';
   Data_Master.Append;
   append_button;
end;

procedure Tobject_base.Btn_DeleteClick(Sender: TObject);
begin
  BtnTyp:='Delete';
  mainform.Statusbar1.Panels[0].text:='资料删除';
  if not Data_Master.IsEmpty  then
  begin
    if Application.MessageBox('是否确认删除该记录?','警告',MB_YESNO or MB_ICONWARNING)=IDYES then
    begin
      Try
        datamoduledb.DatabaseAcct.StartTransaction;
        deletedata;
        data_master.ApplyUpdates;  //提交缓存;清除缓存;
        data_master.CommitUpdates;
        datamoduledb.DatabaseAcct.Commit;
        BtnTyp:='';
        if data_master.IsEmpty then norecord_button
         else brow_button;
      except
        datamoduledb.DatabaseAcct.Rollback;
        data_master.CancelUpdates;
        if data_master.IsEmpty then norecord_button
         else brow_button;              
      end;
    end;
  end;
end;

procedure Tobject_base.Btn_SaveClick(Sender: TObject);
begin
  mainform.StatusBar1.Panels[0].Text:='存盘';
  Screen.Cursor := crHourglass;
  try
    datamoduledb.DatabaseAcct.StartTransaction;
    savedata;
    data_master.ApplyUpdates;  //提交缓存;清除缓存;
    data_master.CommitUpdates;
    datamoduledb.DatabaseAcct.Commit;
    BtnTyp:='';
    brow_button;
    //Data_MasterAfterScroll(Data_master); //用来刷新按钮
  except
    Screen.Cursor := crDefault;
//    data_master.CancelUpdates;  出错不因该回滚当前记录!而且在有主明细的情况下是错误的!
    datamoduledb.DatabaseAcct.Rollback;
  end;
  Screen.Cursor := crDefault;
end;

procedure Tobject_base.Btn_CancelClick(Sender: TObject);
begin
  mainform.StatusBar1.Panels[0].Text:='放弃所有异动';
  Data_Master.CancelUpdates;
  BtnTyp:='Abort';
  if data_master.IsEmpty then norecord_button
  else  brow_button;
  dbn_master.Enabled:=true;
end;

procedure Tobject_base.Btn_FindClick(Sender: TObject);
begin
  BtnTyp:='Find';
  mainform.Statusbar1.Panels[0].text:='资料查询';
end;

procedure Tobject_base.Btn_PrintClick(Sender: TObject);
begin
  BtnTyp:='Print';
  mainform.Statusbar1.Panels[0].text:='资料列印';
end;

procedure Tobject_base.Btn_auditClick(Sender: TObject);
begin
   BtnTyp:='Audit';
   mainform.Statusbar1.Panels[0].text:='核准';
end;

procedure Tobject_base.Btn_endClick(Sender: TObject);
begin
  BtnTyp:='End';
  mainform.Statusbar1.Panels[0].text:='结案';
end;

procedure Tobject_base.Btn_checkClick(Sender: TObject);
begin
  BtnTyp:='Check';
  mainform.Statusbar1.Panels[0].text:='计算';
end;

procedure Tobject_base.Btn_copyClick(Sender: TObject);
begin
   BtnTyp:='Copy';
   mainform.Statusbar1.Panels[0].text:='复制';
end;

procedure Tobject_base.Btn_modifyClick(Sender: TObject);
begin
   BtnTyp:='Modify';
   mainform.Statusbar1.Panels[0].text:='修改';
   Data_Master.Edit;
   Append_button;
end;

procedure Tobject_base.Btn_RefreshClick(Sender: TObject);
begin
  BtnTyp:='Refresh';
  mainform.Statusbar1.Panels[0].text:='刷新';
  try
    Data_Master.Close;
    Data_Master.Open;
  except
  end;
end;

procedure Tobject_base.append_button;        //新增状态的BUTTON
begin
  Btn_append.Enabled:=False;
  Btn_Save.Enabled:=True;
  Btn_Modify.Enabled:=False;
  Btn_delete.Enabled:=False;
  Btn_Find.Enabled:=False;
  Btn_copy.Enabled:=False;
  Btn_cancel.Enabled:=True;
  Btn_print.Enabled:=False;
  Btn_Refresh.Enabled:=False;
  Btn_check.Enabled:=False;
  Btn_audit.Enabled:=False;
  Btn_end.Enabled:=False;
  dbn_master.Enabled:=false;
end;

procedure Tobject_base.norecord_button; //无记录状态
begin
  if pu_qx='A' then Btn_append.Enabled:=True else btn_append.Enabled:=false;
  Btn_Save.Enabled:=False;
  Btn_delete.Enabled:=False;
  Btn_Modify.Enabled:=False;
  Btn_cancel.Enabled:=False;
  Btn_print.Enabled:=False;
  Btn_Find.Enabled:=True;
  Btn_copy.Enabled:=False;
  Btn_Refresh.Enabled:=False;
  Btn_check.Enabled:=False;
  Btn_audit.Enabled:=False;
  Btn_end.Enabled:=False;
end;

procedure Tobject_base.record_button;      //有记录
begin
  if pu_qx='A' then Btn_append.Enabled:=True else btn_append.Enabled:=false;
  if pu_qx='A' then Btn_copy.Enabled:=True else btn_copy.Enabled:=false;
  if pu_qx='A' then Btn_delete.Enabled:=true else btn_delete.Enabled:=false;
  Btn_Cancel.Enabled:=false; //有记录的时候不能还原!
  if pu_qx='A' then Btn_Modify.Enabled:=true else btn_modify.Enabled:=false;
  Btn_print.Enabled:=True;

  Btn_check.Caption:='计算';
  if pu_qx='A' then Btn_check.Enabled:=true else btn_check.Enabled:=false;
  Btn_audit.Caption:='核准';
  if pu_qx='A' then Btn_audit.Enabled:=true else btn_audit.Enabled:=false;
  Btn_end.Caption:='结案';
  if pu_qx='A' then Btn_end.Enabled:=true else btn_end.Enabled:=false;
  dbn_master.Enabled:=True;
end;

procedure Tobject_base.edit_button;
begin
  if data_master.isempty and (btntyp<>'Append') then abort;
  Append_button;
end;

procedure Tobject_base.Data_MasterAfterScroll(DataSet: TDataSet);
begin
  if BtnTyp='Append' then append_button  //如果新增
  else
  begin
    if data_master.IsEmpty then  norecord_button  //如果无记录
    else record_button;
  end;
end;

procedure Tobject_base.Data_MasterBeforeEdit(DataSet: TDataSet);
begin
  edit_button;
end;

procedure Tobject_base.Data_MasterAfterOpen(DataSet: TDataSet);
begin
  //如果一打开为空,也要执行一遍Data_MasterAfterScroll 设定BUTTON状态
  if data_master.IsEmpty  then  norecord_button
  else brow_button;
end;

procedure Tobject_base.Btn_helpClick(Sender: TObject);
begin
  htmlhelp(self.Handle,pchar(extractfilepath(application.ExeName)+'\help\uesoft_help.chm ::/'+self.name+'.htm'),HH_DISPLAY_TOPIC,0);
end;

procedure Tobject_base.brow_button;
begin
    if pu_qx='A' then Btn_append.Enabled:=True else btn_append.Enabled:=false;
    Btn_Save.Enabled:=False;
    if pu_qx='A' then Btn_delete.Enabled:=True else btn_append.Enabled:=false;
    if pu_qx='A' then Btn_Modify.Enabled:=True else btn_append.Enabled:=false;
    Btn_cancel.Enabled:=False;
    Btn_print.Enabled:=True;
    Btn_Find.Enabled:=True;
    if pu_qx='A' then Btn_copy.Enabled:=True else btn_copy.Enabled:=false;
    Btn_Refresh.Enabled:=true;
    if pu_qx='A' then Btn_check.Enabled:=True else btn_check.Enabled:=false;
    if pu_qx='A' then Btn_audit.Enabled:=True else btn_audit.Enabled:=false;
    if pu_qx='A' then Btn_end.Enabled:=True else btn_end.Enabled:=false;
    dbn_master.Enabled:=True;    
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -