Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Смена языка интерфейса   Найти похожие ветки 

 
Ajax ©   (2003-07-06 21:27) [0]

В своей программе необходимо реализовать несколько языков интерфейса и их смену пользователем. В VCL использовал бы FindComponent. Есть ли в KOL какая-либо альтернатива???

PS: У меня была идея перебора  всех контролов по GetWindow. Но как получить имя контрола, зная его хэндл?


 
SPeller ©   (2003-07-07 14:02) [1]

Только жестко прописывая Label1.Cation := то-то. Можно использовать свойство Tag для идентификации.


 
Avenger[NhT] ©   (2003-07-07 14:19) [2]


> Ajax ©

Юзайте RTTI...


 
Gandalf ©   (2003-07-07 16:12) [3]


> Юзайте RTTI...


Его нет KOL (если речь идет об object версии).


> Есть ли в KOL какая-либо альтернатива???


Нет, в KOL нет Name - потому можно делать перебор через Children по Caption (или Tag или другому свойству) - которые фиксируются заранее ("Button1"..."Buttonn").


> У меня была идея перебора  всех контролов по GetWindow.
> Но как получить имя контрола, зная его хэндл?


Нет ничего проще

MyControl := Pointer( GetProp( Controlhandle, ID_SELF ) );


 
puky   (2003-07-07 19:54) [4]

Можеш посмотреть http://tinyware.by.ru/dev/ml.exe
Но пока есть проблемы -
1) без исправления kol.pas - нет доступа к попап-меню.
2) Перевод идет только в одну сторону.


 
Кладов   (2003-07-07 21:15) [5]

Но это же известные вам контролы. Сформируйте список, или массив этих контролов, и никаких проблем с идентификацией, поиском. Соспоставьте массив/список строк, в каждом языке свой, вот и все.


 
puky   (2003-07-07 21:37) [6]

2Кладов:
Все дело в ручной формировке списка, если компонентов куча, как в UGH, то это долго, быстрее сделать на автомате.


 
SPeller ©   (2003-07-08 03:53) [7]


> puky   (07.07.03 21:37)
> 2Кладов:
> Все дело в ручной формировке списка, если компонентов куча,
> как в UGH, то это долго, быстрее сделать на автомате.

Это не долго. Потратишь время на составление списка, зато код будет более эффективным. А "автомат" - штука ненадёжная и менее эффективная. Если у тебя будет тысяча контролов, то сколько времени твой автомат будет выполняться?


 
Ajax ©   (2003-07-08 07:28) [8]

>Если у тебя будет тысяча контролов, то сколько времени твой
>автомат будет выполняться?
IMHO примерно столько же, сколько и перебор списка.

Короче говоря, на KOL это не делается...


 
Кладов   (2003-07-08 18:26) [9]

Эффективность выполнения в 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 научили, что все надо делать наоборот. Это не всегда верный подход.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
14-1078161551
cyborg
2004-03-01 20:19
2004.03.28
Авторские права


14-1078394343
able
2004-03-04 12:59
2004.03.28
RTFTOHTML


1-1078393979
Builder
2004-03-04 12:52
2004.03.28
Печать Excel


1-1079066913
Kamil
2004-03-12 07:48
2004.03.28
Раскладка в активном окне


1-1078830858
Layner
2004-03-09 14:14
2004.03.28
Мастера, как сгенерить код HTML цвета типа #FFCECE, #FFFFFF