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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2008, 23:39   #1
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию как создать grid?

Хочу создать у себя в программе возможность просмотра неких моих данныв в табличной форме. Отсюда возникает проблема, каким образом это сделать. Наверное есть два решения - создать к каждому конкретному объекту данных отдельный EDIT, это первый способ, второй - создать некий прямоугольник с перманентным количеством edit-ов и прокручивать-скроллировать данные по этим edit-ам. Первый способ безусловно проще, но есть опасение на счет ограничения по количеству создаваемых edit-ов, ведь в ОС есть ограничение по этому поводу, а данные могут быть большими. Интересно так же, как это реализовано в том же Екселе, где визуально - этих edit-ов бесконечно много.
romets вне форума Ответить с цитированием
Старый 23.01.2008, 00:27   #2
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

Чем вас не устраивает StringGrid?
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 23.01.2008, 01:52   #3
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Если вам не трудно, то может просветите? Есть такой стандартный элемент в Windows? Или вы все-таки имели в виду что-то из MFC или компонентов Дельфи? Но мы же тут о программировании на Win Api собственно...
romets вне форума Ответить с цитированием
Старый 23.01.2008, 08:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Экзел делался не одним человеком.
А в принципе можно самому разлинеить какое-нибудь окно, прикрутить к ней Скролы и написать вывод данных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.01.2008, 10:43   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

В принципе, можно воспользоваться классом List View. Это стандартный класс из common controls, имеется во всех версиях Win32 без всяких MFC и т.п. Но вообще-то, проще сделать вручную, работы там немного, и больше с данными, нежели с рисованием.
B_N вне форума Ответить с цитированием
Старый 23.01.2008, 13:12   #6
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Так вот мне и хотелось бы услышать совет по тому, как это лучше, оптимальнее сделать вручную (см. первый пост).
romets вне форума Ответить с цитированием
Старый 23.01.2008, 13:22   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
Так вот мне и хотелось бы услышать совет по тому, как это лучше, оптимальнее сделать вручную (см. первый пост).
Третий вариант: Edit - один для текущей клетки. Все остальное - просто отрисовка данных в Paint.
alexBlack вне форума Ответить с цитированием
Старый 23.01.2008, 13:45   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
Так вот мне и хотелось бы услышать совет по тому, как это лучше, оптимальнее сделать вручную (см. первый пост).
Вы имеете в виду написать код целиком? Если до вечера дотерпите, в общих чертах набросаю . Уточните только, как у Вас данные будут храниться или через какой интерфейс их можно получать.
B_N вне форума Ответить с цитированием
Старый 23.01.2008, 17:25   #9
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Цитата:
Третий вариант: Edit - один для текущей клетки. Все остальное - просто отрисовка данных в Paint.
Да, я уже мельком думал о подобном. Возможно и Ексель так организован?

Цитата:
Вы имеете в виду написать код целиком? Если до вечера дотерпите, в общих чертах набросаю . Уточните только, как у Вас данные будут храниться или через какой интерфейс их можно получать.
Уважаемый, B_N, не хотелось бы вас так беспокоить. Но если это для вас пустяшно, то данные у меня хранятся в банальном текстовом файле. Блоки данных с одинаковым количеством строк в каждом разделены символом #. Соответственно количество полей в этой импровизированной БД определяется данным количеством строк.
romets вне форума Ответить с цитированием
Старый 24.01.2008, 02:46   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Вы на верном пути. На полный исходник у меня времени не хватит, сорри, но принцип вот:

Нужно сразу принять решение, где Вы будете хранить данные. "Внутри" контрола - быстрее и проще, но хуже по расходу памяти, снаружи - чуть медленнее, но экономится память (особенно если одни данные идут в несколько разных окон), проще организовать обмен данными, проще расширять проект в дальнейшем и ограничения на само количество строк/столбцов больше теоретические.

Я думаю, что Вам стоит сделать элемент с такой иерархией: на самом верху "пустое" окно, которое будет диспетчером для всех сообщений и контейнером для двух скроллбаров, собственно Grid'а и простого Edit-контрола, а саму сетку просто тривиально рисовать. По WM_LBUTTONDBLCLK в сетке можно просто показывать (и потом прятать) Edit по нужным координатам, в принципе, для удобства можно перехватить его оконную процедуру и обрабатывать ее в самом контейнере, в контейнере стоит предусмотреть обработку WM_GETDLGCODE, например, на случай VK_RETURN ну и простой интерфейс для данных, буквально шесть функций - добавление/удаление столбцов, добавление/удаление строк и GETITEM/SETITEM (и аналогичный набор в самой сетке). Ну и само собой, лучше всего обмен данными между сколлбарами, сеткой и Edit'ом вести через контейнер, например в форме WM_COMMAND или WM_NOTIFY. Если есть какие-то технические вопросы, давайте.
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Grid nimf Общие вопросы Delphi 2 22.04.2008 13:16
Печать содержимого DB Grid Prisian БД в Delphi 4 06.09.2007 23:02
Кто подскажет про (Grid) chingiz Помощь студентам 5 23.05.2007 17:48
Help!Grid и Edit Дамир БД в Delphi 1 16.02.2007 02:05