2013-07-16 34 views
6

Trong Delphi bạn có thể khai báo các chuỗi được lưu trữ trong bảng chuỗi của phần tài nguyên của mô-đun.Làm thế nào để có được id tài nguyên bảng chuỗi của một tổ chức Delphi?

resourcestring 
    rsExample = 'Example'; 

Tại thời gian biên dịch, Delphi sẽ gán ID cho nó và lưu trữ trong bảng chuỗi.

Có cách nào để truy xuất ID của chuỗi được khai báo là tổ chức lại không?

Lý do là tôi sử dụng gói hoạt động giống như gnugettext. Một số hàm trong System.pas (như LoadResString) được nối, vì vậy khi tôi sử dụng một tổ chức lại trong một biểu thức, nó sẽ được thay thế bằng một chuỗi khác (bản dịch). Tất nhiên, điều này rất tiện dụng, nhưng đôi khi tôi cần văn bản gốc (chưa được dịch) của tổ chức lại.

Khi tôi có thể truy xuất id tài nguyên của chuỗi, tôi có thể gọi API LoadString để lấy văn bản gốc, thay vì văn bản đã dịch.

Trả lời

10

Để lấy id tài nguyên của tổ chức lại, bạn có thể truyền địa chỉ của chuỗi đó theo loại PResStringRec sau đó truy cập vào giá trị Identifier.

Hãy thử mẫu này

{$APPTYPE CONSOLE} 

{$R *.res} 

uses 
    System.SysUtils; 

resourcestring 
    rsExample = 'Example'; 
begin 
    try 
    Writeln(rsExample); 
    Writeln(PResStringRec(@rsExample)^.Identifier); 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
    readln; 
end. 
+0

Ah cảm ơn bạn! Tôi không biết việc tạo lại đã thực sự là một con trỏ đến một bản ghi TResStringRec. Tôi không thể tìm thấy bất kỳ nơi nào trong tài liệu. Tất nhiên, đó có thể là lỗi của tôi, nhưng bạn có nghĩ rằng đây là tài liệu ở đâu đó? –

+0

Tài liệu ['TResStringRec'] (http://docwiki.embarcadero.com/Libraries/XE4/en/System.TResStringRec) nói' ... TResStringRec đại diện cho một tài nguyên chuỗi. TResStringRec là một cấu trúc có chứa các mô-đun và định danh của một tài nguyên chuỗi. ' – RRUZ

+0

Tôi không thấy liên kết đến các chuỗi được khai báo là' resourcestring' trong tài liệu [TResStringRec] (http://docwiki.embarcadero.com/Libraries/XE4/en/System.TResStringRec). Nó nói rằng 'Các biến kiểu TResStringRec được các thói quen Hệ thống sử dụng để xác định vị trí và tải các tài nguyên chuỗi tại thời gian chạy.' Có thể nó nói về sự tái tổ hợp trong câu này, nhưng điều đó không rõ ràng với tôi. Dù sao, bạn đã gửi cho tôi đúng hướng! –

Các vấn đề liên quan