CheckBox в StringGrid
Приветствую читателя! Совсем недавно писал некую программу для репостинга в социальной сети ВК. Речь пойдет как указанно в заголовке о CheckBox в StringGrid. Как говорится, полез в Гуголь за информацией по этой теме, скажу честно, не там искал, потратил более 2 часов, что бы засунуть Чек Бокс в СтрингГрид. И тут меня осенило! Оказывается можно обойтись и без TCheckBox вместо него можно использовать всего 2 символа!!! Для начала продемонстрирую результат: Конечно, на премию в области информационных технологий не тянет, но меня улыбнула простота исполнения. Не буду писать подробную инструкцию как это сделать, в общих чертах... 1. Берем TStringGrid 2. Так же понадобится шрифт "Wingdings" 3. 2 символа "ю" и "o" (Замечу ю русская, а о латинская и обе в нижнем регистре) Код в обработчике рисования: Кликните здесь для просмотра всего текста
А в событии OnClick: Кликните здесь для просмотра всего текста
переменная point это Type TDGPoint = record col, row : integer; end; в ней я храню координаты выделенных ячеек. Далее я думаю понятно, как получать статус нашего ЧекБокса И если в одной или нескольких ячейках поместить один из символов, мы получаем желаемый результат Исходник не выкладываю по некому обстоятельству. Концепция проста до безобразия! |
Всего комментариев 18
Комментарии
-
Цитата:Концепция проста до безобразия!
А в VCL нужно повозится.
Кроме того касательно этой статьи -для таких целей лучше использовать DrawGrid и рисовать в "стилях".
Есть тема с рисованием прогресс-бара правда для С++Builder, но принцип тот же:
https://www.cyberforum.ru/cpp-... 58481.html
И еще такая тема:
https://www.cyberforum.ru/cpp-... 13986.htmlЗапись от Avazart размещена 01.05.2017 в 13:49 -
Запись от Avazart размещена 01.05.2017 в 13:53 -
Цитата:Кроме того касательно этой статьи -для таких целей лучше использовать DrawGrid и рисовать в "стилях".
Что касается DrawGrid - TStringGrid наследник TDrawGrid
Кстати таким методом можно и анимацию замутить, например нумерация у меня реализована в этом проекте в другом потоке и использует общую ячейку памяти, и без всякой синхронизации.Запись от popryduhin размещена 01.05.2017 в 15:09 -
Цитата:Что касается DrawGrid - TStringGrid наследник TDrawGrid
Цитата:Кстати таким методом можно и анимацию замутить, например нумерация у меня реализована в этом проекте в другом потоке и использует общую ячейку памяти, и без всякой синхронизации.
Соболезную...Запись от Avazart размещена 01.05.2017 в 15:32
Обновил(-а) Avazart 01.05.2017 в 16:59 -
Цитата:К чему это вы? К тому что вы не умете писать код с многопоточностью?
Соболезную...
Я же не сую нос свой в >>многопоточностью?<<Запись от popryduhin размещена 01.05.2017 в 16:08 -
Уважаемый Avazart вы бы поменьше умели на форуме.
Вы наверное думаете что у меня этот код не работает???Запись от popryduhin размещена 01.05.2017 в 16:11 -
Запись от Avazart размещена 01.05.2017 в 16:30 -
Цитата:Было бы странно если бы он работал нормально при отсутствии синхронизации.
Я же написал что использую одну ячейку памяти где хранится StringGrid
и меняю значение
Класс
Delphi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Type /// <summary> /// Поток для нумирации строк /// Обращается к одной ячейки памяти таблицы /// </summary> TSGHreadNumbering = class(TTHread) private FPointSG: Pointer; FExit : boolean; public procedure ExitHread; procedure execute; override; Property PointSG : Pointer read FPointSG write FPointSG; end;
Delphi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{ TSGHreadNumbering } procedure TSGHreadNumbering.execute; var i_sg : integer; sg : TStringGrid; rowsC: integer; begin sg := Pointer(FPointSG^); while FExit = false do begin if sg <> nil then for i_sg := sg.FixedRows to sg.RowCount -1 do begin sg.cells[0, i_sg] := i_sg.ToString; end; sleep(40); end; end;
Запись от popryduhin размещена 01.05.2017 в 17:49 -
Вы сначала попробуйте, а после комментарий.
Хотя критика тоже уместна, Вы случаем не критик?Запись от popryduhin размещена 01.05.2017 в 17:51 -
Как вы думаете что в переменной находится? --->> sg := Pointer(FPointSG^);
Запись от popryduhin размещена 01.05.2017 в 17:52 -
Нельзя к TStringGrid(и любому другому VCL компоненту) обращаться без синхронизация во вторичных потоках(не GUI потоках).
Delphi 1
sg.cells[0, i_sg] := i_sg.ToString;
Это будет приводить к разным глюкам, типа намертвоподвисших окон или ошибок доступа к памяти.
Цитата:Вы сначала попробуйте, а после комментарий.Запись от Avazart размещена 01.05.2017 в 18:10
Обновил(-а) Avazart 01.05.2017 в 18:14 -
Цитата:Нельзя к TStringGrid(и любому другому VCL компоненту) обращаться без синхронизация во вторичных потоках(не GUI потоках).
Это будет приводить к разным глюкам, типа намертвоподвисших окон или ошибок доступа к памяти.
Но здесь идет не обращение к объекту, а изменение значения в конкретной ячейке памяти...
Прилагаю видео!
ТЫК
Исходник не могу скинуть зависимости есть, лень собирать все в кучу.Запись от popryduhin размещена 01.05.2017 в 21:37
Обновил(-а) popryduhin 01.05.2017 в 21:39 -
Цитата:А что тут пробовать? Коль и так видно... а главное предсказуемо тупо...
Ошибка доступа к памяти.
Я настаивать не буду. У меня работает безотказно как бы я не изменял значения и количество строк в SG.Запись от popryduhin размещена 01.05.2017 в 21:43 -
Цитата:У меня работает безотказно как бы я не изменял значения и количество строк в SG.
Вы попробуйте взять мышкой за заголовок окна программы и потаскать по экрану в момент когда вторичный поток пишет в ячейки и ваша программа повиснет наглуха.
Цитата:Для конкретного случая не каких конфликтов нет.
Цитата:Но здесь идет не обращение к объекту, а изменение значения в конкретной ячейке памяти...
При использование потоков неправильно написанная программа может "работать" в 9 случаях из 10, а при 1 падать...Запись от Avazart размещена 02.05.2017 в 00:06
Обновил(-а) Avazart 02.05.2017 в 00:13 -
Запись от Avazart размещена 02.05.2017 в 00:15 -
Цитата:И каким обидным словом вас называть после этого?
Если вы заведомо делаете через опу...
Потаскал я за шапку программы. Не чего не висит и не падает. Я не настаиваю на этом. И к статье это не как не относится к этой теме. Развел базар, обидным словом он решил назвать. Иди на базаре бабкам рассказывай про конфликт и AV. Я намеренно без синхронизации реализовал, ради эксперимента и он успешен по крайней мере пока.
И если ты уж такой не угомонный, реализуй и покажи мне этот конфликт, а не пускай пузыри...
Или ты только коменты можешь оставлять?
И я считаю, что на счет ЧекБоксов в СтрингГрид, твоя критика не уместна...
Такое ощущение что я кому то навязал свою идею и пытаюсь на этом настоять.Запись от popryduhin размещена 02.05.2017 в 00:56 -
Запись от Avazart размещена 02.05.2017 в 11:05
Обновил(-а) Avazart 02.05.2017 в 16:28 -
Цитата:Может не я умный, может вы слишком глупый?
Запись от popryduhin размещена 02.05.2017 в 11:07