📄 colsetupform.pas
字号:
unit ColSetupForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, EditForm, KsHooks, KsForms, KsSkinForms, StdCtrls, Buttons,
dxExEdtr, dxTL, dxDBCtrl, dxDBGrid, dxCntner, KsControls, KsPanels,
KsSkinPanels, dxDBTLCl, dxGrClms, KsButtons, KsSkinButtons,
KsSpeedButtons, KsSkinSpeedButtons, DB, ADODB;
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 + -