Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Смена языка интерфейса


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 для идентификации.


Наверх

Титульная страница Поиск, карта сайта Написать письмо