导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/6/8 2:37:10
标题:
Delphi 10.2.3 下 Android ShowModal 模式对话框 有解决方案吗
浏览:3036
加入我的收藏
楼主:
在网上看到的都是针对老版本的, 不知有何新进展。
----------------------------------------------
-
作者:
a5824 (Return)
★☆☆☆☆
-
普通会员
2018/6/8 9:22:40
1楼:
好像老猫有修改过
----------------------------------------------
-
作者:
2018/6/9 0:36:54
2楼:
如果要开发一个大型或较复杂的应用程序,你要等待用户回答, 再做出相应处理。 仅靠那种回调函数/匿名远远不够。 Android仅仅是手机系统, 难道就因为是免费, 才从windows 向Android发展吗? 再等两年,delphi 新版支持 Linux 桌面开发, 移到LINUX下, 不就好了吗
----------------------------------------------
-
作者:
2018/6/9 3:22:31
3楼:
高勇的通用界面里有很完善的各种模态对话框方案。
----------------------------------------------
只有偏执狂才能生存!
作者:
2018/6/9 9:38:10
4楼:
Try in (试试) http://www.fmxexpress.com/?s=modal many samples for FMX / Android (的许多样本) XE5..XE10.2 sub-links: (子链接) https://github.com/FMXExpress/Firemonkey http://www.fmxdemos.com http://www.fmxuniversity.comhttp://www.fmxfeeds.com
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
2018/6/9 9:54:17
5楼:
为什么,我不再支持 模式化? 因为谷歌不高兴。 如果你特别喜欢模式化,就不要支持安卓了。 安卓开发,他们就不做对话框吗?不需要选 是否 吗? 人家怎么就不觉得回调不行呢?
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/10 9:21:48
6楼:
3楼说的很对: 好东西也要宣传,打扰了,各位。只要您真的需要,只要真的能够帮助到您,钱真的不是问题,请耐心看完,谢谢。 Delphi移动(桌面)程序通用界面设计(20.0)全功能版 详情:https://item.taobao.com/item.htm?id=522707335329 1、没有使用任何第三方控件,近80个窗体界面任您选择,提供所有源码,毫无保留; 2、购买后加入一个售后群,会有不定期更新,超级划算,绝对物超所值; 3、大部分都可以窗口级引用,再稍微修改就变成你的了; 4、快速界面设计素材,非它莫属; 5、全是delphi原生控件,您不用担心升级问题。 您的支持,会导致此demo内容会越来越多。 如您资金确实有困难,可以QQ120180714联系我单独购买,否则请直接拍下即可。 已经购买的,请直接下载升级版本,谢谢支持。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
2018/6/10 9:23:22
7楼:
本demo一直紧跟最新Delphi版本。 如果资金困难,可以QQ找我商量。
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
2018/6/12 1:57:57
8楼:
没发现解决方法。 谢谢 emailx45 和 a5824
----------------------------------------------
-
作者:
2018/6/14 23:40:10
9楼:
下面内容供参考: 所谓阻塞式对话框,就是调用Form->ShowModal()显示出来的对话框,点击这个对话框之外没有反应,只能点击对话框中的按钮才能关闭该对话框。然而在Android应用中不支持此调用,只能是效果一样的Form->ShowModal(回调函数)或Form->Show()调用。下面的方法实现模拟阻塞式对话框,其思路是该对话框Form完全覆盖调用页面,并设置为透明,对话框Form中设置不透明的对话框。设置如下: Form->Transparencey=true //透明 Form->Fill->Kind=None //背景颜色无 此时显示效果如第2条类似,只是点击对话框之外没有反应。显然可以设置对话框在屏幕中间或下面等,如下图所示: 第1种方法对话框出现后,前一Form颜色变暗。这一功能实现方法是将前一Form的全部内容放入Panel1中,需要显示对话框前,加如下代码: Panel1->Enabled = false; //使Form页面变灰色 对话框中按钮按下后,设置参数,关闭对话框;对话框Form的OnClose事件中加入如下代码: 前一Form->Panel1->Enabled = true; //恢复前Form显示。 效果如下: 该方法可以通过添加不同的透明控件调整对话框在屏幕上的位置。还有一种方法更逼真模拟前一Form变暗的效果:在对话框Form上增加Layout1,Align=Client;Layout1上增加Rectangle1,Fill->Color=Black,Fill->Kind=Solid,Opacity=0.4(0.4透明度);对话框Form上增加与Layout1同级的Rectangle2,作为对话框放置相关内容,注意对话框Rectangle2位置Align=Center居中,如果是其他位置则将与Layout1共同挤占Form。此时背景黑色透明度可以随意调整,其效果与第1种方法非常类似,如下图所示:
此帖子包含附件: 大小: 96.8K
----------------------------------------------
-
作者:
2018/6/14 23:41:02
10楼:
第二张图片
此帖子包含附件: 大小: 123.1K
----------------------------------------------
-
作者:
2018/6/14 23:41:27
11楼:
第三张图片
此帖子包含附件: 大小: 91.8K
----------------------------------------------
-
作者:
2018/6/14 23:47:54
12楼:
上述例子的关键是对话框Form完全覆盖了屏幕,透明部分露出前景,但点击无效,达到类似效果。供参考。
----------------------------------------------
-
作者:
2018/6/15 8:44:15
13楼:
虽然,EMB 写的对话框 文本需要改源码,但是,我还是推荐EMB的对话框。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/15 22:01:02
14楼:
EMB有个最新的 18个UI 什么的,挺好
----------------------------------------------
-
作者:
2018/6/20 23:22:57
15楼:
首先感谢大家参与讨论。 bjweizi 还花了时间给出了具体方法和观点; 该实现方法我在去年做了个类似模型,我把源码发上来。它仅仅可以解决一些应用。 但bjweizi说: 所谓阻塞式对话框,就是调用Form->ShowModal()显示出来的对话框,点击这个对话框之外没有反应,只能点击对话框中的按钮才能关闭该对话框。 好像不完全对吧? 还应该具备最关键的一条: 后边的程序不能继续执行,等待回答结果, 再根据结果继续执行。 通用模型我理解应具备如下功能: begin xxxxxxx xxxxxxx xxxxxxx 对话框y/n if y then begin xxxxx xxxxx end else begin xxxxx xxxxx end xxxxxx xxxxxx xxxxxx end; 另外, wang_80919 (Flying Wang) 说: 安卓开发,他们就不做对话框吗?不需要选 是否 吗? 人家怎么就不觉得回调不行呢? 我也在想这个问题, 可是找不到解决办法。 就觉得android毕竟是手机系统 和windows不是一个级别。它要解决的是小内存,小屏幕,弱cpu,弱显卡满足手机应用。 不知道wang_80919 (Flying Wang)用回调咋解决我上边的情况。 谢谢。 ----------
----------------------------------------------
-
作者:
2018/6/21 8:30:28
16楼:
我的意思是,回调用的好好的,吃多了搞 模式化? WIN 系统,也一样可以用回调,丢掉 模式化,不影响 WIN 开发。 你希望 对话框 显示的时候,后面的代码不执行。在 安卓上,最好不要这样做。 用回调,就不存在所谓的后面的代码了。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/21 21:43:47
17楼:
可能你还没理解我的意思: 一个大型项目很复杂,不是你说的一个回调可解决的。 我上面的模型不是简单的3行代码, 可能很长, 其中可能还会有对话等待回答 XXXXXXx xxxxxx ..... XXXXXX 我是说回调解决不了全部, 不是你说的: 回调用的好好的,吃多了搞 模式化。 你理解我的意思: 对话框 显示的时候,后面的代码不执行。 关键是系统很大, 硬要拆解,将会面目全非。 顺便提一下: 你就是 Wang wang 吧?
----------------------------------------------
-
作者:
2018/6/21 22:29:17
18楼:
我经常上 Embarcadero 的网站, 这两年,发现 Delphi 有 bug 就到 RAD Studio Quality Dashboard 上把它写出来, 让Delphi开发人员知道。 在 RAD Studio Quality Dashboard 下面有个 STATISTICS: RAD STUDIO (REPORTER) 我看到了华人的面孔,第一个就是我 John Shi 51 1% Dance Liu 42 1% Wenjie zhou 31 1% Wang wang 29 1% Eddie Chang 11 0% 后面还有。 也鼓励同行们这样做,使Delphi更完美。 软件使用排行榜是根据点击率计算的, 例如:TIOBE Index Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. 我们用百度多些, 权重且最小。这也说明, 它反映的不全面。
----------------------------------------------
-
作者:
2018/6/21 23:41:43
19楼:
楼上真是好样的!!
----------------------------------------------
只有偏执狂才能生存!
作者:
2018/6/22 6:01:53
20楼:
哦,15楼我附的例子是在Window下测试的, 刚才试了一下, 在Android下 需要把coverForm.BorderStyle 改成 Single等值, 不能是None。
----------------------------------------------
-
作者:
2018/6/22 8:15:15
21楼:
主窗口: procedure TForm1.Button1Click(Sender: TObject); var AForm:TForm2; begin AForm:=TForm2.Create(nil); AForm.ShowModal ( procedure(ModalResult:TModalResult) begin AForm.free; end ); showmessage('演示完毕'); end; 模式窗口: procedure TForm2.Button1Click(Sender: TObject); var ASum:integer; begin ASum:=StrToInt(Edit1.Text)+StrToInt(Edit2.Text); if ASum=StrToInt(Edit3.Text) then showmessage('正确') else showmessage('错误'); end; procedure TForm2.Button2Click(Sender: TObject); begin close; end; 不能实现模式窗口。主窗口运行至showmessage('演示完毕');这句不会停下等待。 只能这样,把相关语句放在匿名函数内,闭包运行: procedure TForm1.Button1Click(Sender: TObject); var AForm:TForm2; begin AForm:=TForm2.Create(nil); AForm.ShowModal ( procedure(ModalResult:TModalResult) begin AForm.free; showmessage('演示完毕'); end ); end;
----------------------------------------------
-
作者:
2018/6/22 8:31:57
22楼:
楼主,你就是懒得修改你现有代码而已。 居然说什么 “不是你说的一个回调可解决的。” 如果你新写的,或者勤快地去改旧代码。 绝对能用回调解决。 其实,我就承认我懒。 不过,我不可能在 跨平台项目上存在旧代码。 既然肯定是新写的,就肯定用回调。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/22 21:52:03
23楼:
要同时支持几个系统,一个运行多年的软件会被弄得面目全非。 以勤快无关
----------------------------------------------
-
作者:
2018/6/22 22:10:06
24楼:
sxqwhxq (步惊云), 你说的完全正确: 把相关语句放在匿名函数内,闭包运行。 这种情形可以解决一些应用。 但是大型系统, 后面不相关语句内容还会很多, 当然也会有与用户交互的情况, 以此做出处理。 这种靠回调会把程序搞得很凌乱。 只适合手机之类的简单应用。 当然, 它本身就是手机系统。 我的情况是老板想省钱。 想这么做。 谢谢
----------------------------------------------
-
作者:
2018/6/23 12:10:25
25楼:
运行多年? 你多年前,就支持 安卓了? 问题是,第一版 XE5 开始,安卓就不支持 模式化。 对话框显示完,后面的代码一定继续运行。 除非你用了 特殊的办法,例如我以前的那种不合理的办法。 因为,不合理,所以我删了。再也不打算支持了。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/23 13:43:15
26楼:
还是用 Windows 的思维去搞移动端,哎。 以下示例用 FMXUI ,来自音儿小白的好东西。
此帖子包含附件: 大小: 23.1K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
2018/6/23 13:54:08
27楼:
换个思维就那么难?
此帖子包含附件: 大小: 10.2K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
2018/6/23 20:26:59
28楼:
showmodal很好用,奈何android不支持, 不能一套代码到处编译了
----------------------------------------------
-
作者:
2018/6/24 11:07:21
29楼:
使用 回调,支持所有平台。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/24 22:31:31
30楼:
怎样回调呢,大猫?
----------------------------------------------
-
作者:
2018/6/25 8:33:53
31楼:
你自己 21 楼最后一段不是写了吗
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/25 22:17:50
32楼:
我的系统原来是VCL很老的版本 d6, 有很多用户。 为了跨平台,从xe7 用 fmx重写。在Windows下交用户使用。一直跟着升级到Delphi最新版。具体跨平台代码如何写, Delphi 有介绍, 自己看, 也没时间争论。 老板早想用于Android, 但是首先是Windows。 我也提示他Delphi10.1下容易改, 10.2.2 下改动要很大, 结构要大变, windows下现行程序都会受影响, 他不听。 大概就这样。 Wang Wang, 你在说啥? 你看清楚我咋说的了吗? Delphi的历史我知道。 我要从头写个程序。 不会存在此情况。
----------------------------------------------
-
作者:
2018/6/25 22:52:27
33楼:
xe7 比 xe5 新吧。XE5 就规定了安卓下必须回调。你在 XE7 下就不知道么?
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/26 21:45:03
34楼:
当然知道, 但是首先是Windows。 新版Windows可用后才会考虑安卓版。 何况一直可以找到解决办法, 代码改动很小。直到10.2.1还可以找到方法。 我写这个帖子就是想找非官方的解决方法。 因为官方的大家都知道。
----------------------------------------------
-
作者:
2018/6/26 22:15:22
35楼:
对不起,是我害了你。 我就不应该做非官方的版本。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/28 4:35:04
36楼:
也不能这么说, 我见过多个版本。有国内的,也有国外。 国外的多一些。 我到现在也不知道你做的是啥, 前面有人说老猫做的。。。 查了半天, 又追到Embardero 网站, 没发现完整的东西。 国内所谓的方法比较老, 大都在2016年左右出的。 也没名字。
----------------------------------------------
-
作者:
2018/6/28 8:26:28
37楼:
那你就用国外的办法呗。 或者哪个办法支持 10.2.3 你就用哪个。 如果真有,大概你也不会提出这个问题了。 说明,他们都不打算支持了。 都被谷歌打败了。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/28 8:52:33
38楼:
老系统升级没有showmodal改动确实很大
----------------------------------------------
-