📄 u_globalproc.pas
字号:
aColumn.CanEdit := False;
aColumn.Alignment := taCenter;
with CQuery do
try
ParamByName('p_tablename').AsString := UpperCase(TableName);
ParamByName('p_fieldname').AsString := UpperCase(aField.FieldName);
Prepare;
Open;
while not Eof do
begin
aColumn.PickList.AddObject(FieldByName('FieldValue').AsString,
Pointer(FieldByName('FieldCode').AsInteger));
Next;
end;
finally
Close;
end;
end;
end;
Next;
end;
finally
Close;
end;
end;
begin
OldDS := MGrid.DataSource;
MGrid.DataSource := nil;
try
aDataSet := OldDS.DataSet;
aDataSet.DisableControls;
// 字典表
DQuery := TQuery.Create(Application);
CQuery := TQuery.Create(Application);
// 字段
DQuery.DatabaseName := SysDBase;
CQuery.DatabaseName := SysDBase;
// 字段字典
DQuery.SQL.Text := 'SELECT * FROM dict2 WHERE TableName = ''' +
UpperCase(TableName) + ''' AND IsFixed = :p_IsFixed' +
' ORDER BY FieldNo';
CQuery.SQL.Text := 'SELECT * FROM dict3 WHERE TableName = :p_tablename ' +
'AND FieldName = :p_fieldname';
// 固定列
with DQuery do
begin
ParamByName('p_IsFixed').AsBoolean := True;
Prepare;
Open;
end;
MGrid.Columns.Clear;
MGrid.LimitedCol := FillGridColumns;
// 普通列
with DQuery do
begin
ParamByName('p_IsFixed').AsBoolean := False;
Prepare;
Open;
end;
FillGridColumns;
finally
DQuery.Close;
CQuery.Close;
DQuery.Free;
CQuery.Free;
MGrid.DataSource := OldDS;
while aDataSet.ControlsDisabled do
aDataset.EnableControls;
end;
end;
procedure RefreshDataSetField(aGrid:THDBGrid;
GetEvent: TFieldGetTextEvent; SetEvent: TFieldSetTextEvent);
var
i: integer;
aField: TField;
begin
for i := 0 to aGrid.Columns.Count - 1 do
begin
if aGrid.Columns[i].PickList.Count > 1 then
begin
aField := aGrid.DataSource.DataSet.FindField(
aGrid.Columns[i].FieldName);
if Assigned(aField) then
begin
aField.OnGetText := GetEvent;
aField.OnSetText := SetEvent;
end;
end;
end;
end;
// 设置 Grid 的栏目
procedure ReSetGridColumns(MGrid: THDBGrid; TableName: string;
GetEvent: TFieldGetTextEvent; SetEvent: TFieldSetTextEvent);
var
aColumn: THColumn;
aField: TField;
aDataSet: TDataSet;
//OldDS: TDataSource;
DQuery, CQuery: TQuery;
tmS: string;
InType: integer;
function FillGridColumns(MoveToFirst: Boolean): integer;
begin
Result := 0;
with DQuery do
try
while not Eof do
begin
aColumn := MGrid.FindFirstColumn(FieldbyName('FieldName').AsString);
if Assigned(aColumn) then
begin
aField := aColumn.Field;
if MoveToFirst then
aColumn.Index := Result;
Inc(Result);
with aColumn do
Title.Caption := Trim(FieldbyName('DisplayLabel').AsString);
tmS := FieldbyName('FieldType').AsString;
if tmS = 'D' then
(aField as TDateField).DisplayFormat := 'yyyy-mm-dd'
else if tmS = 'T' then
(aField as TDateField).DisplayFormat := 't'
else if (tmS = 'N') then
(aField as TNumericField).DisplayFormat := '#,##0.00'
else if (tmS = 'S') or (tmS = 'I') then
aField.Tag := 0;
// 对照字段
InType := FieldbyName('InputType').AsInteger;
if InType = 2 then
begin
aField.OnGetText := GetEvent;
aField.OnSetText := SetEvent;
aColumn.CanEdit := False;
aColumn.Alignment := taCenter;
with CQuery do
try
ParamByName('p_tablename').AsString := UpperCase(TableName);
ParamByName('p_fieldname').AsString := UpperCase(aField.FieldName);
Prepare;
Open;
while not Eof do
begin
aColumn.PickList.AddObject(FieldByName('FieldValue').AsString,
Pointer(FieldByName('FieldCode').AsInteger));
Next;
end;
finally
Close;
end;
end;
end;
Next;
end;
finally
Close;
end;
end;
begin
{OldDS := MGrid.DataSource;
MGrid.DataSource := nil;
aDataSet := OldDS.DataSet;}
aDataSet := MGrid.DataSource.DataSet;
aDataSet.DisableControls;
try
// 字典表
DQuery := TQuery.Create(Application);
CQuery := TQuery.Create(Application);
// 字段
DQuery.DatabaseName := SysDBase;
CQuery.DatabaseName := SysDBase;
// 字段字典
DQuery.SQL.Text := 'SELECT * FROM dict2 WHERE TableName = ''' +
UpperCase(TableName) + ''' AND IsFixed = :p_IsFixed' +
' ORDER BY FieldNo';
CQuery.SQL.Text := 'SELECT * FROM dict3 WHERE TableName = :p_tablename ' +
'AND FieldName = :p_fieldname';
// 固定列
with DQuery do
begin
ParamByName('p_IsFixed').AsBoolean := True;
Prepare;
Open;
end;
MGrid.LimitedCol := FillGridColumns(True);
// 普通列
with DQuery do
begin
ParamByName('p_IsFixed').AsBoolean := False;
Prepare;
Open;
end;
FillGridColumns(False);
finally
DQuery.Close;
CQuery.Close;
DQuery.Free;
CQuery.Free;
//MGrid.DataSource := OldDS;
while aDataSet.ControlsDisabled do
aDataset.EnableControls;
end;
end;
function GridDblClick(Sender: TObject): boolean;
var
aColumn: THColumn;
aGrid: THDBGrid;
aDataSet: TDataSet;
tmI: integer;
begin
Result := False;
aGrid := Sender as THDBGrid;
aDataSet := aGrid.DataSource.DataSet;
if aDataSet.IsEmpty then
Exit;
aColumn := aGrid.Columns[aGrid.Col - aGrid.IndicatorOffset];
if aColumn.PickList.Count > 0 then
begin
if not (aDataSet.State in [dsEdit, dsInsert]) then
aDataSet.Edit;
tmI := aDataSet.FieldByName(aColumn.FieldName).AsInteger;
tmI := aColumn.PickList.IndexOfObject(Pointer(tmI));
Inc(tmI);
if tmI >= aColumn.Picklist.Count then
tmI := 0;
aDataSet.FieldByName(aColumn.FieldName).AsInteger :=
Integer(aColumn.PickList.Objects[tmI]);
Result := True;
end;
end;
// Grid 键盘输入
function GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState): Boolean;
begin
Result := False;
if (Key = VK_SPACE) and (Shift = []) then
begin
if GridDblClick(Sender) then
begin
Key := 0;
Result := True;
end;
end;
end;
procedure DataSetSetText(aGrid: THDBGrid; aField: TField; const Text: string);
var
aList: TStrings;
i: integer;
begin
aList := nil;
for i := 0 to aGrid.Columns.Count - 1 do
begin
if aGrid.Columns[i].FieldName = aField.FieldName then
begin
aList := aGrid.Columns[i].PickList;
Break;
end;
end;
if Assigned(aList) then
begin
for i := 0 to aList.Count - 1 do
if aField.DataType in [ftSmallint, ftInteger, ftWord, ftBoolean] then
begin
if Text = aList.Strings[i] then
begin
aField.AsInteger := Integer(aList.Objects[i]);
break;
end;
end
else if aField.DataType = ftString then
begin
if Text = aList.Strings[i] then
begin
aField.AsString := IntFormatStr(Integer(aList.Objects[i]), aField.Size);
break;
end;
end;
end;
end;
procedure DataSetGetText(aGrid: THDBGrid; aField: TField; var Text: string; DisplayText: Boolean);
var
aList: TStrings;
i: integer;
begin
aList := nil;
for i := 0 to aGrid.Columns.Count - 1 do
begin
if aGrid.Columns[i].FieldName = aField.FieldName then
begin
aList := aGrid.Columns[i].PickList;
Break;
end;
end;
if Assigned(aList) then
begin
for i := 0 to aList.Count - 1 do
begin
if aField.DataType in [ftSmallint, ftInteger, ftWord, ftBoolean] then
begin
if aField.AsInteger = Integer(aList.Objects[i]) then
begin
Text := aList.Strings[i];
break;
end;
end
else if aField.DataType = ftString then
begin
if Trim(aField.AsString) = '' then
Continue;
if aField.AsInteger = Integer(aList.Objects[i]) then
begin
Text := aList.Strings[i];
break;
end;
end;
end;
end;
end;
procedure SetUserPower(UserCode: string);
procedure SetMenusPower(aMenu: TMenuItem; aQuery: TQuery);
var
i: integer;
tmS: string;
begin
tmS := aMenu.Name;
if aQuery.Locate('s_cddm', tmS, []) then
begin
if aQuery.FieldByName('b_zdqx').AsString = '1' then
aMenu.Enabled := True
else
aMenu.Enabled := False;
end;
for i := 0 to aMenu.Count - 1 do
SetMenusPower(aMenu.Items[i], aQuery);
end;
var
aQuery: TQuery;
i: integer;
begin
aQuery := TQuery.Create(Application);
with aQuery do
try
DatabaseName := SysDBase;
SQL.Text := 'SELECT s_cddm, b_zdqx FROM czryqx WHERE s_rydm = ''' + S_UserCode + '''';
Open;
for i := 0 to MainMenu.Items.Count - 1 do
SetMenusPower(MainMenu.Items[i], aQuery);
finally
Close;
Free;
end;
end;
procedure GetCurExamCode;
var
i: integer;
begin
with TIniFile.Create(S_SysPath + '\' + StudentIniFile) do
try
for i := 1 to SI_GradeCount do
I_CurExamCode[i] := ReadInteger('当前考试', GradeNames[i - 1] + '年级', 0);
finally
Free;
end;
with TQuery.Create(Application) do
begin
DataBaseName := DataDBase;
SQL.Text := 'SELECT * FROM kssz WHERE s_xqhao=''' + S_CurTermCode + '''';
Open;
for i := 1 to SI_GradeCount do
if Locate('i_kshao', I_CurExamCode[i], []) then
S_CurExamName[i] := FieldByName('s_kssming').AsString;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -