⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customunit.pas

📁 运行时设计控件的一个小例子
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  End;
  FParentControl:= Parent;
  FSkinData:= bsSkinData;
  Result:= True;
end;

//------------------------------------------------- Writen By : AJ -----------//
//---------- 与CreateComponentDynamic 相似, 待整理 ---------------------------//
function TCustomClass.AddComponentDynamic(CoType:Integer;DesignParent:TWincontrol;ExecuteParent:String;DS_Component: TADODataSet;bsSkinData: TbsSkinData): Boolean;
Var
  Top, Left, Width, Height, MaxNumber : Integer;
  Name1, Name2, NewName, EditTitle : String;
  Sql : String;
begin
  Sql:= 'Select * From Component_tbl Where Number = (select Max(Number) from component_tbl Where Type = ';
  Sql:= Sql + IntToStr(COType) + ' )' + ' And Type = ' + IntToStr(COType);
  With FDataSet do begin
    Active:= False;
    CommandText:= Sql;
    Active:= True;
    MaxNumber:= FieldByName('Number').AsInteger;
    Top   := FieldByName('PTop').AsInteger;
    Left  := FieldByName('PLeft').AsInteger;
    Width := FieldByName('PWidth').AsInteger;
    Height:= FieldByName('PHeight').AsInteger;

    Top:= FParentControl.Top + Top + Height + 20;
    Left:= FParentControl.Left + Left;
    Width:= Width;
    Height:= Height;
    //bsSkinEdit.SkinData:= bsSkinData;
    Name1:= FieldByName('ComponentName').AsString;
    if Eof then begin
      Top:= FParentControl.Top + 20 + Height + 20;
      Left:= FParentControl.Left + 20;
      Width:= 120;
      Height:= 22;
      Case COType of
        1:Name1:= 'Edit001';
        2:Name1:= 'Label001';
        3:Name1:= 'Combo001';
        4:Name1:= 'Memo001';
      End;
    end;
    Name2:= Copy(Name1, 0, Length(Name1) - 3);
    NewName:= Name2 + NewName + PadingStr(IntToStr(MaxNumber+1), 3);

    Case COType of
      1:CreateLabel(NewName, NewName, DesignParent, Top, Left, Width, Height, bsSkinData);
      2:CreateBSEdit(NewName, NewName, '', DesignParent, Top, Left, Width, Height, bsSkinData);
      3:CreateComboBox(NewName, NewName, '', DesignParent, Top, Left, Width, Height, bsSkinData);
      4:CreateMemo(NewName, NewName, '',DesignParent, Top, Left, Width, Height, bsSkinData);
    End;

    Append;
      FieldByName('ComponentName').AsString:= NewName;
      FieldByName('Title').AsString:= NewName;      
      FieldByName('Number').AsInteger:= MaxNumber+1;
      FieldByName('Type').AsInteger:= CoType;
      FieldByName('Belong').AsString:= 'Form_Receive';
      FieldByName('DesignParent').AsString:= DesignParent.Name;
      FieldByName('ExecuteParent').AsString:= ExecuteParent;
      FieldByName('Fields').AsString:= '';
      FieldByName('PTop').AsInteger:= Top;
      FieldByName('PLeft').AsInteger:= Left;
      FieldByName('PWidth').AsInteger:= Width;
      FieldByName('PHeight').AsInteger:= Height;
    Try
      Post
    Except
     on E : Exception do
       //MessageDlg('Ignoring Exception:'+E.Message,mtInformation,[mbOK],0);
    End;
    FComponentField.Add(FieldByName('Fields').AsString);
    Inc(FComponentCount);
  End;
    CustomDragClass.addControl(FComponentName.Items[FComponentCount - 1]);
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.DeleteSelectComponent;
Var
  i : Integer;
begin
  GetSelectControl;
  FTemControl:= TWinControl(FComponentName.Items[FSelectControlIndex]);
  With FDataSet do begin
    Active:= False;
    CommandText:= 'Select * From Component_tbl Where ComponentName = '''+FTemControl.Name+'''';
    Active:= True;
    //Locate('ComponentName', FTemControl.Name, [loCaseInsensitive]);
    Delete;
  end;
  FTemControl.Free;
  FComponentName.Delete(FSelectControlIndex);
  Dec(FComponentCount);
  CustomDragClass.DeleteControl(FSelectControlIndex);
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.ShowFieldDataByDS(DS_table: TADODataSet;ExecuteParent:String): Boolean;
Var
  i : Integer;
  FieldName : String;
begin
  for i:= 0 to FComponentCount - 1 do begin
    FTemControl:= TWinControl(FComponentName.Items[i]);
    if FTemControl.Parent.Name = ExecuteParent then
    Case FTemControl.Tag of
      1:begin
          //----------------------------------------------
        end;
      2:begin
          bsSkinEdit:= TbsSkinDBEdit(FComponentName.Items[i]);
          FieldName:= FComponentField.Strings[i];
          if FieldName <> '' then
            bsSkinEdit.Text:= DS_table.FieldByName(FieldName).AsString;
        end;
      3:begin
          bsSkinDBComboBox:= TbsSkinDBComboBox(FComponentName.Items[i]);
          FieldName:= FComponentField.Strings[i];
          if FieldName <> '' then
            bsSkinDBComboBox.Text:= DS_table.FieldByName(FieldName).AsString;
        end;
      4:begin
          bsSkinDBMemo:= TbsSkinDBMemo(FComponentName.Items[i]);
          FieldName:= FComponentField.Strings[i];
          if FieldName <> '' then
            bsSkinDBMemo.Text:= DS_table.FieldByName(FieldName).AsString;
        end;
    End;
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.ShowDataByXML(CurrentNode: IXMLNode;ExecuteParent:String): Boolean;
Var
  i : Integer;
  FieldName : String;
begin
  for i:= 0 to FComponentCount - 1 do begin
    FTemControl:= TWinControl(FComponentName.Items[i]);
    if FTemControl.Parent.Name = ExecuteParent then
    Case FTemControl.Tag of
      1:begin
          //----------------------------------------------
        end;
      2:begin
          bsSkinEdit:= TbsSkinDBEdit(FComponentName.Items[i]);
          FieldName:= FComponentField.Strings[i];
          if FieldName <> '' then
            bsSkinEdit.Text:= CurrentNode.ChildNodes[FieldName].Text;
        end;
      3:begin
          bsSkinDBComboBox:= TbsSkinDBComboBox(FComponentName.Items[i]);
          FieldName:= FComponentField.Strings[i];
          if FieldName <> '' then
            bsSkinDBComboBox.Text:= CurrentNode.ChildNodes[FieldName].Text;
        end;
    End;
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
//----- 用动态控件修改数据集数据 Action:= 1 为Append :=2 为Edit -----------------//
function TCustomClass.EditFieldDataByDS(DS_table: TADODataSet;Action : Integer;ParentCon:TWincontrol): Boolean;
Var
  i : Integer;
  FieldName : String;
begin
  //FComponentField.SaveToFile('E:\FComponentField.txt');
  With DS_table do begin
    Case Action of
      1:Append;
      2:Edit;
    End;

    for i:= 0 to FComponentCount - 1 do begin
      FieldName:= FComponentField.Strings[i];
      if (FieldName <> '') and (TWincontrol(FComponentName[i]).Parent.Name = ParentCon.Name) then begin
        Case TWinControl(FComponentName.Items[i]).Tag of
          2:begin
              bsSkinEdit:= TbsSkinDBEdit(FComponentName.Items[i]);
              FieldByName(FieldName).AsString:=  bsSkinEdit.Text;
            end;
          3:begin
              bsSkinDBComboBox:= TbsSkinDBComboBox(FComponentName.Items[i]);
              FieldByName(FieldName).AsString:=  bsSkinDBComboBox.Text;
            end;
          4:begin
              bsSkinDBMemo:= TbsSkinDBMemo(FComponentName.Items[i]);
              FieldByName(FieldName).AsString:=  bsSkinDBMemo.Text;
            end;            
        End;
      end;
    end;
    //--------- 记录录入者 ---------------------------------//
    //FieldByName('HLSQLRR').AsString:= gs_LoginerInfo.UserName;
    
    Try
      Post
    Except
     on E : Exception do
       //MessageDlg('Ignoring Exception:'+E.Message,mtInformation,[mbOK],0);
    End;
  End;
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.EditFieldDataByXML(CurrentNode: IXMLNode;ExecuteParent: String): Boolean;
Var
  i : Integer;
  FieldName : String;
begin
  for i:= 0 to FComponentCount - 1 do begin
    FieldName:= FComponentField.Strings[i];
    if (FieldName <> '') and (TWincontrol(FComponentName[i]).Parent.Name = ExecuteParent) then begin
      Case TWinControl(FComponentName.Items[i]).Tag of
        2:begin
            bsSkinEdit:= TbsSkinDBEdit(FComponentName.Items[i]);
            CurrentNode.ChildNodes[FieldName].Text:= bsSkinEdit.Text;
          end;
        3:begin
            bsSkinDBComboBox:= TbsSkinDBComboBox(FComponentName.Items[i]);
            CurrentNode.ChildNodes[FieldName].Text:= bsSkinDBComboBox.Text;
          end;
      End;
    end;
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.SetCustomDrag(CanDrag : Boolean);
var
  i : Integer;
begin
  if CanDrag then begin
    if not Assigned(CustomDragClass) then begin
      CustomDragClass:=TDragClass.create(FParentControl);
      for i:= 0 to FComponentCount - 1 do
        CustomDragClass.addControl(FComponentName.Items[i]);
    end;
  end else begin
    CustomDragClass.Free;
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.GetSelectControl: TControl;
begin
  if not Assigned(CustomDragClass) then Exit;
  FSelectControlIndex:= CustomDragClass.SelectControlInex;
  FSelectControl:= TbsSkinEdit(FComponentName.Items[FSelectControlIndex]);
  Result:= FSelectControl;
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.SetPointVisible(Visibled: Boolean);
begin
  CustomDragClass.SetPointVisible(Visibled);
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.PadingStr(str: String; Len: Integer): String;
Const
  sPad = '00000000';
Var
  iLen, i : Integer;
begin
  iLen:= Length(str);
  i:= Len-iLen;       //---- i >0
  Result:= Copy(sPad,1,i)+str;
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.SaveComponent: Boolean;
Var
  i, j : Integer;
  Control : TControl;
  ItemStr : String;
begin
  With FDataSet do begin
    Active:= False;
    //CommandText:= 'Select * From Component_tbl Where ComponentName = '''+ TbsSkinEdit(FSelectControl).Name + '''';
    CommandText:= 'Select * From Component_tbl';
    Active:= True;
    for i:= 0 to FComponentCount - 1 do begin
      Control:= TControl(FComponentName.Items[i]);
      Case Control.Tag of
        1:begin
            DSLabel:= TLabel(FComponentName.Items[i]);
            Locate('ComponentName', DSLabel.Name, [loCaseInsensitive]);
            Edit;
            FieldbyName('PTop').AsInteger:= DSLabel.Top;
            FieldbyName('PLeft').AsInteger:= DSLabel.Left;
            FieldbyName('PWidth').AsInteger:= DSLabel.Width;
            FieldbyName('PHeight').AsInteger:= DSLabel.Height;
            FieldbyName('Title').AsString:= DSLabel.Caption;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -