L@mEr |
Отправлено: 07.03.2005, 11:04 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Здравствуйте. В хелпе прочитал, что StateImage — это штука для отображения состояния элемента. Сделал логичный вывод, что его можно использовать для того, чтоб бросить туда картинки с чекбоксами и т.п.
Но как мне отловить то, что пользователь кликает не просто по отдельному Node, а по его StateImage?
Ну и, в довеску, то же самое про клик по тексту, если кого не затруднит...
Извините если вопрос покажется слишком ламерским... посмотрите тогда на ник
|
|
klen |
Отправлено: 07.03.2005, 23:30 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Я тут картинку положил, если тебе так нада https://rxlib.ru/forums/index.php?ac...8120348d177f01e то раскажу ка делать |
|
L@mEr |
Отправлено: 08.03.2005, 12:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Мне так надо . Был бы оч признателен.
|
|
klen |
Отправлено: 08.03.2005, 14:38 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Предварительно рисуешь иконки всех состояний чекбоксов и заносиш их в ImageList, подкручиваешь его к свойству StateImages дерева и пишеш обработчики
CODE |
void __fastcall TStoredPropDlg::TreeViewMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
// фиксируешь место нажатия мышью
FX = X;
}
void __fastcall TStoredPropDlg::TreeViewClick(TObject *Sender)
{
TTreeNode* Node = TreeView -> Selected;
if ( !Node ) return;
if ( !Node -> Parent ) return;
// установка при нажатии на первый чекбокс
if ( FX > 38 && FX < 55 )
{
switch (Node->StateIndex)
{
case 1 :
{
Node->StateIndex = 3;
break;
}
case 2 :
{
Node->StateIndex = 4;
break;
}
case 3 :
{
Node->StateIndex = 1;
UpdateListBox ();
break;
}
case 4 :
{
Node->StateIndex = 2;
break;
}
}
}
// установка при нажатии на второй чекбокс
if ( FX > 54 && FX < 71 )
{
switch (Node->StateIndex)
{
case 1 :
{
Node->StateIndex = 2;
break;
}
case 2 :
{
Node->StateIndex = 1;
break;
}
case 3 :
{
Node->StateIndex = 4;
break;
}
case 4 :
{
Node->StateIndex = 3;
break;
}
}
}
}
|
Отредактировано klen — 08/03/2005, 14:40 |
|
L@mEr |
Отправлено: 08.03.2005, 20:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Сп@СиБ0
|
|
L@mEr |
Отправлено: 12.03.2005, 17:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Появилась небольшая проблема: TreeVeiw->Selected может не совпадать с узлом, по которому я в данный момент кликнул (например, селектед узел 0-го уровня, а я в этот момент открываю (Expand'аю) узел 1-го уровня). Тогда координата Х совпадает, и чекбокс реагирует так, будто нажали по нему.
Проблема с отслеживанием координати У состоит в том, что при скроллинге она читется не от 1-го узла, а от верха компонента.
Буду благодарен за любые сумасшедшие идеи, потому как у меня уже мозги оплавились.
|
|
olegenty |
Отправлено: 12.03.2005, 18:54 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
а что мешает ориентироваться не на Selected, а на
CODE |
TTreeNode* __fastcall GetNodeAt(int X, int Y);
|
|
|
L@mEr |
Отправлено: 12.03.2005, 19:14 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Мешают, к сожалению, кривые руки...
Или, возможно, элементарное незнакомство с компонентом. Но "Я выучу... Честное слово, выучу" (с) мультик про страну невыученных уроков )
Спасибо за ответ
|
|