上周末我改变了网站的webhosts.我所使用的主机服务器是32位操作系统,我移动的主机服务器是64位操作系统.出乎意料的是,我的一些PHP脚本开始提供不正确的结果.
在我的情况下,<<和>>(位移)操作是罪魁祸首.我最终不得不用0xFFFFFFFF掩盖结果,然后改变结果,如果它为负,它就像以前一样工作.
我应该寻找我的PHP脚本中是否还有其他可能存在的问题?
找到用户可用的所有系统字体的最佳方法是什么,以便它们可以显示在下拉选择框中?
我还想区分Unicode和非Unicode字体.
我正在使用完全支持Unicode的Delphi 2009,并且想要一个Delphi解决方案.
是否有任何可用于Delphi的免费或商业组件(我使用Delphi 2009),这将允许我轻松实现照片(即图形/图像)中面部的面部检测和标记?
我需要做一些类似于Google Picasa的网络相册可以做的事情,但是在我的应用程序中.
我有一个多年前开发的Delphi 4程序,它使用Opus DirectAccess顺序搜索Microsoft Access数据库并检索所需的记录.Delphi 4没有ADO,所以这就是我使用DirectAccess的原因.
但我现在升级到Delphi 2009并将程序转换为使用ADO.我发现通过表(大约100,000条记录)的循环开始时和DirectAccess一样快,但随后它开始变慢,并且当它通过表时变得越来越慢.基本循环是:
ArticlesTable.First;
while not Cancel and not ArticlesTable.Eof do begin
( See if the current record has criteria desired )
( If so, process the record )
ArticlesTable.Next;
end;
Run Code Online (Sandbox Code Playgroud)
所以基本上,它只是使用.Next方法顺序处理记录.
那么为什么它会变慢,我怎么能重新编码它以免它变慢?
我正在使用FindFile例程来搜索目录中的所有文件.原始代码可从Latium Software免费获得.它运行的FindFile是一个单独的Thread.
它一直很好,仍然继续工作正常.但是自从我从Delphi 4升级到Delphi 2009后,它现在给出了一个警告:
W1055: Published caused RTTI ($M+) to be added to type '%s' (Delphi)
Run Code Online (Sandbox Code Playgroud)
错误发生在此线程声明的"已发布"行:
TThread1 = class(TThread)
private
OwnerForm: TFindFileForm;
procedure Initialize;
procedure AddFileName;
procedure Finalize;
protected
procedure Execute; override;
published
constructor Create(Owner: TFindFileForm);
destructor Destroy; override;
end;
Run Code Online (Sandbox Code Playgroud)
德尔福帮助指出:
您在{$ M +}/{$ TYPEINFO ON}开关生效时未编译的类中添加了"PUBLISHED"部分,或者没有派生自使用{$ M +}/{$ TYPEINFO ON}编译的类切换有效.
TypeInfo标准过程需要类型标识符作为其参数.在上面的代码中,'NotType'不表示类型标识符.
要避免此错误,请确保在{$ M +}/{$ TYPEINFO ON}开关打开时进行编译,或者从使用{$ M +}/{$ TYPEINFO ON}开关编译的类派生.
好吧,我没有添加'PUBLISHED'部分.它一直在那里.我不是组件开发人员,我真的根本不明白这个消息的含义,它是否真的是一个问题,以及我应该或不应该做些什么.
这是重要的,如果是这样,我该怎么做才能解决它?或者我应该忽略它?
我使用Beyond Compare(一个很棒的程序),当它在菜单栏上显示"New Version Available"标签时给人留下了深刻的印象.我点击它,弹出一个安装新版本框,它安装,程序重新启动自己,有新版本,没有更多的标签.
我认为这是一个很棒的功能.标签位于菜单栏上的显着位置,用户不会错过它.我已经有了更新程序,所以我所要做的就是添加标签.这应该很容易.
这是我想要的标签: 标签我想要的地方http://www.beholdgenealogy.com/img/tlabel.jpg
......错了.我无法弄清楚如何在那里添加标签.菜单栏和其上方的控制区域似乎是可视组件的手动区域.我不能在那里放一个.
但我知道它可以做到,因为Beyond Compare是一个Delphi程序.
任何人都可以告诉我,我必须做什么才能将TLabel放入我的菜单栏或至少让它看起来在菜单栏上方的正确位置?
作为参考,我使用Delphi 2009.
结论:克里斯托弗似乎已经正确地弄清楚Beyond Compare人员做了什么.我决定实现菜单项,但没有定制他的"所有者绘制"解决方案.所以我没有得到蓝色粗体下划线超链接外观,但我也没有丢失所有者绘制跳过的所有自动内容(如Vista样式).
为了将菜单项分隔到右侧,我在"帮助"后面添加了一个带有标题""并禁用的项目.
谢谢,克里斯托弗.我被困在认为它必须是一个标签,但你看到了那个.
我只是打开我的FindDialog:
FindDialog.Execute;
Run Code Online (Sandbox Code Playgroud)
在我的FindDialog.OnFind事件中,我想将光标更改为沙漏以搜索大文件,这可能需要几秒钟.所以在OnFind事件中我这样做:
Screen.Cursor := crHourglass;
(code that searches for the text and displays it) ...
Screen.Cursor := crDefault;
Run Code Online (Sandbox Code Playgroud)
搜索文本时,光标会正确地更改为沙漏(或Vista中的旋转圆圈),然后在搜索完成时返回指针.
但是,这只发生在主窗体上.它不会发生在FindDialog本身上.搜索期间,默认光标仍保留在FindDialog上.如果我将光标移到FindDialog上进行搜索,则会更改为默认值,如果我将其移出主表单,则会成为沙漏.
这似乎不应该发生.我做错了什么或者需要做些什么来使光标成为所有表格上的沙漏?
作为参考,我正在使用Delphi 2009.
我在我的Delphi 2009程序中添加了一些新的Generics.
在Delphi IDE的Structure窗口中,我收到了一堆表单错误:
'TList` 1' does not contain a member named 'JumpID' at line 1031 (1031:57)
Run Code Online (Sandbox Code Playgroud)
我的声明和线条对我来说似乎很好.而我的程序Builds没有任何错误,运行没有问题.
相关声明是:
uses
Generics.Collections;
type
TLocJump = record
LocID: string;
JumpID: string;
end;
var
LocJumpList: TList<TLocJump>;
CurCursorID: string;
I: integer;
Run Code Online (Sandbox Code Playgroud)
这是消息所指的第1031行:
CurCursorID := LocJumpList[I].JumpID;
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个消息是什么,以及我可以做些什么来解决它?
我的程序接受输入文件名作为命令行参数或在拖放操作中,或通过单击与我的程序关联的扩展名的文件名接受输入文件名.
命令行和拖放工作正常,但它点击资源管理器中的文件名,当单击文件的文件路径中有空格时会导致问题,例如:
c:\temp\file one.txt
c:\my directory\filetwo.txt
c:\my directory\file three.txt
Run Code Online (Sandbox Code Playgroud)
然后,ParamStr函数给了我回复:
ParamStr(1): c:\temp\file
ParamStr(2): one.txt
ParamStr(3): c:\my
ParamStr(4): directory\filetwo.txt
ParamStr(5): c:\my
ParamStr(6): directory\file
ParamStr(7): three.txt
Run Code Online (Sandbox Code Playgroud)
我怎样才能最好地将这些重新组合成我需要的三个文件名?
当他们的相关操作将其"checked"属性设置为true时,我想突出显示我的工具栏图标.我想以类似于Microsoft Office 2003的方式执行此操作,例如,请参阅此图像中的Bold和Align Left图标:

图像用围绕它的框绘制,背景已变为橙色.
我怎么能用Delphi 2009实现这个呢?
作为奖励,还有一种方法可以使用相关项目的菜单中的图标做同样的事情吗?例如,如下所示,标尺和标记条目:

跟进:
谢谢Andreas,我的问题是一个简单而正确的答案.作为Delphi 4程序员转换为Delphi 2009,我对Delphi 5到7的VCL添加不太熟悉,因此TActionManager,TActionToolbar及其工作不在我的Delphi词汇表中.这是基于Delphi使用类似于Microsoft O/S主题的风格的能力.
但是,通过你的回答和使用它的一些研究,我确认我不想以这种方式做到这一点.一个有启发性的Embarcadero线程:弹出菜单:带有图标的"已检查"项目不再显示为凹陷?与Peter Under贡献他的专业知识,让我意识到我根本不想改变XP主题,因为那将为Vista和Windows 7用户做一些事情,让他们回到青铜器时代.
这里真正的罪魁祸首是O/S主题要求您尊重某些事物.德尔福试图遵守规则.我可以回到XP,XP风格/主题和XP Color Map.在此模式下,已检查的项目将被点亮.这就是我想要的 - 突出显示已检查的项目.我以Office 2003为例,因为它是我想要的那种高光.但我真的不想完全改变主题并强迫我的程序焕然一新.对于Vista和Windows 7用户来说,这会让事情看起来不自然.
什么是理想的是如果我可以有另一组图像,当对象被检查时将适用...但没有"CheckedImages"属性.或者,如果选中,则以编程方式或自动修改图像的方式(例如,禁用图像获得其启用图像的灰度版本).
我仍然不介意听到任何人,如果有任何方法可以实现这个或其他可能同样有效的方法,而不改变我的程序的整个外观.
delphi ×9
32bit-64bit ×1
ado ×1
associations ×1
cursor ×1
delphi-2009 ×1
filenames ×1
finddialog ×1
fonts ×1
generics ×1
hourglass ×1
label ×1
menu ×1
paramstr ×1
performance ×1
php ×1
toolbar ×1
unicode ×1
vcl ×1