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

📄 formcolselect.pas

📁 本程序演示了如何使用编辑器在运行期设置表格的一些常用参数 需要使用到Ehlib控件,最好使用3.6版本,旧版本也适用! 使用前请双击本目录下的DB.UDL连接数据库,连接完成后即可选择数据表进
💻 PAS
字号:
{******************************************************************************}
{ @UnitName    : FormColSelect                                                 }
{ @Project     : PDF                                                           }
{ @Copyright   : kingjit@163.com                                               }
{ @Author      : jacky                                                         }
{ @CreateDate  : 2005-11-09 22:21:09                                           }
{ @LastUpdate  : 2005-11-09 22:21:09 by jacky                                  }
{ @Description :                                                               }
{ @Comment     :                                                               }
{ @History     :                                                               }
{jacky xu                                                                      }
{QQ:112876992                                                                  }
{Email:kingjit@163.com                                                         }
{MSN:kingjit@163.com                                                           }
{skype:kingjit@163.com                                                         }
{http: www.kingjit.com                                                         }
{******************************************************************************}
unit FormColSelect;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGridEh, CheckLst, Buttons, siComp, ComCtrls,
  ExtCtrls, Math;

type
  TFrmColSelect = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    CLB: TCheckListBox;
    Panel3: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ChkCount: TCheckBox;
    UpDownFix: TUpDown;
    EdtFix: TEdit;
    Label1: TLabel;
    ChkMultiTitle: TCheckBox;
    Panel4: TPanel;
    SpeedButton6: TSpeedButton;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton7: TSpeedButton;
    EdtFieldName: TLabeledEdit;
    EdtFieldTitle: TLabeledEdit;
    ChkSort: TCheckBox;
    ChkVisiable: TCheckBox;
    ChkReadOnly: TCheckBox;
    Label2: TLabel;
    CbxSumType: TComboBox;
    CmbFieldname: TComboBox;
    EditSumValue: TLabeledEdit;
    Label3: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure CLBDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure CLBClick(Sender: TObject);
    procedure CbxSumTypeChange(Sender: TObject);
    procedure CmbFieldnameChange(Sender: TObject);
    procedure EditSumValueChange(Sender: TObject);
    procedure ChkReadOnlyClick(Sender: TObject);
    procedure EdtFieldTitleChange(Sender: TObject);
  private
    OldIndex: Integer;
    { Private declarations }
  public
    Grid: TDBGridEH;
    procedure LoadData;
    procedure SaveData;
    procedure SaveFieldValue;
    { Public declarations }
  end;

procedure ShowGridColEditor(Grid: TDBGridEH);

var
  FrmColSelect: TFrmColSelect;

implementation

{$R *.dfm}

procedure ShowGridColEditor(Grid: TDBGridEH);
begin
  //显示GRID的编辑窗口
  if not Assigned(Grid) or not Assigned(Grid.DataSource) or not
    Assigned(Grid.DataSource.DataSet) then
    exit;

  if not Assigned(FrmColSelect) then
    FrmColSelect := TFrmColSelect.Create(Application);
  try
    FrmColSelect.Grid := Grid;
    FrmColSelect.ShowModal;
  finally
    FreeAndNil(FrmColSelect);
  end;
end;

procedure TFrmColSelect.Button2Click(Sender: TObject);
begin
  SaveData;
  ModalResult := mrOk;
end;

procedure TFrmColSelect.CLBDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Sender = Source then
  begin
    Accept := true;
    OldIndex := TCheckListBox(sender).ItemIndex;
  end
  else
    OldIndex := -1;
end;

procedure TFrmColSelect.SpeedButton1Click(Sender: TObject);
var
  i: integer;
begin
  if CLB.ItemIndex > 0 then
  begin
    i := clb.ItemIndex - 1;
    clb.Items.Move(clb.ItemIndex, i);
    CLB.ItemIndex := i;
    CLB.Selected[i];
  end;
end;

procedure TFrmColSelect.SpeedButton2Click(Sender: TObject);
var
  i: integer;
