小编Jim*_*eth的帖子

在弹出菜单的禁用菜单项上显示工具提示提示

所以我有一个TMenuItem附加到TPopupMenu上的TAction为TDBGrid(实际上是第三方,但你明白了).根据网格中选定的行,启用或禁用TAction.我想要的是能够向用户显示提示,解释禁用该项目的原因.

至于为什么我想要一个关于禁用的菜单项的提示,我只想说我与Joel达成协议.

所有TMenuItem都有一个提示属性,但我最好告诉他们只使用TApplicationEvent.OnHint事件处理程序将提示粘贴在TStatusBar或其他一些特殊处理中.我发现了一篇关于如何为TMainMenu的TMenuItems创建自己的窗口的文章,但它不适用于TPopupMenu的TMenuItem.它的工作原理是处理WM_MENUSELECT消息,据我所知,它不是在TPopupMenu上发送的.

delphi user-interface tooltip delphi-2007

6
推荐指数
1
解决办法
4816
查看次数

Windows服务:在指定时间工作(Delphi)

只需检查编写Windows服务时是否有任何最佳实践.

服务(单线程)需要按指定的时间间隔工作,现在我只能想到:

  1. 使用sleep(),然后检查循环中的时间?
  2. 使用TTimer?

有什么建议?

windows delphi winapi

6
推荐指数
2
解决办法
4151
查看次数

需要更改的用户界面范例?

通常,约定是用户界面最重要的设计考虑因素之一.通常建议就像微软那样做.

这有三个原因:

  1. 如果没有损坏,请不要修理它.
  2. 如果您的用户希望单击软盘图标进行保存,请不要更改图标(即使其中一些可能从未见过实际的软盘).
  3. 用户不希望使用他们使用的每个不同应用程序重新学习界面(和热键等).

与此同时,Emmerson说:" 愚蠢的一致性是小脑袋的大人物.*"那么,什么时候保持一致的用户界面从一个好主意到停滞不前的创新?

微软通过引入工具栏,然后再使用功能区控件(这是工具栏的自然演变,不管你喜不喜欢)来震撼好旧的WIMP GUI.现在我们到处都看到了丝带.

所以我的问题是,什么是一些用户界面范例,这些范例在多个应用程序中被接受和保持一致,但是它们已经过了巅峰并且开始变得黯然失色?是否有一些重要的变化可以从开发人员的基层推动中受益,以创新和改善用户的用户界面体验?

我想到的一个想法是模态弹出对话框.你知道说的那些:"你确定要.. - [是] [否] [关闭] [也许]."和它邪恶的双胞胎"成功完成你想做的事[OK]!".我们看到在浏览器中使用"信息面板"远离这些运动.我认为它们也需要在Windows应用程序开发中采用.

如果可能,请为每个陈旧的UI项目列出解决方案.

请不要列出clippy.我们都知道他是个坏主意.

注意:这是Windows客户端用户界面范例,但我肯定愿意从网络,Mac等中汲取灵感.

user-interface innovation

6
推荐指数
3
解决办法
3471
查看次数

同构开发平台是否适合行业发展?

一个框架,浏览器或语言赢得战争并成为事实上的标准,是否符合软件开发行业的最佳利益?一方面它消除了跨平台的挑战,但它为单点故障打开了它.它是否也会导致创新停滞,或者是否会让行业专注于更重要的事情(无论那些可能是什么).

cross-platform

5
推荐指数
1
解决办法
478
查看次数

Delphi中动态数组的最大长度?

我很好奇动态阵列有多长,所以我试过了

SetLength(dynArray, High(Int64));
Run Code Online (Sandbox Code Playgroud)

它的值为9,223,372,036,854,775,807,我认为这是我可以参考的最大索引数.它给了我一个:

带有消息'范围检查错误'的ERangeError.

所以我尝试过:

SetLength(dynArray, MaxInt); 
Run Code Online (Sandbox Code Playgroud)

并得到了同样的错误!

有趣的是我可以称之为

SetLength(dynArray, Trunc(Power(2, 32));
Run Code Online (Sandbox Code Playgroud)

这实际上是MaxInt大小的两倍!

我试过了

SetLength(dynArray, Trunc(Power(2, 63) - 1));
Run Code Online (Sandbox Code Playgroud)

这与High(Int64)相同,但也失败了.

没有继续尝试和错误,有人知道最大尺寸?它取决于数组中元素的大小吗?

我正在使用Delphi 2009.对于不同的版本会有所不同(显然当Commadore出来时它应该更大!)

delphi delphi-2009

5
推荐指数
2
解决办法
1万
查看次数

完整的XML模式验证

我正在寻找一个能告诉我所有 XML Schema验证失败的工具.我看过的所有其他工具只是告诉我第一对,然后我必须先解决这些问题,然后再告诉我下一个错误.我意识到某些错误可能依赖于处于不同顺序的其他节点,但是即使节点的顺序错误,也应该能够报告格式错误的数据类型之类的内容.

我已经在这里查看了其他工具的其他问题建议,并且在第一次失败后它们都停止了.因此,如果其中一个工具能够满足我的需求,那么请让我知道实现这一目标的步骤.

一个编程库或技术可以让我在.NET或Delphi中这样做.

.net xml delphi schema xsd

5
推荐指数
1
解决办法
1183
查看次数

被释放的句柄以某种方式被破坏了?

奇怪的问题.也许有人可以提供一些见解.

  • 场景1.我在内存中有一个写入的TBitmap,同时进行复杂的计算以计算每个像素的颜色.每隔一段时间(通常在填充位图的每条水平线之后)TBitmap都会被绘制到窗体上的图像(image1.Canvas.Draw(0,0,TBitmap).大部分时间这都工作正常,但我注意到了如果每个位图行有很多缓慢的复杂计算(比如计算时间超过30秒或一分钟),那么主表单会有一个瞬间"闪烁",以某种方式擦除位图,因此image.draw调用只绘制最新计算的行和前y行在位图中被消隐.我通过在计算之前锁定位图来解决这个问题.

  • 情景2. 这是主要的麻烦.我写的是TMemoryStream而不是位图.同样的交易.进行计算以计算每个像素值,然后在处理过程中使用memstream.Write(bytevalue,1)将每个像素值写入TMemoryStream.在所有计算结束时,我使用memstream.SaveToFile('whatever.bmp')将流保存到位图,然后使用memstream.Free释放流.如果计算速度很快,那么无论大小如何,流都会保存(我正在使用10000x10000尺寸进行测试).

我甚至可以判断生成的文件是否会损坏,因为主应用程序窗口/窗体确实有轻微的闪烁,就像它被重新绘制一样.当发生这种情况时,就好像每个位图和TMemoryStream句柄都被杀死/刷新,因此现有数据已损坏.

有任何想法吗?这真的很糟糕.特别是当每个单个图像可能需要一个小时来创建时才发现它在后台发生了某些事情并且损坏了位图或TMemoryStream.

我有没有办法像位图一样锁定TMemoryStream句柄?这可能有所帮助.或者一些声明告诉Delphi"不要弄乱我的对象,即使看起来应用程序花了太长时间"

或者有没有人知道Delphi中导致这种情况发生的后端原因.

TMemoryStream是在执行所有计算的过程内创建的,因此是本地对象.对于位图问题,位图是程序之外的全局变量,它发生了,所以我不认为这是原因.

这也是在Windows 7下,但我注意到Vista下的原始位图问题.

更新1:

很抱歉没有使用评论,但有文字大小的重新提交...

回复雷米(和其他读这篇文章的人)......

单线程.对于内存流,如果计算速度很快,它可以在5000x5000分辨率下正常工作,但如果cals很慢则会失败.

作为一个基本框架,代码是沿着的

SetupMemorystream; 
for y:=0 to height do 
   for x:=0 to width do 
      DoCalcs;
      SetByteValue; 
   end; 
end; 
SaveStream; 
Run Code Online (Sandbox Code Playgroud)

如果DoCalcs相对快速,那么一切都按计划进行.如果它很慢,那么我得到了TMemoryStream损坏,并且流保存到的结果位图已损坏.

这与使用内存TBitmap相同,直到我发现我可以锁定位图,这会阻止Delphi和/或Windows在"想要"时重新分配新句柄,从而破坏位图内的数据.

考虑到TMemoryStream及其句柄没有发生同样的问题,这太巧合了.

更新2:

还有一点可能是有用的信息.

当TMemoryStream保存OK时,生成的文件(对于5000x5000位图)的大小为75,000,054字节.

当保存的流损坏时,它似乎是一个随机值(从句柄损坏到保存流的大小).示例大小为22 MB和9 MB.

当我查看生成的文件是一个十六进制编辑器时,它显示文件的开头是正确的标题块,但尾部以某种方式被截断.

这太离奇了.无论如何,我可以绝对确保在SaveToFile调用之后和释放它之前刷新TMemoryStream?

delphi handles

5
推荐指数
1
解决办法
329
查看次数

好的Delphi Prism在线资源

在"德尔福棱镜","德尔福棱镜资源"或"德尔福棱镜的代码片断"兜底几乎没有什么好的网站在所有有没有什么好的编程网站()有一些不错的量的代码段和教程德尔福棱镜谷歌搜索?

提前致谢!

delphi oxygene delphi-prism

5
推荐指数
1
解决办法
1450
查看次数

嵌入iBook时,为什么有些小部件元素没有显示?

我在Dashcode中创建了一个小部件.它有一些按钮,文本字段和文本.从Dashcode运行或安装到仪表板时,它可以正常工作.当我将它安装到iBook(通过iBooks Author)并在iPad上运行时,按钮和文本都会消失(以及一些其他轻微的视觉变化).有趣的是,如果我点击一些按钮的位置,它会调用按钮点击事件,但其他按钮不起作用.此外,当按钮单击事件更新文本的值时,该文本将变为可见.

我尝试了GlassButtons和常规按钮,都没有显示出来.我检查了工作按钮的属性与不工作的按钮的属性,它们似乎是相同的(超出id和值).

以下是在Mac上运行的屏幕截图:

Mac上的小部件的屏幕截图

以下是我在iPad上运行iBooks的屏幕截图:

在Mac上的iBooks中的小部件的屏幕截图

注意8更新了文本值的位置.当您点击正确的位置时,连接和更新按钮可以工作,但其他按钮都不起作用.

作为旁注,此小部件使用RemObjects SDK for JavaScript通过网络连接到Web服务,这非常酷.如果我可以让按钮显示,Web服务可以工作.

更新:我替换了<div>Dashcode用于带有实际HTML的按钮的标签,该标签<input type="button">显示在iBook中.文字仍未显示.它也是一个<div>.

html5 dashcode ipad ibooks

5
推荐指数
1
解决办法
1574
查看次数

如何定义允许枚举值或模式匹配的模式限制?

我正在定义一个simpleTypea restriction要么是a的值,要么是enumeration匹配a的值pattern.我意识到我可以从中做到这一切,pattern但我想要enumeration提供所提供的选项列表.

这是我期望能够做到的:

<xs:simpleType name="both">
  <xs:restriction base="xs:string">
    <xs:enumeration value="one" />
    <xs:enumeration value="two" />
    <xs:pattern value="[0..9]+" />
  </xs:restriction>
<xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

但由于某个值无法与两个约束匹配,因此失败.如果我修改模式以允许任何枚举值,那么如果只匹配模式,它将失败.

regex xsd

5
推荐指数
1
解决办法
2773
查看次数