Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48

Ограничить выделение в StringGrid-e

30.01.2020, 07:06. Показов 4600. Ответов 46

Студворк — интернет-сервис помощи студентам
Добрый день!
В Delphi имеется таблица StringGrid1 (20х20), по умолчанию выделять мышкой можно неограниченное количество ячеек, но как сделать так, чтоб при выделении мышкой не выделялись столбцы меньше 5 и больше 15, даже если нажатая левая кнопка мыши находилась за пределами выделения?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2020, 07:06
Ответы с готовыми решениями:

Как ограничить количество символов в ячейках StringGrid
Как ограничить количество символов в ячейках StringGrid? данные вводятся в таблицу вручную. в ячейку можно вводить только 1, 2 , 0, -1 ...

Ограничить ввод данных в определенные ячейки StringGrid
Доброго времени суток! Может кто-нибудь написать как в событие OnSelectCell запретить ввод данных в ячейку?

Ограничить количество введенных символов в ячейку StringGrid
Доброго дня. Столкнулся с проблемой - не получается ограничить колличество введенных символов (32 символа) в ячейку StringGrid. В...

46
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
04.02.2020, 15:15
обработать событие OnSelectCell
0
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
04.02.2020, 15:51  [ТС]
обработать событие OnSelectCell
Есть что нибуть оригинальное например проверенный кусок кода который работает хотя бы при движении мыши?
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
04.02.2020, 15:55
Сделай хоть что-то самостоятельно
Delphi
1
2
3
4
5
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
 
end;
что такое ACol, ARow, объяснять?
CanSelect - запрет/разрешение выделения

Событие SelectCell возникает перед попыткой выделения любой ячейки

Добавлено через 46 секунд
Цитата Сообщение от darknez1 Посмотреть сообщение
работает хотя бы при движении мыши?
движение мыши в данном случае не играет никакой роли
1
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
04.02.2020, 15:57  [ТС]
Где находится эта процедура и ежу понятно, я тоже всем так тыкать могу, ты или предлагай кусок кода или не заходи сюда, дабы не мешать остальным обсуждать эту тему!
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
04.02.2020, 16:20
Ахаха. За 4 дня никто не захотел "обсуждать" тему, в которой и обсуждать-то нечего. Нужно взять и сделать. Тем более,
Цитата Сообщение от darknez1 Посмотреть сообщение
Где находится эта процедура и ежу понятно,
но ты же не ёж, я верно понимаю?
Я дал подсказку. Где попытки её использовать? Если я изъяснился непонятно, может, спросишь у ежа?
0
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
04.02.2020, 16:27  [ТС]
Подсказка которую ты дал называется позвони в RAD Studio они тебе расскажут, ты сам то ничего не знаешь, а тему только обгаживаешь. Если ты такой умный, что же ты программу за 10 минут не накидал и не скинул код? Ты мастер удален мат, это единственное чем ты тут занимаешься. А что касается за 4 дня никто не зашел, зайдут обязательно и напишут! Ты только не мешай!
0
Модератор
4138 / 2351 / 809
Регистрация: 15.11.2015
Сообщений: 9,396
04.02.2020, 19:19
Оказалось, что событие OnSelectCell это не то, что нужно в данном случае. Вероятно, придётся ограничивать область выделения уже после окончания выделения при попытке использовать выделенную область.
1
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
04.02.2020, 19:24  [ТС]
Оказалось, что событие OnSelectCell это не то, что нужно в данном случае. Вероятно, придётся ограничивать область выделения уже после окончания выделения при попытке использовать выделенную область.
Спасибо за ответ, я тоже пытался через "OnSelectCell" но не смог, попытался отлавливать через движение мыши на какой клетке находится, но не получается
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,154
Записей в блоге: 3
04.02.2020, 20:15
Цитата Сообщение от darknez1 Посмотреть сообщение
я тоже пытался через "OnSelectCell" но не смог, попытался отлавливать через движение мыши на какой клетке находится, но не получается
покажите ваши попытки

