首先,我要说我在Windows Vista和Windows 7中憎恶这个功能.其次,我想这样做. 这是一个问题,询问如何在WPF中执行我想要的操作.
我想做同样的事情,但在Delphi中,使用VCL库存组件,TMainMenu或Action Manager菜单,或一些可用的第三方组件,甚至Toolbar2000或其他一些库.
Windows Vista/Windows 7资源管理器主菜单的功能:
(*Windows资源管理器热键示例:Microsoft Windows资源管理器中的Ctrl + A即使菜单不可见也会选择所有菜单,Alt + T =调出工具弹出菜单,即使隐藏整个菜单也是如此).

更新:可以在此处下载使用已接受答案的演示.(HiddenMenu.zip)
我很困惑Delphi 2009/2010对Windows中Aero Theme Glass功能的支持,以及DoubleBuffered的含义,以及与Aero glass有什么关系.我发现DoubleBuffered不仅是VCL中的一个属性,它也可以在.net WinForms中找到.最初我想知道它是否设置了公共控件库使用的某种窗口样式位,或者是什么.它为什么使用,何时使用?
[更新:我应该说我知道什么是"双缓冲",作为减少闪烁的一般技术,我想知道的是,为什么它与在Windows Vista中的Aero Glass窗格上渲染控件有任何关系? Windows 7,特别是为什么所有东西的按钮需要双缓冲设置为真,才能在玻璃上工作?下面链接的博客文章似乎最有用.]
特别是,我对DoubleBuffered属性感到困惑,我想知道它为什么存在,以及它在窗体和控件中的玻璃支持和双缓冲属性之间的关系是什么.当您阅读像这样的C++文章时,您会发现没有提到双缓冲.
[更新2:以下内容包含一些事实错误,并已修改:]
我发现一些C++开发人员正在讨论他们如何调用SetLayeredWindowAttributes以避免DWM/Aero合成导致的"黑色变成玻璃"故障,当你在经典的Win32应用程序中打开它时[但是下面的博客链接告诉我这不再起作用在Windows 7中,实际上只在Vista中短暂工作,直到微软阻止它].[开始错误的想法]我们不应该使用其他颜色,如明亮的洋红色,并使其变成玻璃透明色?[结束错误的想法]
什么时候应该设置和不设置DoubleBuffered的规则,以及为什么DoubleBuffered首先添加到VCL?设置什么时候会引起问题?(看来远程桌面是一种情况,但这是唯一的情况吗?)当它没有设置时,我们会搞清楚按钮文本的渲染,很可能是因为看起来Delphi没有改变默认的"渲染黑色如玻璃"在Aero DWM中.
在我看来,Aero Glass渲染基本上是以奇怪或难以理解的方式进行的[由Windows本身,而不是仅仅包含此功能的Delphi],以及2009/2010年的许多内部VCL源代码StdCtrls中的类必须做很多复杂的逻辑才能正确地在Aero Glass上呈现内容,但它仍然存在很多问题,并且看起来像是错误的,并且这可能是这个相关问题和qc问题的背后. [更新3:玻璃上的很多渲染故障,在VCL中在常见控件中渲染错误,看起来,微软并不关心修复.简而言之,Delphi VCL代码修复无法解决这样一个事实:古老的Windows通用控件库和现代[但奇特的] Aero Glass合成功能彼此不太相似,并且不能特别合作.感谢微软建立如此高质量的技术,并将其释放到世界各地.
如果它还不够有趣; 为什么我们有ParentDoubleBuffered?
[7月30日更新:这个问题对我很有意思,因为我认为它表明,当你拥有一个庞大的现有VCL框架时,使用Windows API解决这个问题是一个很难的问题.
在不破坏现有编译器的情况下,在Ubuntu 11.04上获取最新C++ 11编译器的最简单方法是什么.我更喜欢预先构建的包而不是自己编译整个工具链.
我正在研究delphi 7,我正在研究一个字符串,我遇到了这个
对于一个默认长度的字符串,即简单地声明为字符串,max size始终为255.永远不允许ShortString增长到超过255个字符.
一旦我必须在我的delphi代码中做这样的事情(这是一个非常大的查询)
var
sMyStringOF256characters : string;
ilength : integer;
begin
sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
//length of sMyStringOF256characters is 256
end;
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
[错误] u_home.pas(38):字符串文字最多可包含255个元素.
但是当我试试这个
var
iCounter : integer;
myExtremlyLongString : string;
begin
myExtremlyLongString:='';
Label1.Caption:='';
for iCounter:=0 to 2500 do
begin
myExtremlyLongString:=myExtremlyLongString+inttostr(iCounter);
Label1.Caption:=myExtremlyLongString;
end;
Label2.Caption:=inttostr(length(myExtremlyLongString));
end;
Run Code Online (Sandbox Code Playgroud)
结果是

如您所见,myExtremlyLongString的长度为8894个字符.
为什么delphi没有给myExtremlyLongString提供长度超过255的错误?
编辑 我用过
SetLength(sMyStringOF256characters,300);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
从远古时代开始,如果您运行Web浏览器可执行文件,大多数Web浏览器都能够打开本地文件,例如只执行iexplore.exe file:/c:/temp/file或通过IShellDocView接口.我试图在我自己的程序中使用Microsoft Edge在Windows 10中执行此操作,并且我不知道如何执行此操作.
可执行文件似乎完全没有文档,没有响应/?或者/ help,无论我传递给它什么都会崩溃,并且考虑到路径似乎可能会改变,可能不是直接调用此可执行文件的正确方法:
C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\MicrosoftEdge.exe <whatever>
Run Code Online (Sandbox Code Playgroud)
Windows中是否有一个可以调用的API,它会打开Edge,即使它不是当前的默认浏览器?
如果它是默认的浏览器,我相信我可以通过Win32 shell-API做我想要的ShellExecute.我希望能够在Edge中启动一些东西,即使我已经将另一个浏览器设置为我的默认浏览器,以便自动执行某些Web测试任务.
是否有Edge的编程接口或API?出于这个问题的目的,让我们说我想用C语言写这个,但无论我使用什么语言都应该是相同的API,所以我没有标记这个问题C.
如果无法以编程方式执行此操作,是否可以使用命令行参数并传递给MicrosoftEdge或MicrosoftEdgeCP可执行文件?
StackOverflow上有几个问题似乎有关于ADO/OleDB,delphi TADOQuery/TADOCommand和参数主题的相互矛盾的答案.
可以在ADO组件的CommandText或SQL属性中以两种方式引入参数.大多数时候都为我工作的命名参数是用冒号引入的:
select a, b, c from bar where bat = :baz
Run Code Online (Sandbox Code Playgroud)
这对99%的时间对我有用,就好了.偶尔我会发现ADO或Delphi的包装器不会接受":baz"并要求我写这个:
select f, g, h from bar where bat = ?
Run Code Online (Sandbox Code Playgroud)
这会生成一个未命名的参数,而不是命名参数.当ADO查询或ADO命令只包含一个参数时,这不是什么大问题.但是当ADO对我不利时,情况并非如此.昨天它采取了一种方式,今天,在单个TADOCommand对象中使用双命令的另一种方式,就像这样,在一个CommandText字符串中有两个命令:
delete from bar where id = :id1
delete from bat where id = :id2
Run Code Online (Sandbox Code Playgroud)
我不得不改变它:
delete from bar where id = ?
delete from bat where id = ?
Run Code Online (Sandbox Code Playgroud)
它整天都在工作.今天,我不得不将其改回第一版,以使其发挥作用.症状是ADO参数消失了,不会再回来,当我尝试执行命令时,我得到一个错误,索引超出范围,当我尝试访问时Parameters[0].什么都没有给我任何关于参数消失的警告.似乎在ADO数据集的一些连接,在设计时TADOCommand,尤其是对组件进行慢跑,它"只是打破了我".当你尝试编写查询或命令时,它特别令人抓狂,你知道它有效,但是ADO组件决定不接受"?" 或":x"现在.你可以通过从一个切换到另一个来解决它无法运行的问题.但它让我感到沮丧,可能实际上完全阻止了其他人.我知道有些人总是在代码中动态构建SQL,并且避免使用Parameters,也许这就是原因.
我期待的问题的可能答案是:
ADO不支持多个命令,或者至少Delphi的包装器不支持.或者也许TADOCommand只是在这里不可靠.
参数是所有ADO中的错误区域,还是所有Delphi的ADO包装器?
你这样做是错的.
我正在使用Delphi XE2,但我在2007,2009,2010和XE中看到过类似的狡猾行为.我正在使用Microsoft OLEDB Provider for SQL Server作为我的OLEDB Provider.
我希望实现一个连续的单元测试运行系统,我听说称之为"冒烟"或"tinderbox",(一个构建服务器,可以执行干净的版本控制检查以及给定源存储库中所有内容的完整系统构建或使用Delphi,小团队的"持续集成"之类的东西.
我不愿承诺商业"构建服务器"产品,我希望我可以通过内置于delphi中的MS-Build支持做很多事情.
我正在寻找资源,想法和开始的地方.我不知道如何使用MS Build来达到这个目的. Steve Trevethen有一个博客文章,引用了对旧的dcc32命令行构建的一些讨论,并且一些评论提到ms-build自delphi 2007以来一直在这里.我正在使用Delphi 2010.我正在寻找指导和见解,以及经验,这将告诉我,这是一条合理的道路,如果没有,我应该走哪条路?
我发现你可以使用/ p:DCU_DcuOutput =覆盖msbuild命令行中的Unit(DCU)和EXE Output Directory.请注意,我查看了DPROJ文件中的XML,以了解如何覆盖内容.
但是,它只执行make,而不是构建,并且/ t:rebuild不起作用(编辑:是的.它在DPROJ文件上工作正常,但在GroupProjects上没有.)
我希望在那里有更多的MSBuild-with-Delphi文档?"Rad Studio 2010"产品文档中的MS-Build帮助显示了有关MS-Build的一两件事,但实际上是粗略和不完整的.
相关问题:
经典的Springs和Struts,又名"Anchor and Align",或"Autosizing mask",是我理解的唯一一种调整大小管理.然而,在XCode 4.6中,使用iOS 6中引入的约束的"autolayout"是默认的,它使某些简单的事情变得更难,同时一旦你学会如何,就可以使整个世界的新安排成为可能. (要清楚的是,一些用户可能只关心在没有对抗自动布局战斗的情况下使用简单的视图,因此Matt早期提出了关闭Autolayout的解决方法,以下转载)
iOS 6 Layout Constraints,Interface Builder系统的编辑约束,我不明白.

在XCode Interface Builder自动创建约束的地方(例如在视图的边缘),它似乎以我理解的方式运行.
我不明白为什么在这里显示的.xib,也可以在这里找到,为什么我不能让绿色和洋红色区域保持一个恒定的边界(它们之间的白色区域),它们不会变厚,也不会变薄,无论视图大小发生什么变化.
这意味着我需要绿色区域不要垂直调整大小并且只是水平调整大小,但是它坚持将自己锚定到窗体的底部,虽然从一个新的空白笔尖再次开始,将恢复界面构建器,因此它会注意到邻接再次看到绿色和洋红色的视图,一旦界面构建器变得"愚蠢",它坚持只根据它与父视图底边的距离来定义绿色视图的底边,并且不会(对于任何数量的摆弄)否则使用仅仅是拖放操作.我还尝试了Pin命令,但没有找到有效的pin命令.
与界面构建器菜单或拖放相比,没有多少打架似乎就足够了,让它放弃其中一个约束.我无法弄清楚我应该做什么.删除约束?怎么样?根据我可以看到,无论是从IB对象窗格还是从实用程序 - >大小检查器,都无法删除约束.有一个删除选项,但在单击约束区域中的"齿轮"图标按钮时出现的下拉菜单中显示为灰色.
理想情况下,如果绿色区域随着视野变宽而调整大小,我会喜欢它,但不是因为它变得更高或更短.我认为这在其他所有工具中都是显而易见的,但在XCode + Autolayout中,它要么根本没有调整大小,要么在所有四个方向上调整大小.我无法删除或删除正在做我不想做的事情的约束.您是否必须对另一个视图中的每个视图有四个约束?
(更新1:您无法删除任何会导致模糊或未指定布局的约束.)
(更新2:有时如果uiview窗格不会捕捉到兄弟,删除该uiview并再次尝试将允许它自然地"捕捉"到兄弟,并且约束将相对于兄弟视图对象而不是父母.)
(更新3:马特删除了他的解决方法,我在下面复制了.)
对于那些首先不想要Autolayout的人,以及那些只想要旧弹簧和支柱的人的解决方法:
我试图让Windows 8.1识别我一直在尝试构建的Delphi XE6应用程序(一个演示程序),让它认识到我的应用程序是Per-Monitor DPI识别的,纯粹是通过Manifest技术.Delphi XE6(以及所有其他类似的最新版本的Delphi)在Project Options中添加了一个易于操作的清单,我已经这样做了.
这是我使用MSDN资源确定的.manifest内容.我怀疑它可能有些不正确.
如果您想尝试此清单,请创建一个空的VCL应用程序,将此内容用作清单,然后添加代码(代码当前附加到我对此问题的答案).
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<!-- Per Monitor DPI Awareness in Windows 8.1 uses asmv3:application + asmv3:windowsSettings -->
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<!-- Dear Microsoft, Don't Lie to Me About What Version of Windows I am On -->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista and Windows Server 2008 -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 and Windows Server 2008 R2 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 and …Run Code Online (Sandbox Code Playgroud) 在Delphi 7中,包含一个图像编辑器程序,它可以读取和写入.dcr 文件,这些文件只是.res具有不同扩展名的二进制资源文件(文件),按照惯例,它表示.dcr文件包含具有命名位图资源的编译资源.具有与组件名称对应的名称(名为TMyComponent的组件的名为TMYCOMPONENT的位图资源).这些位图是用于在delphi组件面板上放置图标的"图标",以及当您在其上放置非可视组件时,在您的表单或数据模块上放置的图标.
快进10年到Delphi XE,我正在尝试使用位图文件和RC文件制作组件图标,并将其构建到.DCR文件,作为Delphi IDE的一部分.
它应该只是在.dpk(包源)文件中添加.Rc文件和这样的声明,如下所示:
{$R mypackageicons.rc mypackageicons.dcr}
Run Code Online (Sandbox Code Playgroud)
包含组件图标的示例.rc文件:
// COMPONENT ICON RESOURCES
TMYCOMPONENT BMP "TMYCOMPONENT.BMP"
Run Code Online (Sandbox Code Playgroud)
但是,我不能让这个工作.当我尝试它时,似乎你得到了一些奇怪的RLINK32错误,并且在borlandmm.dll中崩溃了IDE:
[DCC Error] E2161 Error: RLINK32: Unsupported 16bit resource in file "C:\temp\compicon\COMPONENTICONS.rc"
[DCC Fatal Error] F2084 Internal Error: AV21515155-W06000D07-1
Run Code Online (Sandbox Code Playgroud)
有问题的位图文件是一个简单的256色bmp文件大小24x24像素,我也尝试了16色位图,没有运气.在我看来,ImageEdit程序是我所知道的唯一可用于创建Delphi组件图标的方法.
我错过了什么?
更新:对于那些无法访问Delphi 7图像编辑器的人来说,外部工具是一个不错的解决方案,实际上可能是优秀的,但我更愿意只使用Delphi附带的东西,因为它似乎是应该只使用一个{$ R}声明,一个文本文件和一个用画笔制作的bmp文件.当然,他们并没有省略制作组件图标的方法,这个非常棒的1.5千兆字节开发工具!.. update2:还有一种方法; Rudy V.发现了它.
delphi ×7
delphi-xe ×2
windows ×2
ado ×1
aero ×1
c++ ×1
c++11 ×1
components ×1
composition ×1
delphi-7 ×1
delphi-xe6 ×1
dpi ×1
dwm ×1
gcc ×1
llvm ×1
menu ×1
msbuild ×1
size ×1
string ×1
ubuntu ×1
winapi ×1
windows-10 ×1
windows-8.1 ×1
xcode ×1