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

📄 u_conductitem.pas

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

interface

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

type
  TCompRecord = record
    Code: integer;
    Name: string;
  end;

  TFm_ConductItem = class(TForm)
    DDS: TDataSource;
    Dock: TDock97;
    Tb97_Func: TToolbar97;
    TbBtn_Edit: TToolbarButton97;
    TbBtn_Add: TToolbarButton97;
    TbBtn_Delete: TToolbarButton97;
    TbSep01: TToolbarSep97;
    TbBtn_Help: TToolbarButton97;
    TbBtn_Exit: TToolbarButton97;
    Grid: THDBGrid;
    DQuery: TQuery;
    DUpSQL: TUpdateSQL;
    PPM: TPopupMenu;
    PM_Add: TMenuItem;
    PM_Edit: TMenuItem;
    PM_Delete: TMenuItem;
    PM_Z01: TMenuItem;
    PM_Help: TMenuItem;
    PM_Exit: TMenuItem;
    TbBtn_Save: TToolbarButton97;
    TbSep02: TToolbarSep97;
    N1: TMenuItem;
    PM_Save: TMenuItem;
    DQueryI_PJDHAO: TIntegerField;
    DQuerySI_ZBIAO: TSmallintField;
    DQueryS_PJNRONG: TStringField;
    TbBtn_Print: TToolbarButton97;
    TbSp01: TToolbarSep97;
    PM_Print: TMenuItem;
    PM_Z03: TMenuItem;
    procedure TbBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TbBtn_AddClick(Sender: TObject);
    procedure TbBtn_DeleteClick(Sender: TObject);
    procedure TbBtn_HelpClick(Sender: TObject);
    procedure DQueryBeforePost(DataSet: TDataSet);
    procedure DQueryAfterPost(DataSet: TDataSet);
    procedure TbBtn_EditClick(Sender: TObject);
    procedure TbBtn_SaveClick(Sender: TObject);
    procedure DQuerySI_ZBIAOGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    procedure DQuerySI_ZBIAOSetText(Sender: TField; const Text: String);
    procedure GridDblClick(Sender: TObject);
    procedure GridKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure TbBtn_PrintClick(Sender: TObject);
  private
  public
    AComp: array of TCompRecord;
  end;

var
  Fm_ConductItem: TFm_ConductItem;

procedure Show_ConductItem;

implementation

uses U_Main, U_GlobalProc, U_GlobalVar, U_DM, U_Print;

{$R *.DFM}

procedure Show_ConductItem;
var
  i: integer;
  SQuery: TQuery;
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_ConductItem') then
      Fm_Main.MDIChildren[i].Close;
  end;
  if not Assigned(Fm_ConductItem) then
  begin
    Fm_ConductItem := TFm_ConductItem.Create(Application);
    with Fm_ConductItem do
    begin
      SQuery := TQuery.Create(Application);
      with SQuery do
      try
        DataBaseName := SysDBase;
        SQL.Text := 'SELECT * FROM dict3 WHERE tablename = ''PXBXZB'' ' +
                    'AND fieldname = ''SI_ZBIAO'' ORDER BY fieldcode';
        Open;
        i := 1;
        while not Eof do
        begin
          SetLength(AComp, i);
          AComp[i-1].Code := FieldByName('FieldCode').AsInteger;
          AComp[i-1].Name := FieldByName('FieldValue').AsString;
          Grid.Columns[1].PickList.Add(AComp[i-1].Name);
          Inc(i);
          Next;
        end;
      finally
        Close;
        Free;
      end;

      DQuery.Open;
      if DQuery.IsEmpty then
      begin
        Grid.Options := Grid.Options - [tgEditing];
        TbBtn_Edit.Enabled := False;
        TbBtn_Delete.Enabled := False;
        PM_Edit.Enabled := False;
        PM_Delete.Enabled := False;
      end;
      RefreshGridStyle(Grid);
    end;
  end;
  with Fm_ConductItem do
  begin
    if WindowState <> wsMaximized then
      WindowState := wsMaximized;
    Show;
    SetFocus;
  end;
end;

procedure TFm_ConductItem.TbBtn_ExitClick(Sender: TObject);
begin
  Close;
end;

procedure TFm_ConductItem.FormClose(Sender: TObject;
  var Action: TCloseAction);
var
  i: integer;
begin
  DQuery.Close;
  Action := caFree;
  for i := 0 to Length(aComp) - 1 do
    aComp[i].Name := '';
  SetLength(AComp, 0);
  Fm_ConductItem := nil;
end;

procedure TFm_ConductItem.TbBtn_AddClick(Sender: TObject);
var
  tmOrder: integer;
begin
  tmOrder := 1;
  try                 
    with DQuery do    
    begin
      DisableControls;
      First;
      while not Eof do
      begin
        if tmOrder <> FieldByName('i_pjdhao').AsInteger then
          Break;
        Inc(tmOrder);
        Next;
      end;
      if Eof then     
        Append        
      else
        Insert;
      FieldByName('i_pjdhao').AsInteger := tmOrder;
      Grid.Options := Grid.Options + [tgEditing];
    end;
  finally
    DQuery.EnableControls;
  end;
end;

procedure TFm_ConductItem.TbBtn_DeleteClick(Sender: TObject);
begin
  if not U_GlobalProc.Show_ConfirmMess('真的删除当前条目吗') then
    Exit;
  DQuery.Delete;
  DQuery.ApplyUpdates;
  if DQuery.IsEmpty then
  begin
    Grid.Options := Grid.Options - [tgEditing];
    TbBtn_Edit.Enabled := False;
    TbBtn_Delete.Enabled := False;
    PM_Edit.Enabled := False;
    PM_Delete.Enabled := False;
  end;
end;

procedure TFm_ConductItem.TbBtn_HelpClick(Sender: TObject);
begin //               
                       
end;

procedure TFm_ConductItem.DQueryBeforePost(DataSet: TDataSet);
begin //
  with DQuery do
  if Trim(FieldByName('s_pjnrong').AsString) = '' then
  begin
    if (State = dsInsert) or ((State = dsEdit) and
        (not U_GlobalProc.Show_ConfirmMess(
          '词条内容被修改为空值,是否存盘?'))) then
    begin
      Cancel;
      if IsEmpty then
        Grid.Options := Grid.Options - [tgEditing];
      Abort;
    end;
  end;
end;

procedure TFm_ConductItem.DQueryAfterPost(DataSet: TDataSet);
begin
  if not DQuery.IsEmpty then
  begin
    TbBtn_Edit.Enabled := True;
    TbBtn_Delete.Enabled := True;
    PM_Edit.Enabled := True;
    PM_Delete.Enabled := True;
  end else
    Grid.Options := Grid.Options - [tgEditing];
  DQuery.ApplyUpdates;
end;

procedure TFm_ConductItem.TbBtn_EditClick(Sender: TObject);
begin
  Grid.Col := 2;
  DQuery.Edit;
end;

procedure TFm_ConductItem.TbBtn_SaveClick(Sender: TObject);
begin //
  if DQuery.State in [dsEdit, dsInsert] then
    DQuery.Post;
end;

procedure TFm_ConductItem.DQuerySI_ZBIAOGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
var
  tmCode, i: integer;
begin//
  tmCode := Sender.AsInteger;
  for i := 0 to Length(aComp) - 1 do
  begin
    if tmCode = aComp[i].Code then
      Text := aComp[i].Name;
  end;
end;

procedure TFm_ConductItem.DQuerySI_ZBIAOSetText(Sender: TField;
  const Text: String);
var
  i: integer;
begin//
  for i := 0 to Length(aComp) - 1 do
  begin
    if Text = aComp[i].Name then
      Sender.AsInteger := aComp[i].Code ;
  end;
end;

procedure TFm_ConductItem.GridDblClick(Sender: TObject);
var
  tmI: integer;
begin
  if Grid.Col = 2 then
    DQuery.Edit;
  if (DQuery.State in [dsEdit, dsInsert]) and
     (Grid.Col = 2) then
  begin
    tmI := DQuery.FieldByName('SI_ZBIAO').AsInteger + 1;
    if tmI > Length(AComp) then
      tmI := 1;
    DQuery.FieldByName('SI_ZBIAO').AsInteger := tmI;
  end;
end;

procedure TFm_ConductItem.GridKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  tmI: integer;
begin
  if (Key = VK_SPACE) and (Grid.Col = 2) then
    DQuery.Edit;
  if (DQuery.State in [dsEdit, dsInsert]) and
     (Key = VK_SPACE) and (Grid.Col = 2) then
  begin
    tmI := DQuery.FieldByName('SI_ZBIAO').AsInteger + 1;
    if tmI > Length(AComp) then
      tmI := 1;
    DQuery.FieldByName('SI_ZBIAO').AsInteger := tmI;
    Key := 0;
  end;
end;

procedure TFm_ConductItem.TbBtn_PrintClick(Sender: TObject);
begin
  Show_Print(Grid);
end;

end.

⌨️ 快捷键说明

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