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

📄 customunit.pas

📁 运行时设计控件的一个小例子
💻 PAS
📖 第 1 页 / 共 3 页
字号:
          end;
        2:begin
            bsSkinEdit:= TbsSkinDBEdit(FComponentName.Items[i]);
            Locate('ComponentName', bsSkinEdit.Name, [loCaseInsensitive]);
            Edit;
            FieldbyName('PTop').AsInteger:= bsSkinEdit.Top;
            FieldbyName('PLeft').AsInteger:= bsSkinEdit.Left;
            FieldbyName('PWidth').AsInteger:= bsSkinEdit.Width;
            FieldbyName('PHeight').AsInteger:= bsSkinEdit.Height;
            FieldbyName('Fields').AsString:= bsSkinEdit.DataField;
            FieldbyName('Title').AsString:= bsSkinEdit.Text;
          end;
        3:begin
            bsSkinDBComboBox:= TbsSkinDBComboBox(FComponentName.Items[i]);
            Locate('ComponentName', bsSkinDBComboBox.Name, [loCaseInsensitive]);
            Edit;
            FieldbyName('PTop').AsInteger:= bsSkinDBComboBox.Top;
            FieldbyName('PLeft').AsInteger:= bsSkinDBComboBox.Left;
            FieldbyName('PWidth').AsInteger:= bsSkinDBComboBox.Width;
            FieldbyName('PHeight').AsInteger:= bsSkinDBComboBox.Height;
            FieldbyName('Fields').AsString:= bsSkinDBComboBox.DataField;
            ItemStr:= bsSkinDBComboBox.Items.Strings[0];
            for j:= 1 to bsSkinDBComboBox.Items.Count - 1 do begin
              ItemStr:= ItemStr + ',' + bsSkinDBComboBox.Items.Strings[j]
            end;
            FieldbyName('Title').AsString:= ItemStr;
          end;
        4:begin
            bsSkinDBMemo:= TbsSkinDBMemo(FComponentName.Items[i]);
            Locate('ComponentName', bsSkinDBMemo.Name, [loCaseInsensitive]);
            Edit;
            FieldbyName('PTop').AsInteger:= bsSkinDBMemo.Top;
            FieldbyName('PLeft').AsInteger:= bsSkinDBMemo.Left;
            FieldbyName('PWidth').AsInteger:= bsSkinDBMemo.Width;
            FieldbyName('PHeight').AsInteger:= bsSkinDBMemo.Height;
            FieldbyName('Fields').AsString:= bsSkinDBMemo.DataField;
            ItemStr:= bsSkinDBMemo.Lines.Strings[0];
            for j:= 1 to bsSkinDBMemo.Lines.Count - 1 do begin
              ItemStr:= ItemStr + ',' + bsSkinDBMemo.Lines.Strings[j]
            end;
            FieldbyName('Title').AsString:= ItemStr;
          end;          
      End;

      Try
        Post
      Except
        on E : Exception do
         //MessageDlg('Ignoring Exception:'+E.Message,mtInformation,[mbOK],0);
      End;
    end;
  End;
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.SetComponentField(FieldName:String;CNFieldName: String = '');
Var
  Co : TControl;
begin
  //Co.Assign(GetSelectControl);
  Co:= GetSelectControl;
  if Co = Nil then Exit;
  Case Co.Tag of
    2:begin
        TbsSkinDBEdit(Co).Text:= FieldName;
        TbsSkinDBEdit(Co).DataField:= FieldName;
      end;
    3:begin
        TbsSkinDBComboBox(Co).Text:= FieldName;
        TbsSkinDBComboBox(Co).DataField:= FieldName;
      end;
    4:begin
        TbsSkinDBMemo(Co).Text:= FieldName;
        TbsSkinDBMemo(Co).DataField:= FieldName;
      end;
  End;
end;

//------------------------------------------------- Writen By : AJ -----------//
//--------- 通过字段名字取得其关联的TbsSkinDBEdit显示控件 --------------------//
function TCustomClass.GetComponentByField(FieldName: String):TbsSkinDBEdit;
Var
  i : Integer;
begin
  Result:= Nil;
  for i:= 0 to FComponentField.Count - 1 do begin
    if FComponentField.Strings[i] = FieldName then begin
      Result:= TbsSkinDBEdit(FComponentName.Items[i]);
      Exit;
    end;
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
//--------- 通过控件名(数据库)取得其关联的TbsSkinDBEdit显示控件 --------------//
function TCustomClass.GetComponentByName(ComponenName: String): TbsSkinDBEdit;
Var
  i : Integer;
begin
  Result:= Nil;
  for i:= 0 to FComponentName.Count - 1 do begin
    if TbsSkinDBEdit(FComponentName.Items[i]).Name = ComponenName then begin
      Result:= TbsSkinDBEdit(FComponentName.Items[i]);
      Exit;
    end;
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.CleanComponentText;
Var
  i : Integer;
begin
  for i:= 0 to FComponentCount - 1 do begin
    if TbsSkinEdit(FComponentName.Items[i]).Tag <> 1 then
      TbsSkinEdit(FComponentName.Items[i]).Text:= '';
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.ComponentReLoad;
begin
  {FComponentName.Clear;
  FComponentField.Clear;
  CreateComponentDynamic(FDataSet, FParentControl, FSkinData);}
end;

//------------------------------------------------- Writen By : AJ -----------//
{procedure TCustomClass.OnClick(Sender: TObject);
begin
  ;
end; }

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.SplitString(Mark, Str: String): TStrings;
Var
  iPos : Integer;
begin
  Result:=TStringlist.Create;
  iPos:= Pos(Mark, Str);
  While iPos <> 0 do begin
    Result.Add(Copy(Str, 0,iPos - 1));
    Delete(Str, 1, iPos);
    iPos:= Pos(Mark, Str);
  End;
  Result.Add(Str);
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.SetDbGridView(TableName: String;DBGrid: TbsSkinDBGrid);
Var
  i : Integer;
begin
 { DBGrid.Columns.Clear;
  With DM1.ADOQuery_FieldMgr do begin
    Close;
    Sql.Text:= 'Select * From FieldMgr_tbl Where InTable = ''' + TableName + '''';
    Open;
    for i:= 0 to RecordCount - 1 do begin
      FCurrentColumns:= DBGrid.Columns.Add;
      FCurrentColumns.FieldName:= FieldByName('FieldName').AsString;
      FCurrentColumns.Title.Caption:= FieldByName('DisplayName').AsString;
      FCurrentColumns.Width:= 80;
      Next;
    end;
  End;   }
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.LoadDbGridView(TableName: String;DBGrid: TbsSkinDBGrid);
Var
  XMLPath : String;
  i : Integer;
begin
  XMLPath:= 'Configure\InterFace.cfg';
  XMLDoc1.LoadFromFile(XMLPath);
  XMLDoc1.Active:= True;
  FParentNode:= XMLDoc1.DocumentElement.ChildNodes.Nodes[TableName];
  DBGrid.Columns.Clear;
  for i:= 0 to FParentNode.ChildNodes.Count - 1 do begin
    FCurrentNode:= FParentNode.ChildNodes.Get(i);
    FCurrentColumns:= DBGrid.Columns.Add;
    FCurrentColumns.FieldName:= FCurrentNode.AttributeNodes['Name'].Text;
    FCurrentColumns.Title.Caption:= FCurrentNode.AttributeNodes['Title'].Text;
    FCurrentColumns.Width:= StrToInt(FCurrentNode.AttributeNodes['Width'].Text);
  end;
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.SaveDbGridView(TableName: String;DBGrid: TbsSkinDBGrid);
Var
  XMLPath : String;
  i : Integer;
begin
  XMLPath:= 'Configure\InterFace.cfg';
  XMLDoc1.LoadFromFile(XMLPath);
  XMLDoc1.Active:= True;
  FParentNode:= XMLDoc1.DocumentElement.ChildNodes.Nodes[TableName];
  FParentNode.ChildNodes.Clear;
  for i:= 0 to DBGrid.Columns.Count - 1 do begin
    FCurrentNode:= FParentNode.AddChild('Field'+IntToStr(i));
    FCurrentNode.AttributeNodes['Name'].Text:= DBGrid.Columns.Items[i].FieldName;
    FCurrentNode.AttributeNodes['Title'].Text:= DBGrid.Columns.Items[i].Title.Caption;
    FCurrentNode.AttributeNodes['Width'].Text:= IntToStr(DBGrid.Columns.Items[i].Width);
  end;
  XMLDoc1.SaveToFile(XMLPath);
end;

//------------------------------------------------- Writen By : AJ -----------//
procedure TCustomClass.ComponentChange(Sender: TObject);
Var
  i, iPos : Integer;
  KeyField : String;
  B, C : String;
begin
  Case TWinControl(Sender).Tag of
    2,3:begin
          for i:= 0 to FMathConstr.Count - 1 do begin
            KeyField:= FMathConstr.Strings[i];
            iPos:= Pos(',',KeyField);
            if TbsSkinDBEdit(Sender).DataField = Copy(KeyField, 0, iPos-1) then begin
              //ShowMessage(KeyField);
              Delete(KeyField, 1, iPos);
              ExeStrMath(KeyField);
            end;
          end;
            //GetComponentByField('EndPage')
            {B:= TbsSkinEdit(Sender).Text;
            C:= GetComponentByField('BeginPage').Text;
            if (B<>'') and (C<>'') then begin
              A:= StrToInt(B) - StrToInt(C);
              GetComponentByField('PageCount').Text:= IntToStr(A);
            end; }
          //ShowMessage(TbsSkinEdit(Sender).Text);
        end;
  End;
end;

//------------------------------------------------- Writen By : AJ -----------//
function TCustomClass.ExeStrMath(str: String): String;
Var
  StrList, StrMatchList : TStrings;
  i, iPosB, iPosE, Value : Integer;
  Mark, sText : String;
begin
  StrList     := TStringList.Create;
  StrMatchList:= TStringList.Create;
  iPosB:= Pos('[',str);
  iPosE:= Pos(']',str);
  While iPosE > 0 do begin
    iPosB:= Pos('[',str);
    iPosE:= Pos(']',str);
    StrList.Add(Copy(str, iPosB+1, iPosE-2));
    StrMatchList.Add(Copy(str, iPosE+1, 1));
    Delete(str, 1, iPosE+1);
  End;
  for i:= 1 to StrList.Count-1 do begin
    sText:= GetComponentByField(StrList.Strings[i]).Text;
    if sText = '' then Exit;
    StrList.Strings[i]:= GetComponentByField(StrList.Strings[i]).Text;
  end;
  Mark:= StrMatchList.Strings[1];
  if Mark='-' then begin
    Value:= StrToInt(StrList.Strings[1])-StrToInt(StrList.Strings[2]);
  end else begin
    Value:= StrToInt(StrList.Strings[1])+StrToInt(StrList.Strings[2]);
  end;
  if StrMatchList.Strings[3] <> '' then begin
    Mark:= StrMatchList.Strings[2];
    if Mark='-' then begin
      Value:= Value-StrToInt(StrMatchList.Strings[3]);
    end else begin
      Value:= Value+StrToInt(StrMatchList.Strings[3]);
    end;
  end;  
  GetComponentByField(StrList.Strings[0]).Text:= IntToStr(Value);
  StrList.Free;
  StrMatchList.Free;
end;


function TCustomClass.ReadMathStr(): String;
begin

end;

Procedure TCustomClass.WriteFMathStr(str: String);
begin
  {With DM1.ADODataSet_Component do begin
    Locate('ComponentName', TbsSkinComboBox(SelectControl).Name, [loCaseInsensitive]);
    Edit;
    FieldByName('Math').AsString:= str;
    Post;
  End  }
end;

end.

⌨️ 快捷键说明

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