Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2

Непонятное поведение при работе StringGrid

11.12.2024, 13:18. Показов 6792. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Есть класс-перехватчик, ограничивающий ручной ввод данных в ячейки в StringGrid - вводятся только числовые значения.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
namespace MyStringGrid
{
    class TMyInplaceEdit : public TInplaceEdit
    {
      public:
        __fastcall virtual TMyInplaceEdit(TComponent* AOwner)
            : TInplaceEdit(AOwner)
        {
            Alignment = taCenter;
        }
    };
 
 
 
    class TStringGrid : public Grids::TStringGrid
    {
        public:
            DYNAMIC void __fastcall Resize(void)
            {
                // ...
                Grids::TDrawGrid::Resize();
            }
 
          bool bIsProtect;
 
        __property int RowCount = {read=GetRowCount, write=SetRowCount};
 
        typedef Vcl::Grids::TStringGrid Inherited;
          private:
        void __fastcall SetRowCount(int Value)
        {
           if(bIsProtect == false)
           {
                      //некий проверочный код   
                      
           }
           else //условие проверки
        }
 
        int __fastcall GetRowCount()
        {
            return dynamic_cast<Inherited*>(this)->RowCount;
        }
 
            DYNAMIC void __fastcall KeyPress(System::WideChar &Key) //запрет на ввод буков и прочего мусора
            {
               Set <wchar_t, 0, 255> Dig;
               Dig << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9' << '.' << ',' << '-' << VK_RETURN << VK_BACK << VK_ESCAPE;
 
                if(Key == ',') Key = '.';
                if(!Dig.Contains(Key)) Key=0;
            }
 
        virtual TInplaceEdit* __fastcall CreateEditor(void)
        {
            return new TMyInplaceEdit(this);
        }
    };
}
#define TStringGrid MyStringGrid::TStringGrid


В основном коде дополнительная проверка, сделанная для того, в каком формате вводятся значения - координаты плоские или в градусах
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TfMain::sgCalcSetEditText(TObject *Sender, int ACol, int ARow, const UnicodeString Value)
{
  if(cbIsGeod->Checked) return;
 
   double d;
 
  if(Value!="")
  {
   if(Value!="-")
    try
    {
       d = StrToFloat(Value);
    }
    catch(...)
    {
       ShowMessage(Value+"\nНеверное значение!");
       sgCalc->Cells[ACol][ARow] = "";
    }
  }
}

Если просто наводим на ячейку и начинаем ввод - все нормально, перехватчик не дает вводить "мусор". Если двойной клик в режиме редактирования и вводим "мусор" - выдается сообщение из catch и сразу "Abnormal program termination". Заранее благодарю за советы, куда копать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2024, 13:18
Ответы с готовыми решениями:

Странное поведение форм при работе через RemoteApp
Всем привет! Пишу на C++ Builder Berlin Пишу приложение с некоторым количеством форм. При отладке никаких проблем с формами не...

Непонятное поведение при вызове метода класса
Здравствуйте, уважаемые форумчане! Пытаюсь помочь здесь на форуме с задачей на классы, но возникла небольшая проблема. Функция...

Странное поведение с пробелом при работе с API VK
Всем привет! У меня следующий головняк... пишу приложение, которое будет отправлять мне сообщение в ВК. Изучил API ВК написал функцию,...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
11.12.2024, 15:25
Цитата Сообщение от TrollHammer Посмотреть сообщение
Если двойной клик в режиме редактирования
Это что означает? У меня - хоть закликайся, не дает мусор вводить твой код.
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
12.12.2024, 00:27  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
не дает мусор вводить
Сам не могу понять, что происходит, ошибка вылетает непредсказуемо на разных ячейках. Буду гонять отладчиком, пока не найду, где собака порылась.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
12.12.2024, 00:43
Предположительно - копать нужно в другом месте. Тот код, что вы привели, ни в режиме debug, ни в release (в х86 и в х64) при вставке текста в program termination не вываливается (правда, запускать из "студии" я не пробовал).

Добавлено через 3 минуты
Цитата Сообщение от TrollHammer Посмотреть сообщение
Буду гонять отладчиком
скорее всего это не поможет. Сбой выглядит спонтанным и скорее связан с чем-то вроде таймера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2024, 00:43
Помогаю со студенческими работами здесь

Непонятное поведение
Всем привет! В книге &quot;Прата - Язык программирования C++. Лекции и управжения 2011&quot; нашёл вот такой пример: const free_throws...

Непонятное поведение программы
Пишу статическую либу. В ней есть кусок кода, который уходит в рекурсию.. Только причины мне непонятны.. Вот кусок кода std::string...

Непонятное поведение функтора
Почему-то не считается произведение 1 и 6 ... #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;functional&gt; #include...

Непонятное поведение программы
Привет народ, вот кароч: #include&quot;stdafx.h&quot; #include&quot;iostream&quot; using namespace std; class calc{ int *i, *j; public: int...

Непонятное поведение winsock
Есть клиент-серверное приложение на протоколе TCP на синхронных сокетах. И вот при интенсивном тестировании выяснились странные вещи. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru