小编Ale*_*lex的帖子

如何清理字符串以用作文件名?

我有一个例程,可以将文件转换为不同的格式并保存.原始数据文件已编号,但我的例程根据原始文件中的内部名称为输出提供文件名.

我试图在一个完整的目录上批量运行它,它工作正常,直到我点击一个内部名称中有斜杠的文件.哎呀!如果它在这里,它可以很容易地在其他文件上.是否存在RTL(或WinAPI)例程,它将清理字符串并删除无效符号,以便可以安全地用作文件名?

delphi validation filenames sanitization

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

Google Play App的HTML动态徽章

假设我想在网站上写一些文章,并发布指向所讨论的Android应用程序的链接(可在Google Play上找到).

是否有标准方法为此应用程序创建"徽章",显示应用程序的名称,图标,描述,评级,下载/安装计数?像这样的东西:

Goole Play中的Android应用程序

或这个:

移动搜索中的Android应用程序

或这个:

Google搜索中的Android应用

我找到了Google Play徽章生成器,但这个"徽章生成器"没有做任何特别的事情,它只是一个虚拟静态图像.除此之外,我找不到任何东西.

html formatting android google-play

25
推荐指数
2
解决办法
1727
查看次数

Delphi中的Guard页面异常?

有一篇由Raymond Chen 撰写的文章,他通过吃护页异常来讲述IsBadXxxPtr功能有多糟糕.

我不太明白它是如何应用于Delphi的.谁和如何正常(即不调用IsBadXxxPtr)处理此异常?我知道Delphi插入一个代码(例如)访问大型静态数组的内存 - 正是出于这个原因:扩展堆栈.

但是如果提出了防护页面异常:谁将在Delphi应用程序中处理它?我不能用不合适的方式使用try/except来意外地弄乱它吗?Delphi的调试器会通知我这些异常吗?

delphi exception

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

应用程序的单元最终确定顺序,使用运行时包编译?

我需要在完成SysUtils单元后执行我的代码.

我已将我的代码放在单独的单元中,并将其首先包含在dpr-file的uses子句中,如下所示:

project Project1;

uses
  MyUnit,    // <- my separate unit
  SysUtils,
  Classes,
  SomeOtherUnits;

procedure Test;
begin
  //
end;

begin
  SetProc(Test);
end.
Run Code Online (Sandbox Code Playgroud)

MyUnit看起来像这样:

unit MyUnit;

interface

procedure SetProc(AProc: TProcedure);

implementation

var
  Test: TProcedure;

procedure SetProc(AProc: TProcedure);
begin
  Test := AProc;
end;

initialization

finalization
  Test;
end.
Run Code Online (Sandbox Code Playgroud)

请注意,MyUnit没有任何用途.

这是通常的Windows exe,没有控制台,没有表单,并使用默认的运行时包进行编译.MyUnit不是任何软件包的一部分(但我也尝试过使用它).

我希望MyUnit的finalization部分将在SysUtils的finalization部分之后执行.这是德尔福的帮助告诉我的.

然而,这并非总是如此.

我有2个测试应用程序,它们在使用中列出的Test例程/ dpr文件和单元中的代码略有不同.但是,MyUnit在所有情况下都列在第一位.

一个应用程序按预期运行:Halt0 - > FinalizeUnits - > ......其他单位...... - > SysUtils的终结 - > MyUnit的终结 - > ......其他单位......

但第二个不是.在SysUtils完成之前调用MyUnit 的终结.实际的调用链如下所示:Halt0 - > FinalizeUnits - > …

delphi packages finalization delphi-2010

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

对Delphi XE的任何想法都可以随意加载设计包吗?

我已经创建了一个包含组件注册的设计包(组件本身在运行时)和一些IDE菜单项.

如果我从项目经理单击上下文菜单中的"安装"菜单项 - 包将被加载并正常工作(始终).

如果我关闭IDE并重新启动它 - 可能已加载包或可能未加载包.随机看似.但它通常不会加载,而不是加载.

如果我去组件/安装包 - 我在列表中看到我的包,复选框被选中,"组件"按钮显示我的包中的组件,但包的可执行文件本身甚至没有在IDE中加载!(我已通过Process Explorer验证了这一点).重新安装(删除包 - >确定 - >组件/安装包 - >添加 - >确定)没有帮助.但是从项目管理器中的项目的上下文菜单中卸载/安装 - 总是有帮助的.

我已经将OutputDebugString添加到包中每个模块的初始化部分.我发现初始化部分不会运行.

运行时包与设计时包在同一文件夹中.文件夹位于PATH环境变量中.我还尝试将包放在Delphi的Bin文件夹中.没有错误消息.没有奇怪/诊断的OutputDebugStrings.

有任何想法吗?

PS我在两台不同的机器上有这种行为.一个是Win7,另一个是WinXP SP 2.

PPS我无法在Delphi 7上重现这种行为.相同的包,重新编译D7总是加载.

delphi delphi-xe

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

投票系统/引擎为客户?

我在谈论一些像http://uservoice.com/这样的网站的东西 你能建议任何其他类似的服务,网站或者可能(甚至更好)在自己的服务器上部署的现成引擎吗?

实际上,更多关于系统的问题,可以安装在您自己的服务器上.

feedback voting

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

FastMM4说"块头已被破坏"

我有这个令人讨厌的虫子在过去消失了,但现在经过一段时间它又回来了.

我有两个TSam对象(派生自TPersistent)创建并加载到TAsmJob对象(从TObjectList派生).

在运行时,表单创建一个TStringGrid,然后创建AsmJob,它创建这两个SAM对象(并从每个对象的磁盘加载一些数据).AsmJob也被分配给网格.当表单被销毁时,Grid通过释放它来处理AsmJob,从而释放TSam对象.这是问题所在:第一个对象没有问题,但第二个对象在调用其继承方法(在Destroy析构函数中)时会死掉.

我在整个程序中使用FreeAndNil来释放对象.TSam对象不是NIL !!!!! 所以,这是第一次释放对象的尝试.甚至对象内部的数据也是一致的.

该计划的主干如下:

**Create:**

Form -> StringGrid
     -> AsmJob -> Sam1, Sam2
StringGrid.AsmJob:= AsmJob;


**Free:**

Form -> StringGrid -> AsmJob -> Sam1, Sam2
Run Code Online (Sandbox Code Playgroud)

我真的不明白在它被释放后我试图双重释放或覆盖对象的位置.


编辑:

我得到的一些错误:

  • FastMM在空闲块扫描操作期间检测到错误.FastMM在释放后检测到块已被修改.

  • FastMM在空闲块扫描操作期间检测到错误.块头已损坏.

详情:

The current thread ID is 0x19C, and the stack trace (return addresses) leading to this error is: 
402E77 [System][@FreeMem] 
4068DC [System][@DynArrayClear] 
405E2D [System][@FinalizeArray] 
405D31 [System][@FinalizeRecord] 
40432F [System][TObject.CleanupInstance] 
404272 [System][TObject.FreeInstance] 
404641 [System][@ClassDestroy] 
4D313E [UnitSam.pas][TSam.Destroy][297] 
4042BF [System][TObject.Free] 
4149ED [SysUtils][FreeAndNil] 
4D9C0A [UnitAsmJob.pas][UnitAsmJob][TAsmJob.Destroy][180]  
Run Code Online (Sandbox Code Playgroud)

我在IDE中启用了所有"调试"选项,包括"范围检查".此外,FastMM4设置为超级激进的调试模式.如果没有FastMM或者在调试器之外,程序运行得很好 - 但我知道这并不意味着错误不再存在.实际上它(可能)工作了一年多,直到我安装了FastMM.


编辑:

感谢大家.不,我感觉我正朝着好的方向前进.

程序的结构更复杂我只提供了保持原始帖子小的骨干.但是,它已经变大了:)所以,那些TSam对象用于从磁盘加载数据.每个对象中有一个文件.他们还在进行一些处理和数据验证.对于这些TSam中的每一个,我还有一个图形对象,在屏幕上(图形地)显示TSam对象中包含的数据.TStringGrid中的每一行也以TSam显示数据,但是以文本方式显示.

我有一个问题:如果我以较小的碎片打破程序以找出错误的位置,错误仍会出现?或者只能在此特定配置中出现?


回答"如何将AsmJob分配给TStringGrid,以便TStringGrid破坏AsmJob,你能告诉我们吗?" …

delphi delphi-7 fastmm memory-corruption

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

如何在"mailto"协议中使用unicode?

我想通过ShellExecute函数启动默认的电子邮件客户端应用程序.

即我写这样的东西:

ShellExecute(0,'mailto:example@example.com?subject = example&body = example',...);

如何在主题和正文中编码非美国字符?

我不能使用默认的ANSI代码页,因为字符可以是任何东西:汉字,西里尔字母或其他东西.

PS备注:

  1. 我正在使用ShellExecuteW函数.
  2. "按原样"保留主题和正文将无效(使用Win7上的Windows Live Mail客户端和WinXP上的Outlook Express进行测试).
  3. 将主题编码为URLEncode(UTF8Encode(主题))将适用于Windows Live Mail,但不适用于Outlook Express.
  4. URLEncode(UTF8Encode(Body))不适用于两个客户端.

mailto unicode winapi

3
推荐指数
1
解决办法
2452
查看次数

检测AQTime下运行?避免崩溃调试代码

我在AQTime中使用了Performance Profiler.尝试在IDE下运行它(使用Embarcadero RAD Studio XE).检查过这些代码的项目崩溃:

// Setting a Thread Name (Unmanaged):
// http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.71).aspx
procedure _NameThreadForDebugging(const ATID: Cardinal; const AThreadName: String);
type
  TThreadNameInfo = record
    FType: LongWord;     // must be 0x1000
    FName: PAnsiChar;    // pointer to name (in user address space)
    FThreadID: LongWord; // thread ID (-1 indicates caller thread)
    FFlags: LongWord;    // reserved for future use, must be zero
  end;
var
  ThreadNameInfo: TThreadNameInfo;
  ThreadName: AnsiString;
begin
  // Applicable only for debugged applications
  if IsDebuggerPresent then
  begin
    FillChar(ThreadNameInfo, SizeOf(ThreadNameInfo), 0);

    ThreadName …
Run Code Online (Sandbox Code Playgroud)

delphi aqtime

3
推荐指数
1
解决办法
297
查看次数

Delphi 2006 system.delete for widestrings?

删除程序的对应部分是否可以用于宽字符串?或者我应该只使用复制并连接生成的WideStrings?

delphi unicode delphi-2006 widestring

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