begin
  if CLB.ItemIndex < CLB.Count - 1 then
  begin
    i := clb.ItemIndex + 1;
    clb.Items.Move(clb.ItemIndex, i);
    CLB.ItemIndex := i;
    CLB.Selected[i];
  end;
end;

procedure TFrmColSelect.CheckBox1Click(Sender: TObject);
begin //此处代码用于保存界面的设置到INI文件,
  //但是我界面的保存另有功能实现
  //因此就没有用此功能了,改一改应该就可以用到你们的工程中了
  {
  var
    Ini: TIniFile;
  begin
    if CheckBox1.Checked then
      Grid.SaveGridLayoutIni(ExtractFilePath(Application.ExeName) + '\Grid.ini',
        Grid.Owner.ClassName + '$' + Grid.Name, true)
    else
    begin
      Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\Grid.ini');
      try
        Ini.EraseSection(Grid.Owner.ClassName + '$' + Grid.Name);
      finally
        Ini.Free;
      end;
    end; }
end;

procedure TFrmColSelect.FormShow(Sender: TObject);
begin
  LoadData;
end;

procedure TFrmColSelect.LoadData;
var
  i: integer;
begin //装入GRID的数据到界面
  //第一步,取全局参数
  ChkCount.Checked := Grid.FooterRowCount > 0;
  ChkMultiTitle.Checked := Grid.UseMultiTitle;
  EdtFix.Text := inttostr(Grid.FrozenCols);
  UpDownFix.Max := Grid.Columns.Count - 1;
  UpDownFix.Position := Grid.FrozenCols;
  //从GRID中装入COLUMNS信息
  CLB.Clear;
  for i := 0 to Grid.Columns.Count - 1 do
  begin
    CLB.Items.AddObject(Grid.Columns.Items[i].Title.Caption,
      Grid.Columns.Items[i]);
    clb.Checked[i] := Grid.Columns.Items[i].Visible;
    //填充cmbFieldName的字段选项
    CmbFieldname.Items.Add(Grid.Columns.Items[i].FieldName);
  end;

end;

procedure TFrmColSelect.SaveData;
var
  i: integer;
begin //从界面中的设置保存到GRID中
  //保存全局GRID的参数
  Grid.FooterRowCount := IfThen(ChkCount.Checked, 1, 0);
  Grid.UseMultiTitle := ChkMultiTitle.Checked;
  Grid.FrozenCols := UpDownFix.Position;

  for i := 0 to CLB.Count - 1 do
  begin
    TColumnEh(CLB.Items.Objects[i]).Visible := CLB.Checked[i];
    TColumnEh(CLB.Items.Objects[i]).Index := i;
  end;
end;

procedure TFrmColSelect.SpeedButton6Click(Sender: TObject);
begin
  if Clb.ItemIndex >= 0 then
  begin
    clb.Items.Move(clb.ItemIndex, 0);
    CLB.Selected[0];
  end;
end;

procedure TFrmColSelect.SpeedButton7Click(Sender: TObject);
begin
  if Clb.ItemIndex >= 0 then
  begin
    clb.Items.Move(clb.ItemIndex, CLB.Count - 1);
    CLB.Selected[CLB.Count - 1];
  end;
end;

procedure TFrmColSelect.CLBClick(Sender: TObject);
var
  i: integer;
begin
  if CLB.ItemIndex >= 0 then
  begin
    i := clb.ItemIndex;

    case TColumnEh(CLB.Items.Objects[i]).Footer.ValueType of
      fvtNon: CbxSumType.ItemIndex := 0;
      fvtStaticText: CbxSumType.ItemIndex := 1;
      fvtFieldValue: CbxSumType.ItemIndex := 2;
      fvtAvg: CbxSumType.ItemIndex := 3;
      fvtCount: CbxSumType.ItemIndex := 4;
      fvtSum: CbxSumType.ItemIndex := 5;
    end;
    EditSumValue.Text:=TColumnEh(CLB.Items.Objects[i]).Footer.Value;

    EdtFieldName.Text := TColumnEh(CLB.Items.Objects[i]).FieldName;
    EdtFieldTitle.Text := TColumnEh(CLB.Items.Objects[i]).Title.Caption;
    TColumnEh(CLB.Items.Objects[i]).Visible := CLB.Checked[i];
    ChkVisiable.Checked := TColumnEh(CLB.Items.Objects[i]).Visible;
    ChkSort.Checked := TColumnEh(CLB.Items.Objects[i]).Title.TitleButton;
    ChkReadOnly.Checked := TColumnEh(CLB.Items.Objects[i]).ReadOnly;
    case TColumnEh(CLB.Items.Objects[i]).Footer.ValueType of
      fvtNon: CbxSumType.ItemIndex := 0;
      fvtStaticText: CbxSumType.ItemIndex := 1;
      fvtFieldValue: CbxSumType.ItemIndex := 2;
      fvtAvg: CbxSumType.ItemIndex := 3;
      fvtCount: CbxSumType.ItemIndex := 4;
      fvtSum: CbxSumType.ItemIndex := 5;
    else
      CbxSumType.ItemIndex := -1;
    end;
  end;
end;

procedure TFrmColSelect.CbxSumTypeChange(Sender: TObject);
var
  bField, bValue: Boolean; //用这两个变量来标识字段选择及文字框是否可用
begin
  case CbxSumType.ItemIndex of
    0:
      begin
        bField := False;
        bValue := False;
      end;
    1:
      begin
        bField := False;
        bValue := True;
      end;
    2:
      begin
        bField := True;
        bValue := False;
      end;
    3:
      begin
        bField := True;
        bValue := False;
      end;
    4:
      begin
        bField := True;
        bValue := False;
      end;
    5:
      begin
        bField := True;
        bValue := False;
      end;
  else
    begin
      bField := False;
      bValue := False;
    end;
  end;
  if bField then
    CmbFieldname.ItemIndex :=
      CmbFieldname.Items.IndexOf(TColumnEh(CLB.Items.Objects[CLB.ItemIndex]).FieldName);
  CmbFieldname.Enabled := bField;

  if bValue then
    EditSumValue.Text :=
      TColumnEh(CLB.Items.Objects[CLB.ItemIndex]).Footer.Value;
  EditSumValue.Enabled := bValue;

  SaveFieldValue;
end;

procedure TFrmColSelect.SaveFieldValue;
var
  i: integer;
  v: TFooterValueType;
begin
  //保存Field部分的设置
  i := CLB.ItemIndex;
  if i >= 0 then
  begin
    case CbxSumType.ItemIndex of
      0: v := fvtNon;
      1: v := fvtStaticText;
      2: v := fvtFieldValue;
      3: v := fvtAvg;
      4: v := fvtCount;
      5: v := fvtSum;
      -1: v := fvtNon;
    end;
    TColumnEh(CLB.Items.Objects[i]).Footer.ValueType := v;
    TColumnEh(CLB.Items.Objects[i]).Footer.FieldName := CmbFieldname.Text;
    TColumnEh(CLB.Items.Objects[i]).Footer.Value := EditSumValue.Text;
  end;
  TColumnEh(CLB.Items.Objects[i]).Visible := ChkVisiable.Checked;
  TColumnEh(CLB.Items.Objects[i]).ReadOnly := ChkReadOnly.Checked;
  TColumnEh(CLB.Items.Objects[i]).Title.TitleButton := ChkSort.Checked;
  TColumnEh(CLB.Items.Objects[i]).Title.Caption := EdtFieldTitle.Text;
end;

procedure TFrmColSelect.CmbFieldnameChange(Sender: TObject);
begin
  SaveFieldValue;
end;

procedure TFrmColSelect.EditSumValueChange(Sender: TObject);
begin
  SaveFieldValue;
end;

procedure TFrmColSelect.ChkReadOnlyClick(Sender: TObject);
begin
  SaveFieldValue;
  CLB.Checked[CLB.ItemIndex] := ChkVisiable.Checked;
end;

procedure TFrmColSelect.EdtFieldTitleChange(Sender: TObject);
begin
  SaveFieldValue;
end;

end.

⌨️ 快捷键说明

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