Slader |
Отправлено: 07.02.2005, 23:25 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 27
|
В общем, в меню имеются пункты с именами Ch1, Ch2, ... Ch32.
Как получить доступ к их свойствам, если я хочу использовать for?
То есть, что-то типа такого:
CODE |
for (int i=0; i<32; i++) Ch[i]->Enabled=false;
|
И еще: как создавать пункты меню динамически? |
|
genchik |
Отправлено: 08.02.2005, 04:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
на первую часть вопроса:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMenuItem* tm;
tm = MainMenu1->Items->Find("nameMenu");
for (int i = 0; i < tm->Count ; i++)
tm->Items[i]->Checked = true;
}
на второй чуть позже отвечу (если найду что ответить ) |
|
genchik |
Отправлено: 08.02.2005, 05:41 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
ну и как обещал, вторая часть вопроса:
TMenuItem* tm = new TMenuItem(MainMenu1);
TMenuItem* tm1 = new TMenuItem;
tm->Caption = "Ins" + IntToStr(MainMenu1->Items->Count);
tm1->Caption = "mInst" + IntToStr(MainMenu1->Items->Count);
MainMenu1->Items[0].Add;
tm->Add(tm1);
|
|
genchik |
Отправлено: 08.02.2005, 05:53 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
c косяк — должно быть [CODE] |
|
genchik |
Отправлено: 08.02.2005, 07:02 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
опять! должно быть (тм) |
|
Slader |
Отправлено: 08.02.2005, 11:21 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 27
|
Что-то не хочет он искать нужные элементы меню, как Вы предложили. Таким образом он находит только элементы первого уровня, а у меня третий... Буду очень признателен, если подскажете, как до него можно добраться. |
|
AVC |
Отправлено: 08.02.2005, 12:12 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | Таким образом он находит только элементы первого уровня, а у меня третий... как до него можно добраться.
|
Как обычно — рекурсивным обходом дерева.
Типа так
CODE |
//---------------------------------------------------------------------------
/* *.h
private:
TMenuItem* __fastcall MenuByName (TMainMenu *MMenu, const AnsiString &pName);
TMenuItem* __fastcall MenuItemByName (TMenuItem *MItem, const AnsiString &pName);
*/
TMenuItem* __fastcall TForm1::MenuByName (TMainMenu *MMenu, const AnsiString &pName)
{
TMenuItem *imnu;
for (int i=0; i < MMenu->Items->Count; i++)
{ imnu = MenuItemByName(MMenu->Items->Items[i], pName);
if (imnu) return imnu;
}
return NULL;
}
//---------------------------------------------------------------------------
TMenuItem* __fastcall TForm1::MenuItemByName (TMenuItem *MItem, const AnsiString &pName)
{
Memo1->Lines->Add(MItem->Name); // для наглядности как обходится дерево
if (MItem->Name.UpperCase() == pName.Trim().UpperCase()) return MItem;
TMenuItem *imnu;
for (int i=0; i < MItem->Count; i++)
{ imnu = MenuItemByName(MItem->Items[i], pName);
if (imnu) return imnu;
}
return NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Bt_FindClick(TObject *Sender)
{
Memo1->Lines->Text = "Find <" + Edit1->Text + ">";
TMenuItem *imnu = MenuByName(MainMenu1, Edit1->Text);
if (imnu) Memo1->Lines->Add("Founded " + imnu->Name);
else Memo1->Lines->Add("not founded ");
}
//---------------------------------------------------------------------------
|
PS.
Если начать с формы, то можно найти любой элемент данного экземпляра формы.
А если начать с Application можно найти любой элемент любого экземпляра формы.
Отредактировано AVC — 08/02/2005, 12:18 |
|
Konstantine |
Отправлено: 08.02.2005, 14:46 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
первая часть ответа:
CODE | TMenuItem *Ch[32];// ну или организовать динамически[code]
а это нада где-то в OnShowForm:
[code]Ch[1]=Ch1;
Ch[2]=Ch2;
//...
Ch[32]=Ch32; |
и далее можно обращаться как Ch[i]-> и т.д.
а про вторую половину ответил genchik, и там вместо tm можно использовать Ваше Ch[i]
|
|
olegenty |
Отправлено: 08.02.2005, 14:56 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
а я в таких случаях расслабляюсь и всегда использую map. ничего не надо делать руками, кроме инициализации map после инициализации меню.
допустим,
map ItemMap;
тогда доступ по имени будет
ItemMap[<имя>]
и всё!!!
|
|
Slader |
Отправлено: 08.02.2005, 15:08 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 27
|
Ага! Спасибо большое! То, что надо:)) |
|