Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2009, 19:09   #1
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию Не могу обработать исключение

В Builder кинул на форму TStringGrid, делаю нехитрые манипуляции, для того чтобы ячейка не подсвечивалась, но вследствии этого появляется проблема, если нажимать на колёсико мышки и вращать - вырабатывается исключение EInvalidGridOperation, но в блок try catch(...) я не попадаю и выдаётся сообщение от компонента, а нужно чтобы ничего не появлялось. Вопрос как?
try
{
Form2->ShowModal();
} catch(...)
{

}
сам TStringGrid лежит на TForm2
CrazyXaoc вне форума Ответить с цитированием
Старый 28.05.2009, 19:46   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Среда билдера перехватывает все исключения. Либо настройки среды измените, либо запускайте прогу через проводник.
pu4koff вне форума Ответить с цитированием
Старый 28.05.2009, 20:36   #3
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

Да дело не в среде, это и так понятно, что билдер перехватывает исключение, но сообщение которое выдаётся явно не от билдера а от компонента, пытаюсь через отладчик убить этот диалог
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 16:07   #4
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

тема открыта
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 16:51   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от CrazyXaoc Посмотреть сообщение
Да дело не в среде, это и так понятно, что билдер перехватывает исключение, но сообщение которое выдаётся явно не от билдера а от компонента, пытаюсь через отладчик убить этот диалог
Хотите сказать, что при запуске Вашей программы как любой другой обычной из файлового менеджера (проводника, тотал командера,...), не смотря на блок try, вылетает исключение? Как говорится: "не верю" (с)
Разве что это не исключение, а MessageDlg просто кто-то вызвал.
pu4koff вне форума Ответить с цитированием
Старый 29.05.2009, 17:01   #6
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

Я сам не поверил, оно вылетает и ещё как... Причём я успел понять, что там какие-то Delphi исключения или что-то типа того, не реагирует на них ни даже блок try в Application. Сидел под отладчиком, в ollydebugger,
там прям исключения посылаются kernel32.dll, потом чего-то ещё делается и опять туда же, но уже вылетает диалог с ошибкой, при попытке его не вызывать (махинации с асмом) вылетает сообщение либо access violation либо ничего, но параметры компонента TStringGrid сильно меняются в худшую сторону, пропадают столбцы и данные, а как перехватить - не знаю
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 17:05   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Приведите тут тогда код своих хитрых манипуляций и что именно нужно, а то может это меньшей кровью сделать можно
pu4koff вне форума Ответить с цитированием
Старый 29.05.2009, 17:43   #8
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

делаем так, чтобы выделения не было в стринг гриде
Код:
void __fastcall TForm2::vis_listClick(TObject *Sender)
{
  TGridRect myRect;
  myRect.Left  =vis_list->ColCount+1;
  myRect.Top   =vis_list->RowCount+1;
  myRect.Right =vis_list->ColCount+1;
  myRect.Bottom=vis_list->RowCount+1;
  vis_list->Selection=myRect;
}
далее нажимаем на колесо мышки (на полях грида) и крутим вверх его прямо нажатым, в общем экперементируйте
должно вылезти Grid Index out of range! мультиселект выключен
у меня оно не обрабатывается в блоке try catch(...)

Последний раз редактировалось Sazary; 29.05.2009 в 17:59.
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 18:14   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Мда... Тогда уж лучше в обработчике OnSelectCell написать всего одну строку: CanSelect = false. Одно но: левая верхняя ячейка будет всегда выделена и как от этого избавиться я без понятия.
А исключение наверно делфийское и не ловится сишным кодом или еще какая глупость из-за смешивания паскаля с си в одном компиляторе
pu4koff вне форума Ответить с цитированием
Старый 29.05.2009, 19:51   #10
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

вот и я мучился с этой ячейкой, напишут же компонент, так чтобы ничего нормально не оформить, пришлось лечить методом ondrawcell, но всё равно порой на доли секунды выделение проскакивает, по хорошему нужно переопределять обработчик рисования,но не хочется заморачиваться =)
CrazyXaoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на исключение строк в матрице DRAG Помощь студентам 11 20.04.2011 21:31
Как обработать исключение? XPAiN БД в Delphi 9 16.05.2008 15:09
Исключение EIdReadTimeout Pedro Работа с сетью в Delphi 1 22.09.2007 22:51
Неуловимое исключение в Apro компонентах Slaveg123 Работа с сетью в Delphi 0 01.07.2007 00:28