for (int i = 0; i < Form1->ComponentCount; i++)
if (Form1->Components->Name.Pos("Label") > 0)
{
LoadString(hLibHandle, Form1->Components->Tag, szBuffer, 100);
TLabel *pLabel = (TLabel *)Form1->Components;
pLabel->Caption = szBuffer;
}
Ресурсы и строки
У меня есть файл ресурсов string.rc вида:
#define rsLabel98 2030
#define rsLabel99 2041
#define rsLabel90 2042
#define rsLabel20 2043
#define rsLabel97 2044
#define rsLabel94 2045
#define rsLabel22 2046
#define rsLabel242 2047
#define rsLabel251 2048
#define rsLabel241 2049
#define rsLabel240 2050
STRINGTABLE DISCARDABLE
BEGIN
rsLabel98 "<что-то>"
rsLabel99 "<что-то>"
rsLabel90 "<что-то>"
rsLabel20 "<что-то>"
rsLabel97 "..."
rsLabel94 "..."
rsLabel22 "..."
rsLabel242 "..."
rsLabel251 "..."
rsLabel241 "..."
rsLabel240 "..."
END
Я компилю его в длл-ку и при запуске программы в OnCreate делаю так:
hLibHandle = LoadLibrary("mydll.dll");
LoadString(hLibHandle, rsLabel98, szBuffer, 100);
Label98->Caption = szBuffer;
и т.д.
А если коспонетов тыща штук, как авматически сделать подстановку нужного Captiona к нужному компоненту?
Обычный цикл. Также посмотрите в сторону свойства Components.
Цитата: nikitozz
Обычный цикл. Также посмотрите в сторону свойства Components.
А можно поподробней? Лучше с примером? Что значит обычный цикл?
А если компоненты разные(ComboBox, RadioGroup, GroupBox и т.д.)?
Цитата: TheMustafa
А можно поподробней? Лучше с примером? Что значит обычный цикл?
А если компоненты разные(ComboBox, RadioGroup, GroupBox и т.д.)?
А если компоненты разные(ComboBox, RadioGroup, GroupBox и т.д.)?
Способов на самом деле множество. Определить что это именно Label, а не другой компонент можно по-разному. Например называть нужные Label'ы по определенной системе (например Label1, Label2, ..., LabelN) или с помощью того же dynamic_cast'а.
А определить какая именно строка нужна для этого компонента можно забив в его свойтсво tag идентификатор компонента.
Например
Код: