📄 customunit.pas
字号:
unit CustomUnit;
interface
Uses
Windows, SysUtils, Classes, Forms, XMLIntf, ADODB, Controls, bsSkinBoxCtrls,
bsSkinData, uDrag, StdCtrls, Messages, DB, bsdbctrls, bsDBGrids, XMLDoc, xmldom,
Dialogs;
Type
TAppIO = class
private
public
constructor Create;
destructor Destroy; override;
Function LoadSetup(XMLPath : String;pNode : IXMLNode):Boolean;virtual;
Function SaveSetup(XMLPath : String;pNode : IXMLNode):Boolean;virtual;
End;
//-------------- 声明一个自定义类 ------------------------------------------//
TCustomClass = class
private
FComponentField : TStrings; //显示控件的绑定数据字段
FMathConstr : TStrings; //公式另列表
FComponentName : TList; //保存所有动态控件的列表
FComponentCount : Integer; //控件的个数
FCustomDrag : Boolean; //设置是否可以在运行期托动
FParentControl : TWinControl; //控件的父类
FTemControl : TWinControl;
bsSkinEdit: TbsSkinDBEdit;
bsSkinDBComboBox: TbsSkinDBComboBox;
bsSkinDBMemo: TbsSkinDBMemo;
dsLabel : TLabel;
FSkinData : TbsSkinData;
CustomDragClass : TDragClass; //声明可托动类
FSelectControl : TControl; //得到当前选择得控件
FSelectControlIndex : Integer; //得到当前选择得控件得索引
FDataSet : TADODataSet; //使用的数据集,其实只要ADOConnection1
FConMouseup :TMouseEvent; //未使用
FOnClick :TNotifyEvent;
FOnChange :TNotifyEvent;
XMLDoc1: TXMLDocument;
FCurrentNode, FParentNode : IXMLNode;
FCurrentColumns : TbsColumn;
FMathStr : String;
//procedure OnClick(Sender : TObject);
protected
procedure CreateLabel(Name, Title:String;Parent:TWinControl;
Top,Left,Width,Height:Integer;bsSkinData: TbsSkinData);
procedure CreateBSEdit(Name, Title, FieldName:String;Parent:TWinControl;
Top,Left,Width,Height:Integer;bsSkinData: TbsSkinData);
procedure CreateComboBox(Name, Title, FieldName:String;Parent:TWinControl;
Top,Left,Width,Height:Integer;bsSkinData: TbsSkinData);
procedure CreateMemo(Name, Title, FieldName:String;Parent:TWinControl;
Top,Left,Width,Height:Integer;bsSkinData: TbsSkinData);
procedure SetCustomDrag(CanDrag : Boolean); //开启控件的拖动
Function GetSelectControl : TControl;
Function ExeStrMath(str: String):String;
Function ReadMathStr():String;
procedure WriteFMathStr(str: String);
public
constructor Create(AOwner : TComponent);
destructor Destroy; override;
//动态创建控件的主函数
Function CreateComponentDynamic(DS_Component : TADODataSet;Parent : TWinControl;
bsSkinData: TbsSkinData):Boolean;
Function AddComponentDynamic(CoType:Integer;DesignParent:TWincontrol;ExecuteParent:String;DS_Component: TADODataSet;bsSkinData: TbsSkinData):Boolean;
procedure DeleteSelectComponent;
Function ShowFieldDataByDS(DS_table : TADODataSet;ExecuteParent:String):Boolean;
Function ShowDataByXML(CurrentNode : IXMLNode;ExecuteParent:String):Boolean;
Function EditFieldDataByDS(DS_table : TADODataSet;Action : Integer;ParentCon:TWincontrol):Boolean;
Function EditFieldDataByXML(CurrentNode : IXMLNode;ExecuteParent:String):Boolean;
property ComponentCount : Integer read FComponentCount;
property CustomDrag : Boolean read FCustomDrag write SetCustomDrag default False;
property SelectControl : TControl read GetSelectControl;
//property SelectControlIndex : Integer read FSelectControlIndex;
procedure SetPointVisible(Visibled:Boolean);
Function PadingStr(str: String; Len: Integer): String; //--- 补零函数, len为补零位数
Function SaveComponent():Boolean;
procedure SetComponentField(FieldName:String;CNFieldName : String = '');
//因为Combobox, Memo, Edit都有Text属性,暂时用一种"TbsSkinDBEdit"
Function GetComponentByField(FieldName : String): TbsSkinDBEdit;
Function GetComponentByName(ComponenName : String): TbsSkinDBEdit;
procedure CleanComponentText;
procedure ComponentReLoad;
property OnClick : TNotifyEvent read FOnClick write FOnClick;
property OnChange : TNotifyEvent read FOnChange write FOnChange;
Function SplitString(Mark, Str:String):TStrings;
property ComponentList : TList read FComponentName;
procedure SetDbGridView(TableName:String;DBGrid : TbsSkinDBGrid);
procedure LoadDbGridView(TableName:String;DBGrid : TbsSkinDBGrid);
procedure SaveDbGridView(TableName: String;DBGrid : TbsSkinDBGrid);
procedure ComponentChange(Sender: TObject);
property MathStr : String read ReadMathStr write WriteFMathStr;
End;
Const
Label_Control : integer = 1;
BSEdit_Control : integer = 2;
Memo_Control : integer = 3;
Var
AJ : String;
implementation
Uses DataMoudle;
{ TAppIO }
//------------------------------------------------- Writen By : AJ -----------//
constructor TAppIO.Create;
begin
end;
//------------------------------------------------- Writen By : AJ -----------//
destructor TAppIO.Destroy;
begin
inherited;
end;
//------------------------------------------------- Writen By : AJ -----------//
function TAppIO.LoadSetup(XMLPath: String; pNode: IXMLNode): Boolean;
begin
{$Message hint 'LoadSetup'}
end;
//------------------------------------------------- Writen By : AJ -----------//
function TAppIO.SaveSetup(XMLPath: String; pNode: IXMLNode): Boolean;
begin
end;
{ TCustomClass }
//------------------------------------------------- Writen By : AJ -----------//
constructor TCustomClass.Create(AOwner : TComponent);
begin
FComponentField:= TStringList.Create;
FMathConstr := TStringList.Create;
FComponentName:= TList.Create;
FDataSet := TADODataSet.Create(Nil);
//FOnClick:= OnClick;
FOnChange:= ComponentChange;
FComponentCount:= 0;
XMLDoc1:= TXMLDocument.Create(AOwner);
end;
//------------------------------------------------- Writen By : AJ -----------//
destructor TCustomClass.Destroy;
begin
FComponentField.Free;
FMathConstr.Free;
FComponentName.Free;
FDataSet.Free;
XMLDoc1.Free;
inherited;
end;
//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.CreateLabel(Name, Title: String;
Parent: TWinControl; Top, Left, Width, Height: Integer;
bsSkinData: TbsSkinData);
Var
DLabel : TLabel;
begin
DLabel:= TLabel.Create(Parent);
DLabel.Parent:= Parent;
DLabel.Top:= Parent.Top + Top;
DLabel.Left:= Parent.Left + Left;
DLabel.Width:= Width;
DLabel.Height:= Height;
//bsSkinEdit.SkinData:= bsSkinData;
DLabel.Name:= Name;
DLabel.Tag:= 1;
DLabel.Caption:= Title;
DLabel.AutoSize:= False;
DLabel.Transparent:= True;
DLabel.Font.Name:= 'Arial';
DLabel.Font.Height:= 14;
DLabel.OnClick:= FOnClick;
FComponentName.Add(DLabel);
end;
//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.CreateBSEdit(Name, Title, FieldName: String;Parent: TWinControl;
Top, Left, Width, Height: Integer;bsSkinData: TbsSkinData);
Var
bsEdit : TbsSkinDBEdit;
begin
bsEdit:= TbsSkinDBEdit.Create(Parent);
bsEdit.Parent:= Parent;
bsEdit.Top:= Parent.Top + Top;
bsEdit.Left:= Parent.Left + Left;
bsEdit.Width:= Width;
bsEdit.Height:= Height;
bsEdit.TabOrder:= Top;
bsEdit.SkinData:= bsSkinData;
bsEdit.Name:= Name;
bsEdit.Text:= Title;
bsEdit.DataField:= FieldName;
bsEdit.Tag:= 2;
bsEdit.OnClick:= FOnClick;
bsEdit.OnChange:= FOnChange;
FComponentName.Add(bsEdit);
end;
//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.CreateComboBox(Name, Title, FieldName: String;
Parent: TWinControl; Top, Left, Width, Height: Integer;
bsSkinData: TbsSkinData);
Var
bsDBComboBox : TbsSkinDBComboBox;
begin
bsDBComboBox:= TbsSkinDBComboBox.Create(Parent);
bsDBComboBox.Parent:= Parent;
bsDBComboBox.Top:= Parent.Top + Top;
bsDBComboBox.Left:= Parent.Left + Left;
bsDBComboBox.Width:= Width;
bsDBComboBox.Height:= Height;
bsDBComboBox.TabOrder:= Top;
bsDBComboBox.SkinData:= bsSkinData;
bsDBComboBox.Name:= Name;
bsDBComboBox.Tag:= 3;
bsDBComboBox.Text:= FieldName;
bsDBComboBox.Items.Assign(SplitString(',', Title));
bsDBComboBox.DataField:= FieldName;
bsDBComboBox.Style:= bscbEditStyle;
bsDBComboBox.OnClick:= FOnClick;
bsDBComboBox.OnChange:= FOnChange;
FComponentName.Add(bsDBComboBox);
end;
//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.CreateMemo(Name, Title, FieldName: String;
Parent: TWinControl; Top, Left, Width, Height: Integer;
bsSkinData: TbsSkinData);
Var
bsSkinDBMemo: TbsSkinDBMemo;
begin
bsSkinDBMemo:= TbsSkinDBMemo.Create(Parent);
bsSkinDBMemo.Parent:= Parent;
bsSkinDBMemo.Top:= Parent.Top + Top;
bsSkinDBMemo.Left:= Parent.Left + Left;
bsSkinDBMemo.Width:= Width;
bsSkinDBMemo.Height:= Height;
bsSkinDBMemo.TabOrder:= Top;
bsSkinDBMemo.SkinData:= bsSkinData;
bsSkinDBMemo.Name:= Name;
bsSkinDBMemo.Tag:= 4;
bsSkinDBMemo.Text:= FieldName;
bsSkinDBMemo.Lines.Assign(SplitString(',', Title));
bsSkinDBMemo.DataField:= FieldName;
bsSkinDBMemo.OnClick:= FOnClick;
bsSkinDBMemo.OnChange:= FOnChange;
FComponentName.Add(bsSkinDBMemo);
end;
//------------------------------------------------- Writen By : AJ -----------//
//------------------ Main Function here --------------------------------------//
function TCustomClass.CreateComponentDynamic(DS_Component: TADODataSet;
Parent : TWinControl;bsSkinData: TbsSkinData): Boolean;
Var
Top, Left, Width, Height, iType : Integer;
coName, FieldName, Titles, sMath : String;
Sql : String;
begin
FDataSet.Connection:= DS_Component.Connection;
Sql:= 'Select * From Component_tbl Where ExecuteParent = '''+Parent.Name+'''';
Sql:= Sql+' Or DesignParent = '''+Parent.Name+''' order by Ptop';
With FDataSet do begin
Active:= False;
CommandText:= Sql;
Active:= True;
While not Eof do begin
iType := FieldByName('Type').AsInteger;
Top := FieldByName('PTop').AsInteger;
Left := FieldByName('PLeft').AsInteger;
Width := FieldByName('PWidth').AsInteger;
Height:= FieldByName('PHeight').AsInteger;
coName:= FieldByName('ComponentName').AsString;
FieldName:= FieldByName('Fields').AsString;
Titles:= FieldByName('Title').AsString;
sMath:= FieldByName('Math').AsString;
//--------------------------------------------------//
Case iType of
1:CreateLabel(coName, Titles, Parent, Top, Left, Width, Height, bsSkinData);
2:CreateBSEdit(coName, FieldName, FieldName, Parent, Top, Left, Width, Height, bsSkinData);
3:CreateComboBox(coName, Titles, FieldName,Parent, Top, Left, Width, Height, bsSkinData);
4:CreateMemo(coName, Titles, FieldName,Parent, Top, Left, Width, Height, bsSkinData);
End;
if sMath <> '' then FMathConstr.Add(sMath);//-----------------------------
FComponentField.Add(FieldByName('Fields').AsString);
Next;
Inc(FComponentCount);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -