起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 327|回复: 11

【结贴】[请求]如何在Business里实现Studio的窗体设计效果?

[复制链接]
发表于 2010-3-12 12:49:52 | 显示全部楼层 |阅读模式
“扩展新的文档类型:窗体文档:让文档上支持更多的组件(目前只支持按钮),以达到搭建和控制复杂界面的目的。
可将checkbox、radiobutton、datagrid、listview、image等常用可视组件,引入近来,并提供界面的控制接口”
遇到的问题第一个就是Business下创建的窗体文档中,控件的拖拽效果,代码实现和Studio中我们的设计习惯不一致,求解决思路。

任务的目标其实是在Business下实现Studio的开放式动态编程(首先封闭式服务选择),通过资源生成的方式由实施搭建人员产生简单的目标功能。以后还有支持数据集、数据感知类组件二次开放给实施搭建人员,说白了就是把Studio的IDE简化到Business窗体文档设计器中……

mydync02.jpg

10.13 KB, 下载次数: 151

回复

使用道具 举报

 楼主| 发表于 2010-3-12 12:57:20 | 显示全部楼层
要做成这种效果

studiodync01.jpg

34.53 KB, 下载次数: 151

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-12 13:52:49 | 显示全部楼层
知道比较难,我有心理准备,请畅所欲言,谢!
回复 支持 反对

使用道具 举报

发表于 2010-3-12 14:20:20 | 显示全部楼层
楼主,一个工具有一个工具的用途,既然区分设计环境和运行环境,那么设计的东东应该在设计环境下做,对吧。
所以我们不建议这样做,也不支持这样的东东。如果哪位有实现过,不仅仅是平台的,其他的开发工具做过,例如Delphi等,欢迎共享一下,我们也学习学习。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-12 14:42:19 | 显示全部楼层
……

领导要的东西就得想办法呀,这贴我们领导也可能看到,不敢乱说话。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-12 15:02:27 | 显示全部楼层
procedure TCT3.InnerOnClick(Sender: TObject);
var
  lForm: TForm;
  i: Integer;
begin
  if Sender is TButton then
  begin
    lForm := TForm(TButton(Sender).Parent);
    for i := 0 to lForm.ComponentCount - 1 do
      if lForm.Components is TLabel then
        TLabel(lForm.Components).Caption := lForm.Caption;
  end;
end;

procedure TCT3.btnDyncFormClick(Sender: TObject);
var
  lForm: TForm;
  lBtn: TButton;
  lbl: TLabel;
begin
  lForm := TForm.Create(Context);
  try
    with lForm do
    begin
      Caption := 'AutoCreateForm';
      Left := Self.Left + 30;
      Top := Self.Top + 30;
      WindowState := TWindowState.wsNormal;

      lbl := TLabel.Create(lForm);
      with lbl do
      begin
        Parent := lForm;
        Left := 50;
        Top := 50;
        Name := 'Label1';
      end;
      lBtn := TButton.Create(lForm);
      with lBtn do
      begin
        Parent := lForm;
        Left := 20;
        Top := 20;
        Width := 150;
        Name := 'Button1';
        OnClick := InnerOnClick;
      end;
      ShowModal;
    end;
  finally
    lBtn.Free;
    lbl.Free;
    FreeAndNil(lForm);
  end;
end;

上面代码就是动态窗体设计界面生成的一个原型演示,通过用户鼠标的拖拽放大或缩小按钮,使用领域模型里的TBizCodeDOM对象在unit对应设置button1.left button1.top和button1.width button1.height,操纵dfm及其中组件尺寸,父子关系,大小名称等属性,增删组件;根据dfm增加的组件unit自动添加其所在资源的引用,提供studio业务对象树路径指定存取位置,再根据业务模型生成库中的TFormGenerator生成资源,大概就是这个样子,当然中间很多技术细节的困难还没有追究,首先想了解下设计环境有没更贴近设计习惯的操作方式,毕竟利用业务模型代码模型库对象TBizCodeDOM同步鼠标操作unit非常困难。
回复 支持 反对

使用道具 举报

发表于 2010-3-12 16:06:33 | 显示全部楼层
我不是没看到你帖子啊,确实帮不上你。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-12 16:30:53 | 显示全部楼层
嗯……

不过还是要谢谢你们:atiger、lixy。
回复 支持 反对

使用道具 举报

发表于 2010-3-14 15:21:18 | 显示全部楼层
例如在的Form里有个 Memo1 控件需要拖动,在平台上运行的时候就可以搞定了.

procedure TMainForm.Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    Borland.Delphi.Windows.ReleaseCapture;
    Memo1.Perform(Borland.Delphi.Messages.WM_SYSCOMMAND,$F009,0);//移动位置
end;

  Memo1.Perform(Borland.Delphi.Messages.WM_SYSCOMMAND,$F008,0);//改变大小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-18 09:43:08 | 显示全部楼层
这个语句不错!
可是像$F009这样的参数在哪里可以找到出处?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-11 01:35 , Processed in 0.046422 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表