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

📄 u_changeregister.pas

📁 一个简单的学籍管理软件
💻 PAS
字号:
unit U_ChangeRegister;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  HGrids, HDBGrids, TB97Tlbr, TB97Ctls, TB97, DBTables, Db, Menus,
  ComCtrls, ExtCtrls, ImgList;

type
  TFm_ChangeRegister = class(TForm)
    MDS: TDataSource;
    Dock: TDock97;
    Tb97_Func: TToolbar97;
    TbBtn_Help: TToolbarButton97;
    TbBtn_Exit: TToolbarButton97;
    MQuery: TQuery;
    MUpSQL: TUpdateSQL;
    PPM: TPopupMenu;
    PM_Add: TMenuItem;
    PM_Edit: TMenuItem;
    PM_Delete: TMenuItem;
    PM_Z01: TMenuItem;
    PM_BBan: TMenuItem;
    PM_Help: TMenuItem;
    PM_Exit: TMenuItem;
    PM_Z02: TMenuItem;
    Spl_Main: TSplitter;
    Pnl_DAn: TPanel;
    ImageList: TImageList;
    TbSep02: TToolbarSep97;
    TbBtn_Add: TToolbarButton97;
    TbBtn_Edit: TToolbarButton97;
    TbBtn_Delete: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    MGrid: THDBGrid;
    MTrView: TTreeView;
    SGrid: THDBGrid;
    Splitter1: TSplitter;
    SQuery: TQuery;
    SDs: TDataSource;
    ScrollTimer: TTimer;
    TbBtn_Save: TToolbarButton97;
    MQueryS_XHAO: TStringField;
    MQueryI_SXHAO: TIntegerField;
    MQuerySI_LXING: TSmallintField;
    MQueryD_SJIAN: TDateField;
    MQueryS_BRBJHAO: TStringField;
    MQueryS_YYSMING: TStringField;
    procedure TbBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Spl_MainCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure Spl_FuCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure MTrViewGetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewGetSelectedIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewChange(Sender: TObject; Node: TTreeNode);
    procedure TbBtn_HelpClick(Sender: TObject);
    procedure MQueryAfterPost(DataSet: TDataSet);
    procedure QueryGetText(Sender: TField; var Text: String; DisplayText: Boolean);
    procedure QuerySetText(Sender: TField; const Text: String);
    procedure MGridDblClick(Sender: TObject);
    procedure TbBtn_AddClick(Sender: TObject);
    procedure TbBtn_DeleteClick(Sender: TObject);
    procedure SQueryAfterScroll(DataSet: TDataSet);
    procedure ScrollTimerTimer(Sender: TObject);
    procedure TbBtn_EditClick(Sender: TObject);
    procedure MQueryBeforePost(DataSet: TDataSet);
    procedure MGridKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure TbBtn_SaveClick(Sender: TObject);
    procedure MQueryAfterOpen(DataSet: TDataSet);
    procedure SQueryAfterOpen(DataSet: TDataSet);
  private
    FOpenFlag: integer;
  public
  end;

var
  Fm_ChangeRegister: TFm_ChangeRegister;

procedure Show_ChangeRegister;

implementation

uses U_Main, U_GlobalProc, U_GlobalVar, U_DM;


{$R *.DFM}

procedure Show_ChangeRegister;
var
  i: integer;
  aQuery: TQuery;
  aColumn: THColumn;
begin
  for i := Fm_Main.MDIChildCount - 1 downto 0 do
  begin
    if (Fm_Main.MDIChildren[i].Name <> 'Fm_Wizard') and
      (Fm_Main.MDIChildren[i].Name <> 'Fm_ChangeRegister') then
      Fm_Main.MDIChildren[i].Close;
  end;
  if not Assigned(Fm_ChangeRegister) then
  begin
    Fm_ChangeRegister := TFm_ChangeRegister.Create(Application);
    with Fm_ChangeRegister do
    begin
      FOpenFlag := 0;
      MQuery.Open;
      ReSetGridColumns(MGrid, 'xsxjbh', QueryGetText, QuerySetText);
      RefreshGridStyle(MGrid);
      aQuery := TQuery.Create(Application);
      with aQuery do
      try
        DataBaseName := DataDBase;
        aColumn := MGrid.FindFirstColumn('si_lxing');
        SQL.Text := 'SELECT * FROM bj WHERE si_dqnji <> -1';

        Open;
        while not Eof do
        begin
          if Assigned(aColumn.Picklist) then
            aColumn.Picklist.AddObject(FieldByName('s_bjmcheng').AsString,
              Pointer(FieldByName('s_bjhao').AsInteger));
          Next;
        end;
        aColumn.Field.OnGetText := QueryGetText;
        aColumn.Field.OnSetText := QuerySetText;
        aColumn.Alignment := taLeftJustify; 
        aColumn.CanEdit := False; 
      finally
        Close;
        Free;
      end;
      MakeGradeTree(MTrView, 0, False);
      MTrView.Items[0].Selected := True;
    end;
  end;
  with Fm_ChangeRegister do
  begin
    if WindowState <> wsMaximized then
      WindowState := wsMaximized;
    Show;
    SetFocus;
  end;
end;

procedure TFm_ChangeRegister.TbBtn_ExitClick(Sender: TObject);
begin
  if MQuery.State = dsEdit then
    MQuery.Post;
  Close;
end;

procedure TFm_ChangeRegister.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  MQuery.Close;
  SQuery.Close;
  Action := caFree;
  Fm_ChangeRegister := nil;
end;

procedure TFm_ChangeRegister.Spl_MainCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_ChangeRegister.Spl_FuCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_ChangeRegister.MTrViewGetImageIndex(Sender: TObject;
  Node: TTreeNode);
begin //
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.ImageIndex := 2
    else
      Node.ImageIndex := 1;
  end
  else
  begin
    if Node.Level = 0 then
      Node.ImageIndex := 1
    else
      Node.ImageIndex := 0;
  end;
end;

procedure TFm_ChangeRegister.MTrViewGetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
begin
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.SelectedIndex := 5
    else
      Node.SelectedIndex := 4;
  end
  else
  begin
    if Node.Level = 0 then
      Node.SelectedIndex := 4
    else
      Node.SelectedIndex := 3;
  end;
end;

procedure TFm_ChangeRegister.MTrViewChange(Sender: TObject;
  Node: TTreeNode);
var
  tmS: string;
begin
  with SQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT s_xhao, s_xming FROM xsjbxx ';
    if Integer(Node.Data) < 9999 then
    begin //  年级
      tmS := S_SchoolCode + IntToStr(Integer(Node.Data)) + '%';
      SQL.Text := SQL.Text + 'WHERE s_xhao LIKE ''' + tmS + '''';
    end
    else
    begin //  班级
      tmS := IntFormatStr(Integer(Node.Data), 9);
      SQL.Text := SQL.Text + 'WHERE s_bjhao = ''' + tmS + '''';
    end;
    Open;
    if SQuery.IsEmpty then
      SQueryAfterScroll(SQuery);
  finally
    EnableControls;
  end;
end;

procedure TFm_ChangeRegister.TbBtn_HelpClick(Sender: TObject);
begin //

end;

procedure TFm_ChangeRegister.MQueryAfterPost(DataSet: TDataSet);
begin
  MQuery.ApplyUpdates;
  if MQuery.IsEmpty then
  begin
    TbBtn_Edit.Enabled := False;
    TbBtn_Delete.Enabled := False;
    PM_Edit.Enabled := False;
    PM_Delete.Enabled := False;
  end
  else
  begin
    TbBtn_Edit.Enabled := True;
    TbBtn_Delete.Enabled := True;
    PM_Edit.Enabled := True;
    PM_Delete.Enabled := True;
  end;
end;

procedure TFm_ChangeRegister.QueryGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  DataSetGetText(MGrid, Sender, Text, DisplayText);
end;

procedure TFm_ChangeRegister.QuerySetText(Sender: TField;
  const Text: String);
begin
  DataSetSetText(MGrid, Sender, Text);
end;

procedure TFm_ChangeRegister.MGridDblClick(Sender: TObject);
begin  //
  GridDblClick(Sender);
end;

procedure TFm_ChangeRegister.TbBtn_AddClick(Sender: TObject);
var
  tmOrder: integer;
begin
  with MQuery do
  try
    DisableControls;
    Last;
    tmOrder := FieldByName('i_sxhao').AsInteger + 1;
    Append;
    FieldByName('s_xhao').AsString := SQuery.FieldByName('s_xhao').AsString;
    FieldByName('i_sxhao').AsInteger := tmOrder;
    MGrid.Options := MGrid.Options + [tgEditing];
    MGrid.Col := 2;
    MGrid.SetFocus;
  finally
    EnableControls;
  end;
end;

procedure TFm_ChangeRegister.TbBtn_DeleteClick(Sender: TObject);
begin  //
  if MQuery.IsEmpty then
    Exit;
  if U_GlobalProc.Show_ConfirmMess('真的删除' + SQuery.FieldbyName('s_xming').AsString +
       '的此次奖惩情况吗?') then
  begin
    MQuery.Delete;
    MQuery.ApplyUpdates;
    if MQuery.IsEmpty then
    begin
      TbBtn_Edit.Enabled := False;
      TbBtn_Delete.Enabled := False;
      PM_Edit.Enabled := False;
      PM_Delete.Enabled := False;
    end
  end;
end;

procedure TFm_ChangeRegister.SQueryAfterScroll(DataSet: TDataSet);
begin  //  防止重入
  case FOpenFlag of
    0: //  空闲
    begin
      FOpenFlag := 1;
      if not ScrollTimer.Enabled then
        ScrollTimer.Enabled := True;
    end;
    2: //  等待
      FOpenFlag := 1;
    3:  //  忙
      FOpenFlag := 4;
  end;
end;

procedure TFm_ChangeRegister.ScrollTimerTimer(Sender: TObject);
Label Restarts;
var
  tmS: string;
begin   //  防止重入
  if FOpenFlag = 1 then
  begin
    FOpenFlag := 2; //  等待
    Exit;
  end;
Restarts:
  FOpenFlag := 3;  //  忙;
  ScrollTimer.Enabled := False;
  tmS := SQuery.FieldByName('s_xhao').AsString;
  with MQuery do
  try
    DisableControls;
    Close;
    SQL.Text := 'SELECT * FROM xsxjbh WHERE s_xhao=''' +
      tmS + '''';
    Open;
  finally
    EnableControls;
  end;
  if FOpenFlag = 4 then  //  有新任务
    goto Restarts;
  FOpenFlag := 0;
end;

procedure TFm_ChangeRegister.TbBtn_EditClick(Sender: TObject);
begin
  MGrid.Col := 2;
  MGrid.SetFocus;
  MQuery.Edit;
end;

procedure TFm_ChangeRegister.MQueryBeforePost(DataSet: TDataSet);
begin
  with MQuery do
  if (FieldByName('si_lxing').AsString = '') or
     (FieldByName('s_yysming').AsString = '') then
  begin
    if (State = dsInsert) or ((State = dsEdit) and
        (not U_GlobalProc.Show_ConfirmMess(
          '学籍变化内容被修改为空值,是否存盘?'))) then
    begin
      Cancel;
      if IsEmpty then
        MGrid.Options := MGrid.Options - [tgEditing];
      Abort;
    end;
  end;
end;

procedure TFm_ChangeRegister.MGridKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  GridKeyDown(Sender, Key, Shift);
end;

procedure TFm_ChangeRegister.TbBtn_SaveClick(Sender: TObject);
begin
  if MQuery.State in [dsEdit, dsInsert] then
  begin
    MQuery.Post;
    MGrid.Col := 2;
  end;
end;

procedure TFm_ChangeRegister.MQueryAfterOpen(DataSet: TDataSet);
begin
  if MQuery.IsEmpty then
  begin
    TbBtn_Edit.Enabled := False;
    TbBtn_Delete.Enabled := False;
    PM_Edit.Enabled := False;
    PM_Delete.Enabled := False;
    MGrid.Options := MGrid.Options - [tgEditing];
  end
  else
  begin
    TbBtn_Edit.Enabled := True;
    TbBtn_Delete.Enabled := True;
    PM_Edit.Enabled := True;
    PM_Delete.Enabled := True;
    MGrid.Options := MGrid.Options + [tgEditing];
  end;
end;

procedure TFm_ChangeRegister.SQueryAfterOpen(DataSet: TDataSet);
begin
  if SQuery.IsEmpty then
  begin
    TbBtn_Add.Enabled := False;
    PM_Add.Enabled := False;
  end
  else
  begin
    TbBtn_Add.Enabled := True;
    PM_Add.Enabled := True;
  end;
end;

end.

⌨️ 快捷键说明

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