Есть StringGrid, в нем выделяется целиком строка. Нужно, чтобы при двойном клике крысой на строку вся инфа из этой строки помещалась в кучу эдитов. Как сделать дабл клик на строке? Не надо смеяться, я только учусь
Здравствуйте, Slicer [Wirkwood], Вы писали:
SW>То есть? А в чем проблема-то? Событие OnDblClick, вешаешь обработчик — и все дела. Что-то не так работает?
SW>Проблема в том, как сделать так, чтобы при дабл клике считывалась инфа с выделенной строки. В справке смотреть лень, а завтра прогу сдавать надо, блин.
Re[3]: Дабл клик на строке StringGrid'a
От:
Аноним
Дата:
03.04.03 19:11
Оценка:
Здравствуйте, Vertx, Вы писали:
V>Здравствуйте, Slicer [Wirkwood], Вы писали:
SW>>То есть? А в чем проблема-то? Событие OnDblClick, вешаешь обработчик — и все дела. Что-то не так работает?
SW>>Проблема в том, как сделать так, чтобы при дабл клике считывалась инфа с выделенной строки. В справке смотреть лень, а завтра прогу сдавать надо, блин.
Я так понимаю — как правильно вытащить строку при двойном клике на StringGride. Так вот, IMHO я не ошибусь если посоветую
использовать функцию MouseToCell (хелп самостоятельно смотри там все предельно просто), а использовать эту функцию как раз
нужно в обработчике события OnDblClick, как уже было сказано.
Здравствуйте, <Аноним>, Вы писали:
А>Я так понимаю — как правильно вытащить строку при двойном клике на StringGride. Так вот, IMHO я не ошибусь если посоветую А>использовать функцию MouseToCell (хелп самостоятельно смотри там все предельно просто), а использовать эту функцию как раз А>нужно в обработчике события OnDblClick, как уже было сказано.
Ну вот, начали огород городить...
Делается это очень просто (пример на билдере):
В обработчике OnBdlClick:
int row = StringGrid->Row;
Edit1->Text = StringGrid->Cells[0][row];
Edit2->Text = StringGrid->Cells[1][row];
Edit3->Text = StringGrid->Cells[2][row];
Edit4->Text = StringGrid->Cells[3][row];
// ...
// ... И так до посинения в пальцах :-)
Для тех кто не знает, события компонентов задаются на вкладке "Events" Object Inspector'a. И вообще, книжки читать надо
AD>Делается это очень просто (пример на билдере):
AD>В обработчике OnBdlClick:
AD>
AD>int row = StringGrid->Row;
Edit1->>Text = StringGrid->Cells[0][row];
Edit2->>Text = StringGrid->Cells[1][row];
Edit3->>Text = StringGrid->Cells[2][row];
Edit4->>Text = StringGrid->Cells[3][row];
AD>// ...
AD>// ... И так до посинения в пальцах :-)
AD>
Огород — не огород...не знаю...хотел бы согласиться с данным предложением НО...
Дело в том, что событие OnDblClick возникает также в том случае если мышой кликаешь на нулевые row и сolumn'сы, а в ваше int row = StringGrid->Row;
передается тот номер строки, которая является на данный момент активной (на нулевую индекс перескакивать не хочет ), с одной стороны — это правильно..а с другой стороны нужно для корректности еще проверочку ставить все же..и вообще..не только книжки читать надо ...
Здравствуйте, Руслан, Вы писали:
Р>Дело в том, что событие OnDblClick возникает также в том случае если мышой кликаешь на нулевые row и сolumn'сы, а в ваше int row = StringGrid->Row; Р>передается тот номер строки, которая является на данный момент активной (на нулевую индекс перескакивать не хочет ), с одной стороны — это правильно..а с другой стороны нужно для корректности еще проверочку ставить все же..и вообще..не только книжки читать надо ...
Согласен. Был не прав. Исправлюсь.
void __fastcall TForm1::StringGridDblClick(TObject *Sender)
{
TPoint cur;
int col, row;
cur = StringGrid->ScreenToClient(Mouse->CursorPos);
StringGrid->MouseToCell(cur.x, cur.y, col, row);
if (row < StringGrid->FixedRows) return; // Вот она - проверочка
Edit1->Text = StringGrid->Cells[0][row];
Edit2->Text = StringGrid->Cells[1][row];
Edit3->Text = StringGrid->Cells[2][row];
Edit4->Text = StringGrid->Cells[3][row];
}