小编lke*_*ler的帖子

PHP中32到64位的"Gotchas"

上周末我改变了网站的webhosts.我所使用的主机服务器是32位操作系统,我移动的主机服务器是64位操作系统.出乎意料的是,我的一些PHP脚本开始提供不正确的结果.

在我的情况下,<<和>>(位移)操作是罪魁祸首.我最终不得不用0xFFFFFFFF掩盖结果,然后改变结果,如果它为负,它就像以前一样工作.

我应该寻找我的PHP脚本中是否还有其他可能存在的问题?

php 32bit-64bit

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

使用Delphi查找系统字体

找到用户可用的所有系统字体的最佳方法是什么,以便它们可以显示在下拉选择框中?

我还想区分Unicode和非Unicode字体.

我正在使用完全支持Unicode的Delphi 2009,并且想要一个Delphi解决方案.

delphi unicode fonts delphi-2009

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

用于面部识别和标记的Delphi组件

是否有任何可用于Delphi的免费或商业组件(我使用Delphi 2009),这将允许我轻松实现照片(即图形/图像)中面部的面部检测和标记?

我需要做一些类似于Google Picasa的网络相册可以做的事情,但是在我的应用程序中.

delphi image-processing face-detection photo-tagging

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

为什么ADO Next记录处理在Delphi中变慢?

我有一个多年前开发的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方法顺序处理记录.

那么为什么它会变慢,我怎么能重新编码它以免它变慢?

delphi performance ado

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

什么是1055德尔福错误,这是重要的吗?

我正在使用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'部分.它一直在那里.我不是组件开发人员,我真的根本不明白这个消息的含义,它是否真的是一个问题,以及我应该或不应该做些什么.

这是重要的,如果是这样,我该怎么做才能解决它?或者我应该忽略它?

delphi multithreading

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

如何在Delphi的菜单栏中添加TLabel?

我使用Beyond Compare(一个很棒的程序),当它在菜单栏上显示"New Version Available"标签时给人留下了深刻的印象.我点击它,弹出一个安装新版本框,它安装,程序重新启动自己,有新版本,没有更多的标签.

我认为这是一个很棒的功能.标签位于菜单栏上的显着位置,用户不会错过它.我已经有了更新程序,所以我所要做的就是添加标签.这应该很容易.

这是我想要的标签: 标签我想要的地方http://www.beholdgenealogy.com/img/tlabel.jpg

......错了.我无法弄清楚如何在那里添加标签.菜单栏和其上方的控制区域似乎是可视组件的手动区域.我不能在那里放一个.

但我知道它可以做到,因为Beyond Compare是一个Delphi程序.

任何人都可以告诉我,我必须做什么才能将TLabel放入我的菜单栏或至少让它看起来在菜单栏上方的正确位置?

作为参考,我使用Delphi 2009.


结论:克里斯托弗似乎已经正确地弄清楚Beyond Compare人员做了什么.我决定实现菜单项,但没有定制他的"所有者绘制"解决方案.所以我没有得到蓝色粗体下划线超链接外观,但我也没有丢失所有者绘制跳过的所有自动内容(如Vista样式).

为了将菜单项分隔到右侧,我在"帮助"后面添加了一个带有标题""并禁用的项目.

谢谢,克里斯托弗.我被困在认为它必须是一个标签,但你看到了那个.

delphi user-interface label vcl

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

为什么我的光标在Delphi的FindDialog中没有变成沙漏?

我只是打开我的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 cursor hourglass finddialog

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

这是什么?"TList在Delphi中不包含名为...的成员"

我在我的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)

任何人都可以解释这个消息是什么,以及我可以做些什么来解决它?

delphi generics

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

如何在Delphi中处理带空格的参数?

我的程序接受输入文件名作为命令行参数或在拖放操作中,或通过单击与我的程序关联的扩展名的文件名接受输入文件名.

命令行和拖放工作正常,但它点击资源管理器中的文件名,当单击文件的文件路径中有空格时会导致问题,例如:

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)

我怎样才能最好地将这些重新组合成我需要的三个文件名?

delphi filenames associations paramstr

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

如何使用Delphi实现突出显示的工具栏图标?

当他们的相关操作将其"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 user-interface menu toolbar

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