2017-05-16 33 views
1

在FORMCREATE程序我写:无法找到资源文件的 '权利'

var f: TResourceStream; 
    begin 
    // load data about rights from rights.txt resource file 
    f := TResourceStream.create(Hinstance, 'rights', PChar('RT_RCDATA')); 
    try 
    LoadFromStream(f); 
    finally 
    f.free; 
    end; 

,并得到错误:

Project1.exe raised exception class ERESNotFound with message 'Resource rights not found'. 

如果我改变文件路径 '权利':

'rights.txt'   or 
'D:\Example\rights.txt' or 
'D:\Example\rights' 

我得到同样的错误!

rights.txt文件我在项目文件夹和win32 \ debug \ project1.exe文件夹中找到了这两个文件,但发生了同样的错误。

更新1

PopupMenu with access rights

rights.txt file for loading popupmenu

这将是在rights.txt文件中的这些不确定simbols?

+0

你有t o通过资源编译器或后来的delphi版本将RC数据编译到Res,这可以通过Project,Resources菜单处理,我相信它是,你已经做到了,先不是吗? – Craig

+0

我在“项目” - >“资源和图像”中输入并添加'rights.txt'文件来资源化,但使用后没有行出现在项目文件中。我只看到{$ R * .res},并出现相同的错误。 德尔福版本:10.1柏林 – Delphi159

+0

我已经在项目管理器中看到'rights.txt'文件,但同样的错误出现。 – Delphi159

回答

3

您需要将ResType参数更改为RT_RCDATA,而不是PChar('RT_RCDATA')

f := TResourceStream.create(Hinstance, 'rights', RT_RCDATA); 

RT_RCDATASystem.Types单元定义如下

const 
    RT_RCDATA  = PChar(10); 

所以,你也可以使用它像这样

f := TResourceStream.create(Hinstance, 'rights', PChar(10)); 
+1

如果您要直接指定资源类型而不是使用预定义的常量,则应该使用'MakeIntResource()',例如:'f:= TResourceStream.create(Hinstance,'rights',MakeIntResource(10)) ;' –

+0

我有'rights.txt'文件。在'notapad ++'中我将它重命名为'rights.rc'。然后在“项目” - “资源和图像”中,我将.rc文件添加到项目中,{$ R'rigths.res''rigths.rc'}出现在Project1.dpr文件中。之后按“Ctrl + F9”,我得到一个错误:“源输入中的坏字符”。 'rights.txt文件'中有很多非打印字符,例如:STX,SOH,GS等 – Delphi159

+0

@ Delphi159保留文件扩展名('.txt')或将其重命名为其他内容'.rc'并将其添加到资源和图像中作为'RCData' **资源类型**那里,不要忘记从**项目管理器中删除'rights.rc'文件** – RepeatUntil