RTFormwork/public10/design/U_cxGridCustomSet.pas
2024-11-27 14:50:11 +08:00

506 lines
15 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit U_cxGridCustomSet;
interface
uses
Windows, SysUtils, Messages, Classes, Controls, StdCtrls, ComCtrls, Forms,
ExtCtrls, ComObj, DXCORE, ActiveX, cxMemo, cxButtons, Graphics, IniFiles,
Variants, DBClient,
Dialogs, Menus, DB, ADODB, cxLabel, BtnEdit, RTComboBox, cxTextEdit,
cxMRUEdit,
cxDBData, cxGridLevel, cxButtonEdit, cxCurrencyEdit, cxGridTableView, cxGrid,
cxGridCustomTableView, cxGraphics, cxCalendar, cxCheckBox, cxGridDBTableView,
cxGridDBBandedTableView, cxStyles, cxPc, cxGroupBox, U_cxGridCustomCss,
dxLayoutContainer,
cxCustomData, cxClasses, cxTimeEdit, cxEdit, cxLookAndFeels, dxLayoutControl,
cxLookAndFeelPainters, cxGridCustomView, Buttons, cxDropDownEdit;
// procedure createFindLayout(dxLayoutControl1: TdxLayoutControl; ADOTmp: TADOQuery; mdesignCode: string);
procedure CreateCxGridColumn(application: TApplication; tv1: TcxGridDBTableView;
ADOQueryTmp: TADOQuery; mdesignCode: string);
// stdcall;external 'rtCommon.dll' Name 'CreateCxGridColumn_A';
procedure CreateCxGridColumn_A(application: TApplication;
tv1: TcxGridDBTableView; ADOQueryTmp: TADOQuery; mdesignCode: string);
stdcall; external 'rtCommon.dll';
procedure ShowCxGridDesign(application: TApplication;
mCxGridView: TcxGridDBTableView; client1: TClientDataSet; ADOCmd: TADOQuery;
mFormName: PWideChar; mGridName: PWideChar; mDllName: PWideChar;
mFormId: integer; mGridType: integer = 0;mProcedureName: PWideChar=nil); stdcall;
external 'rtCommon.dll' Name 'ShowCxGridDesign_A';
function SaveGridSetInfoToBase(mCxGridView: TcxGridDBTableView;
ADOCmd: TADOQuery; designCode: PWideChar): Boolean; stdcall;
external 'rtCommon.dll' Name 'SaveGridSetInfoToBase_A';
//
function checkColumnMustIn(app: TApplication; tv1: TcxGridDBTableView;
mFlag: integer): Boolean;
// stdcall;external 'rtCommon.dll' Name 'checkColumnMustIn_A';
function checkColumnMustIn_A(app: TApplication; tv1: TcxGridDBTableView;
client1: TClientDataSet; mFlag: integer): Boolean; stdcall;
external 'rtCommon.dll';
procedure getColumnRelation(tv1: TcxGridDBTableView; client1: TClientDataSet);
implementation
// uses
// U_globalVar, U_DataLink;
/// ////////////////////////////////////////////////////////////////
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
// 0: mGridType <20><>ѯ; 1:<3A><><EFBFBD><EFBFBD>
/// /////////////////////////////////////////////////////////////////
// procedure ShowCxGridDesign(mCxGridView: TcxGridDBTableView; ADOCmd: TADOQuery;
// mFormName: string; mGridName: string; mDllName: string; mFormId: integer;
// mGridType: integer = 0);
// type
// TMyFunc = function(App: Tapplication; FormH: hwnd; FormID: integer;
// UID: String; UName: String; dataBase: string; Title: string; Def1: string;
// Def2: string): hwnd; stdcall;
// var
// Tf: TMyFunc;
// Tp: TFarProc;
// Th: Thandle;
// newh: hwnd;
// mdesignCode: string;
// begin
//
// /// ////////////////////////////////////
// // Ȩ<>޿<EFBFBD><DEBF><EFBFBD>
// with ADOCmd do
// begin
// close;
// sql.Clear;
// filtered := false;
// sql.Add('select count(*) as cnt');
// sql.Add('from sy_user A');
// sql.Add('where userid=' + quotedStr(gUserId));
// sql.Add('and valid=''Y''');
// sql.Add('and candesign=1');
// open;
// if fieldByName('cnt').AsInteger <= 0 then
// begin
// close;
// // exit;
// end;
// close;
//
// mdesignCode := mDllName +mFormName+ '|' + intTostr(mFormId) + '|' + mGridName;
//
// /// ////////////////////////////////////////
// // <20><><EFBFBD>浱ǰ<E6B5B1>ؼ<EFBFBD><D8BC><EFBFBD>Ϣ
// if not SaveGridSetInfoToBase(mCxGridView, ADOCmd, mdesignCode) then
// begin
// exit;
// end;
// end;
//
// /// ////////////////////////////////////////
// //
// Th := LoadLibrary('rtDesign.dll');
// if Th > 0 then
// begin
// try
// Tp := GetProcAddress(Th, 'GetDllForm');
// if Tp <> nil then
// begin
// Tf := TMyFunc(Tp);
// newh := Tf(Application, 0, 2, PChar(gUserId), PChar(gUserName),
// PChar(DConString), PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'), PChar(mdesignCode), PChar(''));
// end
// else
// begin
// ShowMessage('<27><><EFBFBD><EFBFBD>rtDesign.dllʱ<6C><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!');
// end;
// finally
// // FreeLibrary();
// end;
// end
// else
// begin
// ShowMessage('<27>Ҳ<EFBFBD><D2B2><EFBFBD>rtDesign.dll');
// end;
// // CreateCxGridColumn(mCxGridView,ADOCmd,mwinCode,mFormName,mGridName);
//
// CreateCxGridColumn(mCxGridView, ADOCmd, mdesignCode);
//
// end;
/// ////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
/// ///////////////////////////////////////////////////////////////////////
// function SaveGridSetInfoToBase(mCxGridView: TcxGridDBTableView;
// ADOCmd: TADOQuery; designCode: string): Boolean;
// var
// i: integer;
// mfieldName: string;
// begin
// result := false;
//
// try
// with ADOCmd do
// begin
// close;
// sql.Clear;
// sql.Add('select * from SD_FormGrid_Design');
// sql.Add('where designCode=' + quotedStr(designCode));
// open;
//
// for i := mCxGridView.ColumnCount - 1 downto 0 do
// begin
// mfieldName := TcxGridDBColumn(mCxGridView.Columns[i])
// .DataBinding.FieldName;
//
// if locate('fieldName', mfieldName, []) then
// begin
// // Edit ;
// continue;
// end
// else
// begin
//
// Append;
// fieldByName('designCode').value := designCode;
//
// fieldByName('ColumnName').value := mCxGridView.Columns[i].Name;
// fieldByName('oldCaption').value := mCxGridView.Columns[i].Caption;
// fieldByName('ColumnLock').value := 0;
// fieldByName('ColumnHide').value := mCxGridView.Columns[i].Hidden;
// fieldByName('ColumnOrder').value := mCxGridView.Columns[i].SortOrder;
// fieldByName('Visible').value := mCxGridView.Columns[i].Visible;
//
// fieldByName('Valid').value := 1;
// end;
//
// fieldByName('FieldName').value :=
// trim(TcxGridDBColumn(mCxGridView.Columns[i]).DataBinding.FieldName);
// fieldByName('Caption').value := mCxGridView.Columns[i].Caption;
// fieldByName('ColumnType').value :=
// trim(TcxGridDBColumn(mCxGridView.Columns[i]).DataBinding.ValueType);
//
// if mCxGridView.Columns[i].FixedKind = fkLeftDynamic then
// begin
// fieldByName('fixColumn').value := True;
// end
// else
// begin
// fieldByName('fixColumn').value := false;
// end;
//
// fieldByName('Width').value := mCxGridView.Columns[i].Width;
//
// if mCxGridView.Columns[i].Tag=9 then
// begin
// fieldByName('mustIn').value := true;
// end
// else
// begin
// fieldByName('mustIn').value := false;
// end;
// fieldByName('IsOrder').value := 1;
//
// Post;
// end;
//
// end;
//
// /// /////////////////////////////////////////////
// //
// for i := 0 to mCxGridView.DataController.DataSet.FieldCount - 1 do
// begin
// mfieldName := trim(mCxGridView.DataController.DataSet.Fields[i]
// .FieldName);
// if mfieldName = '' then
// continue;
// with ADOCmd do
// begin
// close;
// sql.Clear;
// sql.Add('select * from SD_FormGrid_Design');
// sql.Add('where designcode=' + quotedStr(designCode));
// sql.Add('and fieldName=' + quotedStr(mfieldName));
// open;
// if RecordCount <= 0 then
// begin
// Append;
// fieldByName('designcode').value := designCode;
// fieldByName('fieldName').value := mfieldName;
// fieldByName('Caption').value := 'δ<><CEB4><EFBFBD><EFBFBD>';
// fieldByName('ColumnName').value := mCxGridView.Name + mfieldName;
// fieldByName('Visible').value := false;
// fieldByName('AddFlag').value := True;
// fieldByName('Width').value := 60;
// fieldByName('ColumnOrder').value := 99;
//
// fieldByName('Valid').value := 0;
// Post;
//
// end;
// end;
// end;
// result := True;
// except
// Application.MessageBox('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʱ<CFA2><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<27><>ʾ<EFBFBD><CABE>Ϣ', 0);
// end;
// end;
//
/// ////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>CxGrid<69><64>
/// ////////////////////////////////////////////////////////
procedure CreateCxGridColumn(application: TApplication; tv1: TcxGridDBTableView;
ADOQueryTmp: TADOQuery; mdesignCode: string);
var
ADBColumn: TcxGridDBColumn;
strField, strCaption: string;
mColumnName: string;
mCalcWidth: integer;
mWidth: integer;
mAvgWidth, mGridWidth: integer;
HeaderStyle: TcxStyle;
footsumitem:tcxdatasummaryitem;
begin mWidth := 12;
mGridWidth := TcxGrid(TcxGridLevel(tv1.level).Control).Width;
with ADOQueryTmp do begin close;
sql.Clear;
sql.Add('select A.* ');
sql.Add('from SD_FormGrid_Design A');
sql.Add('where A.designCode=' + quotedStr(mdesignCode));
open;
if IsEmpty then exit;
end;
try
HeaderStyle := TcxStyle.Create(nil);
HeaderStyle.Font := TcxGrid(TcxGridLevel(tv1.level).Control).Font;
HeaderStyle.TextColor := clBlue;
tv1.BeginUpdate;
// CreateCxGridColumn_A(application,tv1,ADOQueryTmp,mdesignCode);
with ADOQueryTmp do
begin
First;
while not Eof do
begin
if trim(fieldByName('fieldName').AsString)='' then
begin
Next;
continue;
end;
ADBColumn := tv1.GetColumnByFieldName
(trim(ADOQueryTmp.fieldByName('fieldName').AsString));
if ADBColumn <> nil then begin
// <20><><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>ʾ
if not fieldByName('valid').AsBoolean then
begin
ADBColumn.Visible := false;
ADBColumn.Hidden := True;
Next;
continue;
end;
ADBColumn.Name := trim(tv1.Name) +
trim(ADOQueryTmp.fieldByName('fieldName').AsString);
if fieldByName('fixColumn').AsBoolean then
begin
ADBColumn.FixedKind := fkLeftDynamic;
end
else begin ADBColumn.FixedKind := fkNone;
end;
if fieldByName('mustIn').AsBoolean then
begin
ADBColumn.Tag := 9;
end;
if ADBColumn.Tag = 9 then
ADBColumn.Styles.Header := HeaderStyle;
ADBColumn.Hidden := fieldByName('ColumnHide').AsBoolean;
if ADBColumn.Hidden then begin ADBColumn.Visible := false;
end
else begin ADBColumn.Visible := fieldByName('Visible').AsBoolean;
end;
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///
if (trim(ADOQueryTmp.fieldByName('FooterType').AsString)<>'') and (ADBColumn.Summary.FooterKind=skNone) then
begin
footsumitem:=tv1.DataController.Summary.FooterSummaryItems.Add;
footsumitem.ItemLink:= ADBColumn ;
if (trim(fieldByName('FooterType').AsString)='sum') or (trim(fieldByName('FooterType').AsString)='<27>ϼ<EFBFBD>') then
begin
footsumitem.Kind:=skSum;
end;
if (trim(fieldByName('FooterType').AsString)='count')or (trim(fieldByName('FooterType').AsString)='С<><D0A1>') then
begin
footsumitem.Kind:=skCount;
end;
// footsumitem.Format:='#';
footsumitem.Position:=spFooter;
end
else
begin
// ADBColumn.Summary.FooterKind:=skNone ;
end;
ADBColumn.Caption := trim(fieldByName('caption').AsString);
Next;
continue;
end;
//
if not fieldByName('valid').AsBoolean then
begin
ADOQueryTmp.Next;
continue;
end;
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ѵ<EFBFBD><D1B4><EFBFBD>
mColumnName := trim(tv1.Name) + trim(fieldByName('fieldName').AsString);
if tv1.FindItemByName(mColumnName) <> nil then
begin
ADOQueryTmp.Next;
continue;
end;
// <20>µ<EFBFBD><C2B5><EFBFBD>
ADBColumn := tv1.CreateColumn;
ADBColumn.DataBinding.FieldName :=
trim(fieldByName('fieldName').AsString);
ADBColumn.Caption := trim(fieldByName('Caption').AsString);
// <20><><EFBFBD><EFBFBD>
ADBColumn.Width := fieldByName('width').AsInteger;
if fieldByName('fixColumn').AsBoolean then
begin
ADBColumn.FixedKind := fkLeftDynamic;
end;
//
if fieldByName('mustIn').AsBoolean then
begin
ADBColumn.Tag := 9;
end;
ADBColumn.Visible := fieldByName('visible').AsBoolean;
// ADBColumn.Hidden := fieldByName('ColumnHide').AsBoolean;
ADBColumn.HeaderAlignmentHorz := taCenter;
// ADBColumn.MinWidth := 50;
ADBColumn.Name := mColumnName;
ADBColumn.Options.Editing := not fieldByName('ReadOnly').AsBoolean;
ADBColumn.Options.Focusing := not fieldByName('ReadOnly').AsBoolean;
/// /////////////
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///
if (trim(ADOQueryTmp.fieldByName('FooterType').AsString)<>'') then
begin
footsumitem:=tv1.DataController.Summary.FooterSummaryItems.Add;
footsumitem.ItemLink:= ADBColumn ;
if (trim(fieldByName('FooterType').AsString)='sum') or (trim(fieldByName('FooterType').AsString)='<27>ϼ<EFBFBD>') then
begin
footsumitem.Kind:=skSum;
end;
if (trim(fieldByName('FooterType').AsString)='count') or (trim(fieldByName('FooterType').AsString)='С<><D0A1>') then
begin
footsumitem.Kind:=skCount;
end;
// footsumitem.Format:='#';
footsumitem.Position:=spFooter;
end;
ADOQueryTmp.Next;
end;
close;
end;
finally
tv1.EndUpdate;
end;
end;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯloyout
// procedure createFindLayout(dxLayoutControl1: TdxLayoutControl;
// ADOTmp: TADOQuery; mdesignCode: string);
// var
// LayoutItem: TdxLayoutItem;
// cxTextEdit: TcxTextEdit;
// i: integer;
// begin
// with ADOTmp do
// begin
// close;
// sql.Clear;
// sql.Add('select A.* ');
// sql.Add('from SD_FormGrid_Design A');
// sql.Add('where A.designCode=' + quotedStr(mdesignCode));
// sql.Add('and (A.columnQuery=1 or A.ColumnFilter=1)');
// sql.Add('and A.valid=1');
// open;
//
// while not Eof do
// begin
// cxTextEdit := TcxTextEdit.Create(nil);
// cxTextEdit.Name := trim(fieldByName('fieldName').AsString);
// cxTextEdit.Text := '';
// cxTextEdit.Tag := 2;
//
// if (dxLayoutControl1.FindComponent('layitem' +
// trim(fieldByName('fieldName').AsString)) = nil) and
// (dxLayoutControl1.FindItem(cxTextEdit) = nil) then
// begin
// LayoutItem := dxLayoutControl1.CreateItemForControl(cxTextEdit, nil);
// LayoutItem.Name := 'layitem' + trim(fieldByName('fieldName').AsString);
// LayoutItem.CaptionOptions.Text := trim(fieldByName('caption').AsString);
// LayoutItem.Control := cxTextEdit;
//
// LayoutItem.SizeOptions.SizableHorz := True;
// LayoutItem.SizeOptions.SizableVert := True;
// end;
// Next;
// end;
//
// end;
// end;
//
function checkColumnMustIn(app: TApplication; tv1: TcxGridDBTableView;
mFlag: integer): Boolean;
var
i: integer;
client1: TClientDataSet;
begin client1 := TClientDataSet.Create(nil);
try
client1.FieldDefs.Add('fieldName', ftString, 100);
client1.FieldDefs.Add('caption', ftString, 100);
client1.FieldDefs.Add('ValueType', ftString, 100);
client1.FieldDefs.Add('fieldValue', ftString, 100);
client1.CreateDataSet;
getColumnRelation(tv1, client1);
Result := checkColumnMustIn_A(app, tv1, client1, mFlag);
finally
client1.Free;
end;
end;
/// //////////////////////////////////////////////////////////////
///
procedure getColumnRelation(tv1: TcxGridDBTableView; client1: TClientDataSet);
var
i: integer;
begin
client1.EmptyDataSet;
for i := 0 to tv1.ColumnCount - 1 do begin client1.Append;
client1.fieldByName('fieldName').Value := tv1.Columns[i]
.DataBinding.FieldName;
client1.fieldByName('caption').Value := tv1.Columns[i].Caption;
client1.fieldByName('ValueType').Value := tv1.Columns[i]
.DataBinding.ValueType;
end;
end;
end.