明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1225|回复: 6

[讨论] MVCNIS 方法:6步实现动态DCL编程

[复制链接]
发表于 2022-4-11 20:24:01 | 显示全部楼层 |阅读模式
本帖最后由 vitalgg 于 2022-5-17 10:47 编辑

示例代码中所有函数 的定义代码来自 @lisp函数库  http://atlisp.cn/functionlib.html

查看函数定义请访问 http:// atlisp. cn/function/函数名
例如:
要查看函数 dcl:dialog 的定义,请访问 http://atlisp.cn/function/dcl:dialog
要查看函数 dcl:mtext 的定义,请访问 http://atlisp.cn/function/dcl:mtext

MVCNIS 简述
Model 建立数据模型
View 建立视图 dcl文件
Control 建立控制逻辑
New 新建一个对话框对象
Init 初始化对话框各控件的值
Show 显示对话框并进行交互
1 Model 数据模型
初始化要显示的数据。 以表格为例,假如有 1000条数据,每条数据有5项内容。 需要初始化以下三个必要变量 总页数 total-page 当前页 curr-page 表格数据 lst-table

2 View 建立视图 dcl文件
使用 lisp 代码创建dcl文件。 dcl 文件用于设置,各个控件(tile)的尺寸及布局方式。 dcl 文件内容不包含Model中要显示数据。 数据的显示将在 Init 中实现。 @lisp函数库提示了一些组合控件,如表格、多行文字、 翻页、Tabs、滚动条等。可以快速实现DCL设计。

3 Control 建立控制逻辑
在这里定义对话框的回调函数,回调函数命名一般以 cb- 或 callback- 开头,用于区别一般函数。 还以表格为例: 我们需要定义 cb-scrollbar 函数,用于 实现操作滚动条时,表格内的数据可以更新。 如果引入了 分页控件,则需要定义cb-flush-page来实现 表格数据的更新。

4 New 新建一个对话框对象
以上 MVC 前三个步骤实现了DCL及业务逻辑的定义。 现在可以载入DCL 到内存了。 本步骤只需一行代码。 (dcl:new "name") ;; name 为 view 步骤中 dcl:dialog 创建的对话框名,两者需一致。

5 Init 初始化对话框各控件的值
现在需要初始化一些显示值,比如当前页,表格数据的显示等。 如分页控件的 (paging-init),显示页面 (cb-flush-page) 等。

6 Show 显示对话框并进行交互
以上步骤完整无误,现在只需显示即可。也是一行搞定。 (dcl:show). 不过我们还需要做后续的收尾工作。比如 关闭对话框后需要删除 临时创建的dcl文件。返回给程序后续需要的结果。 示例代码见  http://atlisp.cn/function/example:dcl-dialog

基本示例
  1. (defun example:dcl-dialog (/ curr-page total-page dcl-fp dcl-tmp)
  2.   "MVCNIS 法: 6 步进行动态 DCL 开发。"
  3.   ""
  4.   "(example:dcl-dialog)"
  5.   (require (quote dcl:*))
  6.   "1. Model 建立数据模型。"
  7.   (setq curr-page 0)
  8.   (setq total-page 5)
  9.   "2. View 建立显示视图。"
  10.   (dcl:dialog "example")
  11.   (progn (dcl:hr 0.08)
  12.     (write-line ":text{key=\"num\";}"
  13.       dcl-fp)
  14.     (dcl:hr 0.08)
  15.     (dcl:table 8 8 nil t t nil)
  16.     (dcl:hr 0.08)
  17.     (dcl:paging t))
  18.   (dcl:dialog-end-ok-cancel)
  19.   "3. Control 创建控制流程"
  20.   (defun cb-flush-page nil (set_tile "num"
  21.       (strcat "
  22.          当前页面: "
  23.         (itoa (1+ curr-page)))))
  24.   "4. New 一个新对话框对象。"
  25.   (dcl:new "example")
  26.   "5. Init 初始化对话框"
  27.   (set_tile "title"
  28.     "Example 标题")
  29.   (paging-init)
  30.   (cb-flush-page)
  31.   "6. Show dialog 显示并进行交互"
  32.   (dcl:show)
  33.   (princ))

一个多行文本示例
  1. (defun example:dcl-mtext (/ dcl-fp dcl-tmp)
  2.   "MVCNIS 法: 6 步进行动态 DCL 开发。"
  3.   ""
  4.   "(example:dcl-mtext)"
  5.   (require (quote dcl:*))
  6.   "1. Model 建立数据模型。"
  7.   "2. View 建立显示视图。"
  8.   (dcl:dialog "example")
  9.   (progn (dcl:mtext "mt"
  10.       3 50)
  11.     (dcl:begin-cluster "row"
  12.       "")
  13.     (progn (dcl:button "btn1"
  14.         "按钮1"
  15.         "")
  16.       (dcl:button "btn2"
  17.         "按钮2"
  18.         "")
  19.       (dcl:end-cluster)))
  20.   (dcl:dialog-end-ok-cancel)
  21.   "3. Control 创建控制流程"
  22.   (defun cb-btn1 nil (dcl:set-mtext "mt"
  23.       "按下了按钮1按下了按钮1按下了按钮1按下了按钮1按下了按钮1按下了按钮1按下了按钮1按下了按钮1"))
  24.   (defun cb-btn2 nil (dcl:set-mtext "mt"
  25.       "按下了按钮2按下了按钮2按下了按钮2按下了按钮2按下了按钮2按下了按钮2按下了按钮2按下了按钮2"))
  26.   "4. New 一个新对话框对象。"
  27.   (dcl:new "example")
  28.   "5. Init 初始化对话框"
  29.   (set_tile "title"
  30.     "dcl-多行文本示例")
  31.   (dcl:set-mtext "mt"
  32.     "初始化多行文本内容。初始化多行文本内容。初始化多行文本内容。初始化多行文本内容。初始化多行文本内容。")
  33.   "6. Show dialog 显示并进行交互"
  34.   (dcl:show)
  35.   (princ))


多行文本的赋值示例:


一些View 示例:











本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 金钱 +12 收起 理由
tigcat + 1 很给力!
xshrimp + 1 + 12 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2022-4-11 21:13:43 | 显示全部楼层
牛哇牛哇牛哇牛哇牛哇牛哇牛哇牛哇
发表于 2022-4-11 23:39:15 | 显示全部楼层
能看懂你的思路和方法的估计自己也写出来了.
 楼主| 发表于 2022-4-12 05:36:33 | 显示全部楼层
本帖最后由 vitalgg 于 2022-4-12 05:45 编辑
xshrimp 发表于 2022-4-11 23:39
能看懂你的思路和方法的估计自己也写出来了.

MVC模式 是一种开发模式或开发框架,
这个思路不是我创立的。只不过是套用了其它语言的界面开发方法。只是为了方便记忆全部过程 后面加了NIS.主要思想还是MVC.

像早期的 微软C++的 MVC开发库
以及 java 的 strust , spring
PHP 的 Zend Framework
.net MVC



发表于 2022-4-17 21:48:38 | 显示全部楼层
可以很好的学习DCL了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:09 , Processed in 0.194739 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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