?? formcolselect.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
PColParams = ^TColParams;
TColParams = record //如有需求可以在這里增加字段以實現更多功能
FieldName: string; //字段名
Title: string; //顯示標題
Index: integer; //位置
Visible: Boolean; //是否可見
ReadOnly: Boolean; //只讀否
Sort: Boolean; //是否可排序,設置TitleButton
SumListType: TFooterValueType; //合計的類型
SumListField: string; //合計字段值
SumListValue: string; //合計文字值
P: TColumnEh; //此處放的是TColumnEh的指針
end;
TP = ^TColParams;
type
TFrmColSelect = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
CLB: TCheckListBox;
Panel3: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ChkSumList: 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;
ChkReadOnly: TCheckBox;
Label2: TLabel;
CbxSumType: TComboBox;
EditSumField: TComboBox;
EditSumValue: TLabeledEdit;
Label3: TLabel;
BitBtn3: TBitBtn;
chkAutoColWidth: TCheckBox;
ColorBox1: TColorBox;
ColorBox2: TColorBox;
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 OnSaveFieldValue(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure CbxSumTypeChange(Sender: TObject);
private
ColArray: array of TColParams;
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的數據到界面
//第一步,取全局參數
ChkSumList.Checked := Grid.FooterRowCount > 0;
ChkMultiTitle.Checked := Grid.UseMultiTitle;
EdtFix.Text := inttostr(Grid.FrozenCols);
UpDownFix.Max := Grid.Columns.Count - 1;
UpDownFix.Position := Grid.FrozenCols;
ColorBox1.Selected := Grid.OddRowColor;
ColorBox2.Selected := Grid.EvenRowColor;
chkAutoColWidth.Checked := Grid.AutoFitColWidths;
//從GRID中裝入COLUMNS信息
CLB.Clear;
SetLength(ColArray, Grid.Columns.Count);
for i := 0 to Grid.Columns.Count - 1 do
begin
ColArray[i].FieldName := Grid.Columns.Items[i].FieldName;
ColArray[i].Index := Grid.Columns.Items[i].Index;
ColArray[i].Visible := Grid.Columns.Items[i].Visible;
ColArray[i].ReadOnly := Grid.Columns.Items[i].ReadOnly;
ColArray[i].Sort := Grid.Columns.Items[i].Title.TitleButton;
ColArray[i].Title := Grid.Columns.Items[i].Title.Caption;
ColArray[i].SumListType := Grid.Columns.Items[i].Footer.ValueType;
ColArray[i].SumListField := Grid.Columns.Items[i].Footer.FieldName;
ColArray[i].SumListValue := Grid.Columns.Items[i].Footer.Value;
ColArray[i].p := Grid.Columns.Items[i];
CLB.Items.AddObject(ColArray[i].Title, @(ColArray[i]));
clb.Checked[i] := ColArray[i].Visible;
//填充cmbFieldName的字段選項
EditSumField.Items.Add(Grid.Columns.Items[i].FieldName);
end;
if CLB.Items.Count > 0 then
begin
CLB.ItemIndex := 0;
clb.Selected[0] := True;
CLBClick(nil);
end;
end;
procedure TFrmColSelect.SaveData;
var
i: integer;
p: pColParams;
c: TColumnEh;
begin //從界面中的設置保存到GRID中
//保存全局GRID的參數
Grid.FooterRowCount := IfThen(ChkSumList.Checked, 1, 0);
Grid.SumList.Active := ChkSumList.Checked;
Grid.UseMultiTitle := ChkMultiTitle.Checked;
Grid.FrozenCols := UpDownFix.Position;
Grid.OddRowColor := ColorBox1.Selected;
Grid.EvenRowColor := ColorBox2.Selected;
Grid.AutoFitColWidths := chkAutoColWidth.Checked;
for i := 0 to CLB.Count - 1 do
begin
p := PColParams(CLB.Items.Objects[i]);
c := p^.P;
if Assigned(c) then
begin
c.Visible := CLB.Checked[i];
C.Index := i;
C.ReadOnly := p^.ReadOnly;
C.Title.Caption := p^.Title;
C.Title.TitleButton := p^.Sort;
C.Footer.ValueType := p^.SumListType;
C.Footer.FieldName := p^.SumListField;
C.Footer.Value := p^.SumListValue;
end;
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;
p: PColParams;
c: TColParams;
begin
if CLB.ItemIndex >= 0 then
begin
i := clb.ItemIndex;
P := PColParams(CLB.Items.Objects[i]);
case P^.SumListType 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;
EditSumValue.Text := p.SumListValue;
EditSumField.ItemIndex := EditSumField.Items.IndexOf(P^.SumListField);
EdtFieldName.Text := P^.FieldName;
EdtFieldTitle.Text := P^.Title;
ChkSort.Checked := P^.Sort;
ChkReadOnly.Checked := P^.ReadOnly;
//CLB.Checked[i] := p^.Visible;
end;
end;
procedure TFrmColSelect.OnSaveFieldValue(Sender: TObject);
begin
SaveFieldValue;
end;
procedure TFrmColSelect.SaveFieldValue;
var
i: integer;
v: TFooterValueType;
p: PColParams;
begin
//保存Field部分的設置
i := CLB.ItemIndex;
if i >= 0 then
begin
p := pColparams(CLB.Items.Objects[i]);
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;
p^.SumListType := v;
p^.SumListField := EditSumField.Text;
p^.SumListValue := EditSumValue.Text;
p^.ReadOnly := ChkReadOnly.Checked;
p^.Sort := ChkSort.Checked;
p^.Title := EdtFieldTitle.Text;
p^.Visible := CLB.Checked[i];
end;
end;
procedure TFrmColSelect.BitBtn3Click(Sender: TObject);
begin
LoadData;
end;
procedure TFrmColSelect.CbxSumTypeChange(Sender: TObject);
var
bField, bValue: Boolean; //用這兩個變量來標識字段選擇及文字框是否可用
p: PColParams;
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;
p := pColParams(CLB.Items.Objects[CLB.ItemIndex]);
if bField then
EditSumField.ItemIndex := EditSumField.Items.IndexOf(p^.FieldName);
EditSumField.Enabled := bField;
if bValue then
EditSumValue.Text :=
p^.SumListValue;
EditSumValue.Enabled := bValue;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -