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

📄 colsetupform.pas

📁 进销存管理 编译环境Delphi7+Win2000 用到的控件 ReportMachine2.6 InfoPower4000Pro_vcl7 RxLib2.7 SkinEngine 3
💻 PAS
字号:
unit ColSetupForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, EditForm, KsSkinForms, StdCtrls, Buttons, dxExEdtr, dxTL, dxDBCtrl,
  dxDBGrid, dxCntner, KsSkinPanels, dxDBTLCl, dxGrClms, KsSkinButtons,
  KsSkinSpeedButtons, DB, ADODB, se_controls;

type
  TfrmColSetup = class(TfrmEditForm)
    SeSkinPanel1: TSeSkinPanel;
    gridMain: TdxDBGrid;
    gridMainColumn1: TdxDBGridColumn;
    gridMainColumn2: TdxDBGridColumn;
    gridMainColumn3: TdxDBGridCheckColumn;
    sbUnName: TSeSkinSpeedButton;
    sbVisible: TSeSkinSpeedButton;
    sbUp: TSeSkinSpeedButton;
    sbDown: TSeSkinSpeedButton;
    sbRevert: TSeSkinSpeedButton;
    bbOk: TSeSkinButton;
    bbExit: TSeSkinButton;
    dsSource: TDataSource;
    DataSet: TADODataSet;
    procedure sbRevertClick(Sender: TObject);
    procedure bbOkClick(Sender: TObject);
    procedure bbExitClick(Sender: TObject);
    procedure sbVisibleClick(Sender: TObject);
    procedure sbUnNameClick(Sender: TObject);
    procedure sbUpClick(Sender: TObject);
    procedure sbDownClick(Sender: TObject);
  private
    { Private declarations }
    bReturn: Boolean;
    sCaption1: string;
    Grid1: TdxDBGrid;
    lInit1: Integer;
    function InitData: Boolean;
    function UpdateGrid: Boolean;
    function RevertGrid(s: string; lUp: integer): Boolean;
    function GetColumnID(sField: string): Integer;
    procedure MainShow;
    function LoadData: Boolean;
    function ReturnSQL(Mode: string): string;
  public
    { Public declarations }
  end;

function ColSetupShow(sCaption: string; Grid: TdxDBGrid; lInit: Integer):
  Boolean;
function SaveColWidth(sCaption: string; Grid: TdxDBGrid): Boolean;
implementation

uses DBData, SysPublic;
{$R *.dfm}

function ColSetupShow(sCaption: string; Grid: TdxDBGrid; lInit: Integer):
  Boolean;
var
  frmColSetup: TfrmColSetup;
begin
  frmColSetup := TfrmColSetup.Create(Application);
  with frmColSetup do
  begin
    sCaption1 := sCaption;
    Grid1 := Grid;
    lInit1 := lInit;
    MainShow;
    Result := bReturn;
    Free;
  end;
end;

function SaveColWidth(sCaption: string; Grid: TdxDBGrid): Boolean;
var
  sSql, sFieldName: string;
  lWidth, i: Integer;
begin
  for i := 0 to Grid.ColumnCount - 1 do
  begin
    sFieldName := Grid.Columns[i].FieldName;
    lWidth := Grid.Columns[i].Width;
    sSql := ' Update ColSetup Set Width=' + IntToStr(lWidth) +
      ' Where Caption=''' + Trim(sCaption) + ''' and FieldName=''' +
      Trim(sFieldName) + '''';
    ExecSql(sSql);
  end;
  Result := True;
end;

procedure TfrmColSetup.MainShow;
begin
  if not LoadData then
    Exit;
  if lInit1 = 0 then
    ShowModal
  else
    UpdateGrid;
  DataSet.Close;
end;

function TfrmColSetup.LoadData: Boolean;
begin
  Result := False;
  bReturn := false;
  Caption := '通用表格列设置';
  if not OpenDataSet(DataSet, ReturnSQL('S')) then
    Exit;
  Result := True;
end;

function TfrmColSetup.ReturnSQL(Mode: string): string;
begin
  if Mode = 'S' then
    Result := 'Select * from ColSetup Where Caption=''' + Trim(sCaption1) +
      ''' ORDER BY ColOrder'
  else
    if Mode = 'D' then
      Result := 'Delete from ColSetup Where Caption=''' + Trim(sCaption1) + '''';
end;

function TfrmColSetup.InitData: Boolean;
var
  sFieldName, sSysName, sUserName: string;
  lWidth, i: Integer;
begin
  Result := False;
  ExecSql(ReturnSQL('D'));
  if not OpenDataSet(DataSet, ReturnSQL('S')) then
    Exit;
  for i := 1 to Grid1.ColumnCount - 1 do
  begin
    sFieldName := Grid1.Columns[i].FieldName;
    sSysName := Grid1.Columns[i].Caption;
    lWidth := Grid1.Columns[i].Width;
    sUserName := sSysName;
    DataSet.Append;
    DataSet.FieldByName('Caption').AsString := Trim(sCaption1);
    DataSet.FieldByName('FieldName').AsString := Trim(sFieldName);
    DataSet.FieldByName('SysName').AsString := Trim(sSysName);
    DataSet.FieldByName('UserName').AsString := sUserName;
    DataSet.FieldByName('Width').AsInteger := lWidth;
    DataSet.FieldByName('Visible').AsInteger := 1;
    DataSet.FieldByName('ColOrder').AsInteger := Grid1.Columns[i].Index;
  end;
  SaveDataSet(DataSet, True);
  DataSet.First;
  Result := True;
end;

function TfrmColSetup.UpdateGrid: Boolean;
var
  i: Integer;
begin
  Result := False;
  try
    begin
      if DataSet.RecordCount <> Grid1.ColumnCount - 1 then
        InitData;
      DataSet.First;
      while not DataSet.Eof do
      begin
        i := GetColumnID(DataSet.FieldByName('FieldName').AsString);
        if i < 0 then
        begin
          DataSet.Next;
          Continue;
        end;
        Grid1.Columns[i].Caption := DataSet.FieldByName('UserName').AsString;
        Grid1.Columns[i].Width := DataSet.FieldByName('Width').AsInteger;
        if DataSet.FieldByName('Visible').AsInteger < 0 then
          Grid1.Columns[i].Visible := False
        else
          Grid1.Columns[i].Visible := True;
        Grid1.Columns[i].Index := DataSet.FieldByName('ColOrder').AsInteger;
        DataSet.Next;
      end;
      DataSet.First;
    end;
  except
    Exit;
  end;
  Result := True;
end;

function TfrmColSetup.GetColumnID(sField: string): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i := 1 to Grid1.ColumnCount - 1 do
    if Trim(sField) = Trim(Grid1.Columns[i].FieldName) then
    begin
      Result := i;
      Exit;
    end;
end;

procedure TfrmColSetup.sbRevertClick(Sender: TObject);
begin
  inherited;
  RevertGrid('A', 0);
end;

procedure TfrmColSetup.bbOkClick(Sender: TObject);
begin
  inherited;
  SaveDataSet(DataSet, True);
  UpdateGrid;
  Close;
end;

procedure TfrmColSetup.bbExitClick(Sender: TObject);
begin
  inherited;
  DataSet.CancelUpdates;
  Close;
end;

function TfrmColSetup.RevertGrid(s: string; lUp: integer): Boolean;
var
  SavePlace: TBookmark;
  i1, i2: Integer;
begin
  Result := False;
  if Trim(s) = 'A' then
  begin
    if MsgBox('你确定要恢复所有改变,回到原始设置吗??',
      '提示', MB_OKCANCEL) = IDOK then
    begin
      ExecSql(ReturnSQL('D'));
      Close;
    end;
  end
  else
    if (Trim(s) = 'V') or (Trim(s) = 'N') then
      with DataSet do
      begin
        SavePlace := GetBookmark;
        First;
        while not Eof do
        begin
          Edit;
          if Trim(s) = 'V' then
            FieldByName('Visible').AsInteger := 1
          else
            if Trim(s) = 'N' then
              FieldByName('UserName').AsString := FieldByName('SysName').AsString;
          Next;
        end;
        try
          GotoBookmark(SavePlace);
        finally
          FreeBookmark(SavePlace);
        end;
      end
    else
      if Trim(s) = 'M' then
        with DataSet do
        begin
          SavePlace := GetBookmark;
          i1 := FieldByName('ColOrder').AsInteger;
          if lUp = 0 then
            Next
          else
            Prior;
          if (lUp = 0) and Eof then
            Exit;
          if (lUp = 1) and Bof then
            Exit;
          i2 := FieldByName('ColOrder').AsInteger;
          Edit;
          FieldByName('ColOrder').AsInteger := i1;
          if lUp = 0 then
            Prior
          else
            Next;
          if (lUp = 0) and Eof then
            Exit;
          if (lUp = 1) and Bof then
            Exit;
          Edit;
          FieldByName('ColOrder').AsInteger := i2;
          SaveDataSet(DataSet, True);
          if not OpenDataSet(DataSet, ReturnSQL('S')) then
            Exit;
          try
            GotoBookmark(SavePlace);
          finally
            FreeBookmark(SavePlace);
          end;
          if lUp = 0 then
            Next
          else
            Prior;
        end;
  Result := True;
end;

procedure TfrmColSetup.sbVisibleClick(Sender: TObject);
begin
  inherited;
  RevertGrid('V', 0);
end;

procedure TfrmColSetup.sbUnNameClick(Sender: TObject);
begin
  inherited;
  RevertGrid('N', 0);
end;

procedure TfrmColSetup.sbUpClick(Sender: TObject);
begin
  inherited;
  RevertGrid('M', 1);
end;

procedure TfrmColSetup.sbDownClick(Sender: TObject);
begin
  inherited;
  RevertGrid('M', 0);
end;

end.

⌨️ 快捷键说明

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