потратил на поиск 1 минуту и сделал по коду на форуме
Миниатюры
Ограничить выделение в StringGrid-e  
0
Модератор
4138 / 2351 / 809
Регистрация: 15.11.2015
Сообщений: 9,396
04.02.2020, 20:33
qwertehok, красное это закрашенные ячейки?
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,154
Записей в блоге: 3
04.02.2020, 20:41
да, такой цвет был в примере - не стал менять
главное что ограничение по колонкам работает
0
Модератор
4138 / 2351 / 809
Регистрация: 15.11.2015
Сообщений: 9,396
04.02.2020, 20:44
Ясно. По теме я понял, что нужно ограничивать именно выделение, когда мышкой выделяются ячейки.
0
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
05.02.2020, 05:21  [ТС]
Я пробывал во так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  Form2: TForm2;
  vidilenie:boolean; //Определяет нажата ли кнопка мыши
.........
procedure TForm2.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  vidilenie:=true; //Нажата
end;
 
procedure TForm2.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  //Здесь условно выводится какие столбцы выделены в Caption формы
  if (vidilenie = true) and (StringGrid1.Selection.Right > 5) and (StringGrid1.Selection.Left < 15) then
    form2.Caption:='Выделено '+IntToStr(form2.StringGrid1.Selection.Left)+' столбцов';
end;
 
procedure TForm2.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  vidilenie:=false; //Не нажата
end;
Но нужно чтоб область выделения при нажатой кнопке мыши не распространялась меньше 5 и дальше 15 столбцов на этапе движения мыши
Но он всё равно тянет мышкой выделяет лишние столбцы
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,154
Записей в блоге: 3
05.02.2020, 08:42
Цитата Сообщение от darknez1 Посмотреть сообщение
Но он всё равно тянет мышкой выделяет лишние столбцы
ну так мышкой то тянуть то можно - это не отменить, другое дело что выделять нужно по правилу
0
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
05.02.2020, 08:46  [ТС]
ну так мышкой то тянуть то можно - это не отменить, другое дело что выделять нужно по правилу
И как сделать так чтобы выделялось по правилу?
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
05.02.2020, 10:56
qwertehok, я на Turbo Delphi пробовал (это Borland Delphi 2006)
так в OnSelectCell в зависимости от ACol я присваивал CanSelect false
это не позволяло сделать ячейку в заданных столбцах текущей (перейти на них), но прекрасно позволяло выделять эти ячейки мышкой. Могу предоставить код (и бинарник) для демонстрации глюка.
Хотя, возможно, что в современных версиях Delphi это поведение изменилось.
qwertehok, если доступно, можете свой пример проверить на Delphi 7 (к примеру)?
0
Модератор
4138 / 2351 / 809
Регистрация: 15.11.2015
Сообщений: 9,396
05.02.2020, 10:58
mr-Crocodile, в XE3 так же. Не знаю, считается ли она современной.
0
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
05.02.2020, 11:01  [ТС]
Скидывайте, у меня RAD STUDIO 10.3.3
0
Модератор
4138 / 2351 / 809
Регистрация: 15.11.2015
Сообщений: 9,396
05.02.2020, 11:02
Вообще описывается, событие OnSelectCell возникает перед тем, как фокус перейдёт в ячейку. То есть, именно движение курсора клавишами он пресекает.
А если щёлкнуть туда мышкой, то происходит выделение области от предыдущего места до запрещённой ячейки, куда щёлкнули.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2020, 11:02
Помогаю со студенческими работами здесь

StringGrid, как ограничить количество знаков после запятой?
считываю данные из файла и записываю в таблицу StringGrid. в ней вместо, например, 0,63 выводится 0,6299997.. не подскажете как разрешить...

Выделение в StringGrid
В стринггриде мне нужно выделить область после чего подсчитать сколько в ней 1 и 0 после чего закрасить выделенную область. Проблема в...

Выделение ячейки в Stringgrid
Как выделить отдельную ячейку(допустим 1,1) в другой цвет и увеличить размер текста в этой ячейки?

StringGrid: Выделение и закрашивание
Вот задачка появилась на мою голову. Как сделать чтобы при выделении ячеек на Stringgrid и нажатии например кнопки &quot;Button&quot;, то...

Выделение ячеек StringGrid
Ребят, что-то я совсем туплю... У меня есть Листбокс и СтрингГрид. В ListBOx 7 строчек в StringGrid 6 столбцов и 7 строчек. Хочу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru