TURBO PASCAL |
Новости
|
9.4.2. Использование ресурсовЧтобы компоновщик ВР пристыковал ресурсный файл к исполняемой программе, вставьте в ее текст директиву $R, например: {$R MyRes} Для получения строки из строкового ресурса используется вызов функции LoadStrng. Следующая программа выведет на экран содержимое строкового ресурса, описанного на с.228: Uses WinAPI; {$R MyRes} var Buf: array [Byte] of Char; k : Integer; begin for k := 1 to 5 do begin if LoadString(hinstance, k, Buf, SizeOf(Buf))<>0 then WriteLn(Buf) end; end. Доступ к ресурсам пользователя сложнее и выполняется в такой последовательности: • с помощью FindResource создается дескриптор ресурса; • если ресурс найден (FindResource возвращет не ноль), он загружается в память обращением к LoadResource, которая возвращает дескриптор выделенного ресурсу блока памяти; • с помощью LockResource получаем физический адрес блока памяти и работаем с ресурсом; • после использования ресурса удаляем его из памяти обращением к FreeResource. Следующая программа прочитает и распечатает содержимое ресурса, описанного на с.229: Uses WinAPI; {$R MyRes! type PMyRes ^TMyRes; TMyRes = record Text: array [0..19] of Char; Wordi, Word2: Word; Bytes: array [1..10] of Byte; Inti, Int2: Integer-end; var P: PMyRes; ResHandle, MemHandle: Word; begin ResHandle := FindResource(hinstance, 'MyRes', PChar(Longint(10))); if HandleoO then begin MemHandle := LoadResource(hinstance, ResHandle); P := LockResource(MemHandle); with P" do begin WriteLn(Text) ; WriteLn(Wordi, Word2:10); for k := 1 to 10 do Write(Bytes[k]:4) ; WriteLn; WriteLn(Intl, Int2:10) end; FreeResource(Handle) end end. Небольшой комментарий. При обращении к FindResource третьим параметром требуется указать тип ресурса. Этот параметр определен как PChar, но не пытайтесь здесь поместить строку ' RCDATA', т.к. 2 слова этого параметра используются специфичным образом: старшее слово должно содержать 0, а в младшее необходимо поместить числовой идентификатор типа параметра (для ресурса пользователя он равен 10). Именно эту операцию и реализует выражение PChar(Longint (10)) |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |