![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Замена string ресурсов в runtime
VladM © (2010-09-30 10:56:00)Есть некий компонент, в котором прописаны строки в resourcestring. Для перевода на другой язык, стоит задача подменить эти строки. Нашел следующую реализацию
-----------------------------------------------------------
uses
Consts;
procedure TForm1.Button1Click(Sender: TObject);
begin
InputBox('Test', 'Enter something', 'Test');
end;
procedure HookResourceString(rs: PResStringRec; newStr: PChar);
var
oldprotect: DWORD;
begin
VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
rs^.Identifier := Integer(newStr);
VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;
const
NewOK: PChar = 'New Ok';
NewCancel: PChar = 'New Cancel';
initialization
HookResourceString(@SMsgDlgOK, NewOK);
HookResourceString(@SMsgDlgCancel, NewCancel);
end.
-----------------------------------------------------------
Данный пример работает, но если текст на который нужно заменять прописан на момент компиляции. Я же подгружаю из файла, во время выполнения, и тут не работает. Даже если в коде написать HookResourceString(@SMsgDlgOK, Label1.Caption); тоже, или пусто или выводит левые строки.
В чем может быть причина (Delphi XE) ?
VladM (2010-09-30 12:18:00) [1]С подгрузкой нет проблем... проблема в том, что то, что я подгружаю не заменяется...
тут дело не в подгрузке...
например так
HookResourceString(@SMsgDlgOK,PChar('aaaa')); - работает
HookResourceString(@SMsgDlgOK,PChar(Label1.Caption)); - не работает отображает "Tahoma"
HookResourceString(@SMsgDlgOK,PChar(Label1.Name)); - работает
решил... типы млин
HookResourceString(@SMsgDlgOK,PWideChar(WideString(Label1.Caption))); - работает
Сергей М. (2010-09-30 11:49:00) [2]
> Для перевода на другой язык, стоит задача подменить эти
> строки
> подгружаю из файла, во время выполнения
Ну так и подгружай из другого файла !