![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Смена языка интерфейса
Ajax © (2003-07-06 21:27:00)В своей программе необходимо реализовать несколько языков интерфейса и их смену пользователем. В VCL использовал бы FindComponent. Есть ли в KOL какая-либо альтернатива???
PS: У меня была идея перебора всех контролов по GetWindow. Но как получить имя контрола, зная его хэндл?
Кладов (2003-07-08 18:26:00) [1]Эффективность выполнения в run-time не имеет значения, задача мизерна по времени в любом случае. Но во время разработки время будет меньше, если просто составить список контролов, чем составить список имен контролов, и еще сделать код, который будет искать контролы по именам, разве нет?
const Ctrls: PList;
var Captions: PStrList;
в FormCreate:
procedure AddCtrls( const C: array of PControl );
var i:integer;
begin
for i := 0 to High( C ) do
Ctrls.Add( C );
end;
begin
Ctrls := NewList;
AddCtrls( [ Button1, Button2 ] );
end;
смена языка:
Captions.LoadFromStream( StrmRussian );
for i := 0 to Ctrls.Count-1 do
PControl( Ctrls[ i ] ).Caption := Captions.Items[ i ];
Я не вижу в чем проблема. В том, что непременно хочется иметь список в виде
Button1='Да'
Button2='Нет'
как в ini-файле? А кто мешает иметь эти имена, если так хочется, но отбрасывать при загрузке. Да, согласен, нет контроля. Но контроль нужен для того, кто составляет/исправляет список, а не для программы. Это человек в данном случае может ошибиться, а не машина.
Выпрямляйте свои мысли. Нас в VCL научили, что все надо делать наоборот. Это не всегда верный подход.
Ajax (2003-07-08 07:28:00) [2]>Если у тебя будет тысяча контролов, то сколько времени твой
>автомат будет выполняться?
IMHO примерно столько же, сколько и перебор списка.
Короче говоря, на KOL это не делается...
SPeller (2003-07-08 03:53:00) [3]
> puky (07.07.03 21:37)
> 2Кладов:
> Все дело в ручной формировке списка, если компонентов куча,
> как в UGH, то это долго, быстрее сделать на автомате.
Это не долго. Потратишь время на составление списка, зато код будет более эффективным. А "автомат" - штука ненадёжная и менее эффективная. Если у тебя будет тысяча контролов, то сколько времени твой автомат будет выполняться?
puky (2003-07-07 21:37:00) [4]2Кладов:
Все дело в ручной формировке списка, если компонентов куча, как в UGH, то это долго, быстрее сделать на автомате.
Кладов (2003-07-07 21:15:00) [5]Но это же известные вам контролы. Сформируйте список, или массив этих контролов, и никаких проблем с идентификацией, поиском. Соспоставьте массив/список строк, в каждом языке свой, вот и все.
puky (2003-07-07 19:54:00) [6]Можеш посмотреть http://tinyware.by.ru/dev/ml.exe
Но пока есть проблемы -
1) без исправления kol.pas - нет доступа к попап-меню.
2) Перевод идет только в одну сторону.
Gandalf (2003-07-07 16:12:00) [7]
> Юзайте RTTI...
Его нет KOL (если речь идет об object версии).
> Есть ли в KOL какая-либо альтернатива???
Нет, в KOL нет Name - потому можно делать перебор через Children по Caption (или Tag или другому свойству) - которые фиксируются заранее ('Button1'...'Buttonn').
> У меня была идея перебора всех контролов по GetWindow.
> Но как получить имя контрола, зная его хэндл?
Нет ничего проще
MyControl := Pointer( GetProp( Controlhandle, ID_SELF ) );
Avenger[NhT] (2003-07-07 14:19:00) [8]
> Ajax ©
Юзайте RTTI...
SPeller (2003-07-07 14:02:00) [9]Только жестко прописывая Label1.Cation := то-то. Можно использовать свойство Tag для идентификации.