comdczl.pas

来自「IT业进销存管理系统源代码Delphi」· PAS 代码 · 共 230 行

PAS
230
字号
unit ComDczl;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComJbzl, ActnList, Menus, ComCtrls, DBCtrls, ToolWin, ExtCtrls, StdCtrls,
  Grids, DBGrids, DB, IniFiles, DBClient, Imm;

type
  TfrmComDczl = class(TfrmComJbzl)
    Splitter1: TSplitter;
    pnlDetail: TPanel;
    DBGrid2: TDBGrid;
    aDetail: TAction;
    LineE4: TMenuItem;
    smnDetail: TMenuItem;
    N6: TMenuItem;
    pmnDetail: TMenuItem;
    btnDetail: TToolButton;
    ToolButton2: TToolButton;
    procedure FormShow(Sender: TObject);override;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);override;
    procedure DBGrid1Enter(Sender: TObject);virtual;
    procedure DBGrid1Exit(Sender: TObject);virtual;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);virtual;
    procedure dsAfterOpen(DataSet: TDataSet);virtual;
    procedure LoadEditForm(strState:string);override;
    procedure aDetailExecute(Sender: TObject);virtual;
    procedure aDelExecute(Sender: TObject);override;
    procedure SetButton;override;
  private
    { Private declarations }
  public
    { Public declarations }
    iniPos : TIniFile;
    dbgCur: TDBGrid;
  end;

var
  frmComDczl: TfrmComDczl;

implementation

uses Common, Main, Dm, SetSort;

{$R *.DFM}

procedure TfrmComDczl.FormShow(Sender: TObject);
var
  i: integer;
begin
  iniPos := TiniFile.Create( ExtractFilePath(Application.ExeName) + 'Column\' +
          FormatFloat('0000', pintUserID) + self.Name + '.ini');
  for i := 0 to self.ComponentCount - 1 do
  begin
    if (self.Components[i] is TPanel) or (self.Components[i] is TDBGrid) then
    begin
      TWinControl(self.Components[i]).Left :=
        iniPos.ReadInteger(self.Components[i].Name, 'Left', TWinControl(self.Components[i]).Left);
      TWinControl(self.Components[i]).Top :=
        iniPos.ReadInteger(self.Components[i].Name, 'Top', TWinControl(self.Components[i]).Top);
      TWinControl(self.Components[i]).Width :=
        iniPos.ReadInteger(self.Components[i].Name, 'Width', TWinControl(self.Components[i]).Width);
      TWinControl(self.Components[i]).Height :=
        iniPos.ReadInteger(self.Components[i].Name, 'Height', TWinControl(self.Components[i]).Height);
    end;
    if self.Components[i] is TDBGrid then
    begin
      TDBGrid(self.Components[i]).DataSource.DataSet.AfterScroll := dsAfterScroll;
      TDBGrid(self.Components[i]).DataSource.DataSet.AfterOpen := dsAfterOpen;
    end;
  end;
  aDetail.Checked := iniPos.ReadBool(FormatFloat('0000', pintUserID) + self.Name, 'Show', aDetail.Checked);
  iniPos.Free;
  pnlDetail.Visible := aDetail.Checked;
  Splitter1.Visible := aDetail.Checked;
  dbgCur := DBGrid1;
  inherited;
  if pnlDetail.Visible then
    DBGrid2.SetFocus;
  DBGrid1.SetFocus;
  dsAfterOpen(DBGrid1.DataSource.DataSet);
end;

procedure TfrmComDczl.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  iniPos := TiniFile.Create( ExtractFilePath(Application.ExeName) + 'Column\' +
          FormatFloat('0000', pintUserID) + self.Name + '.ini');
  for i := 0 to self.ComponentCount - 1 do
  begin
    if (self.Components[i] is TPanel) or (self.Components[i] is TDBGrid) then
    begin
      iniPos.WriteInteger( self.Components[i].Name, 'Left', TWinControl(self.Components[i]).Left );
      iniPos.WriteInteger( self.Components[i].Name, 'Top', TWinControl(self.Components[i]).Top );
      iniPos.WriteInteger( self.Components[i].Name, 'Width', TWinControl(self.Components[i]).Width );
      iniPos.WriteInteger( self.Components[i].Name, 'Height', TWinControl(self.Components[i]).Height );
    end;
    if self.Components[i] is TDBGrid then
    begin
      TDBGrid(self.Components[i]).DataSource.DataSet.Close;
      TDBGrid(self.Components[i]).DataSource.DataSet.AfterScroll := nil;
      TDBGrid(self.Components[i]).DataSource.DataSet.AfterOpen := nil;
    end;
  end;
  iniPos.WriteBool(FormatFloat('0000', pintUserID) + self.Name, 'Show', aDetail.Checked);
  iniPos.Free;
  inherited;
end;

procedure TfrmComDczl.SetButton;
var
  dsJbzl1: TCLientDataSet;
begin
  dsJbzl1 := dsJbzl;
  if (dbgCur <> nil) then
    dsJbzl := TClientDataSet(dbgCur.DataSource.DataSet);
  inherited;
  dsJbzl := dsJbzl1;
end;

//DBGrid
procedure TfrmComDczl.DBGrid1Enter(Sender: TObject);
begin
  inherited;
  dbgCur := TDBGrid(Sender);
  if dbgCur.DataSource = nil then abort;
  //Set Sort
  with Data.Tmp do
  begin
    Close;
    CommandText := 'select * from AppSort ' +
      'where uID = ' + IntToStr(pintUserId) + ' and ' +
      'FormCaption = ''' + self.Name + dbgCur.Name + '''';
    Open;
    if not IsEmpty then
    begin
      labSort.Caption := '排序方式: ' + FieldByName('iCaption').AsString;
      frmSetSort.AddIndexDef(TClientDataSet(dbgCur.DataSource.DataSet),
        FieldByName('iFields').AsString,
        FieldByName('iDescFields').AsString);
    end
    else
    begin
      labSort.Caption := '排序方式: .';
//      frmSetSort.AddIndexDef(TClientDataSet(dbgCur.DataSource.DataSet), '', '')
    end;
  end;
  dbgCur.Repaint;
  SetButton;
end;

procedure TfrmComDczl.DBGrid1Exit(Sender: TObject);
begin
  inherited;
  dbgCur := nil;
  TDBGrid(Sender).Repaint;
end;

procedure TfrmComDczl.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  inherited;
  with (Sender As TDBGrid).Canvas Do
  Begin
    If (state = [gdSelected]) or (state = [gdFocused,gdSelected]) Then
    begin
      if Sender = dbgCur then
      begin
        Brush.Color := clHighLight;
        Font.Color := clHighLightText;
      end else
      begin
        Brush.Color := $00D7D7AE;
        Font.Color := clWindowText;
      end;
    end;
    DBGridAlign(TDBGrid(Sender), Column.Alignment, Rect, Column.Field.DisplayText);
//    TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;

//aDetail.Execute
procedure TfrmComDczl.aDetailExecute(Sender: TObject);
begin
  aDetail.Checked := not aDetail.Checked;
  pnlDetail.Visible := aDetail.Checked;
  Splitter1.Visible := aDetail.Checked;
  if not aDetail.Checked then
    DBGrid1.SetFocus;
  dsAfterScroll(DBGrid1.DataSource.DataSet);
end;

procedure TfrmComDczl.aDelExecute(Sender: TObject);
begin
  if not dbgCur.DataSource.DataSet.IsEmpty Then
  begin
    If HaveDetail(dbgCur.DataSource.DataSet, strDetailTables, strDetailWheres) Then
      Application.MessageBox('已有明细资料,不能删除!', '资料删除', MB_OK + MB_ICONWARNING)
    else
    begin
      if Application.MessageBox('确定要删除此项资料吗?',
        '资料删除', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDYES then
      begin
        dbgCur.DataSource.DataSet.Delete;
        TClientDataSet(dbgCur.DataSource.DataSet).ApplyUpdates(0);
        SetButton;
      end;
    end;
  end;
end;

procedure TfrmComDczl.dsAfterOpen(DataSet: TDataSet);
begin
  dsAfterScroll(DataSet);
end;

procedure TfrmComDczl.LoadEditForm(strState: string);
begin
  inherited;
  dsAfterScroll(dsJbzl);
end;

end.

⌨️ 快捷键说明

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