powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Grids
27 сообщений из 27, показаны все 2 страниц
Grids
    #32306133
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, кто -нибудь реализовывал самостоятельно гриды?
И как вы к этому относитесь?
...
Рейтинг: 0 / 0
Grids
    #32306182
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КРАЙНЕ ПОЛОЖИТЕЛЬНО!!!

имею несчастье использовать в своем проекте MFC грид с codeproject.
такое кривописье еще поискать...
короче начинал я грид раза 3, обламывался, там как минимум 5-7 чел/мес чистой работы, вот если бы с кем-то...
...
Рейтинг: 0 / 0
Grids
    #32306418
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брат, давай я те пришлю маааленький такой пректик, ты заценишь и скажешь
что об этом думаешь.
...
Рейтинг: 0 / 0
Grids
    #32306551
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и мне :-)
я тоже не прчь свой грид забабахать, потихоньку двигаюсь в этом направлении(ну очень потихоньку).

у меня такая мысль о гриде:

грид сам по себе рисует только рамку, строки, столбцы и ячейки.
строки и столбцы рисуют свои линии образуя сетку и рисуют скроллбары.
ячейки - это список обячеек.
каждая ячейка самостоятельно себя рисует там где она должна быть.

тоесть типа как в экселе. ну и плюс возможность редактирования различных типов данных в различных форматах. ну и плюс печать.
что скажете?
...
Рейтинг: 0 / 0
Grids
    #32306559
_Konst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лично я всегда использую наследника стандартного CListCtrl
с расширенными стилями типа LVS_EX_GRIDLINES в режиме виртуального списка. Пока ни разу не обламывался, чего и всем желаю.
...
Рейтинг: 0 / 0
Grids
    #32306588
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alex_k
Мыслишь очень-очень верно...
Я короче выложу исходники своего творчества, а вы скажете
кому что не нравится.... договорились?
всё буит завтра...
...
Рейтинг: 0 / 0
Grids
    #32306836
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давай! прикол

2 alex_k
да, примерно...

я сразу разрабатывал 3 класса в иерархии:
1. Берет сообщения виндоуз и преобразует их в вызов виртуальных функций, отвечает за "диспечерезацию", вызов прорисовки, "таскание" хедеров и пр. Класс большей частью виртуальный, все остальное ему подают наследники...

давай код, если что - можно попробовать на какой-нить CVS забабахать.
...
Рейтинг: 0 / 0
Grids
    #32307084
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas
Я тебе бросил на мыло...
свой сайт... не знаю успею ли доделать сегодня...
с регистрацией DNS заморочка...
...
Рейтинг: 0 / 0
Grids
    #32307259
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas ну что? не посмотрел еще?
...
Рейтинг: 0 / 0
Grids
    #32307892
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas
куда ж ты пропал? ни ответа ни привета
мой ICQ: 233710174
...
Рейтинг: 0 / 0
Grids
    #32308187
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
куда ж ты пропал? ни ответа ни привета

сорри,
во-первых - разница во времени,
во-вторых - делал срочную демонстрашку на C#, домой доехал только в 2 ночи, посмотрю сегодня обязательно, уже кое-что меня там прикололо...
...
Рейтинг: 0 / 0
Grids
    #32308189
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, все ясно,\r
сходи плиз по этой ссылке\r
прикол?\r
\r
я ту либу начал разрабатывать именно для того, чтобы грид на ней сделать \r
\r
делать его на MFC - себя не уважать\r
\r
в промежуточных результатах я продвинулся чуть дальше, ты дальше в работающем прототипе, похвально\r
\r
если есть столько энергии и времени, могу свою либу закинуть для затравки,\r
у меня, к сожалению, времени в обрез в последнее время, максимум могу 1 час в день этим заниматься, но оно того стоит, надеюсь, что немного погодя (в начале декабря) появиться чуть больше времени\r
\r
смотрю все чаще народ от MFC и ATL отходит, пральна
...
Рейтинг: 0 / 0
Grids
    #32308378
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas
А вообще, есть какие-то конкретные замечания?

Вообще когда я это всё делал, то основывался на следующих идеях:
1) У каждого окна есть длинное целое, поторое может служить указателем на класс, который обслуживает данное окно, и доступно через SetWindowLong GWL_USERDATA
2) Всё что я получу должно быть независимо от каких либо библиотек типа
MFC/WTL/Qt т.е. быть самодостаточным.Т.е. Их можно будет встроить в любой проект.
3) Какждый контрол должен быть максимально интеллектуальным, т.е. сам обрабатывать/сохранять свои данные а не передавать эти функции родительскому окну, т.е. не использовать DDX
4) Интерфейс классов должен быть максимально простым (максимум 20 виртуальных методов)

Что касается грида - то он должен использовать стандартные контейнеры, которые имеются в STL- простой массив, vector,deque.
грид должен реализовываться через шаблон:

UIGrid<someclass,long cnt=0> theGrid;

где someclass - нечто производное от UIRow , которое имеет вирт метод
Draw(UIDraw& draw)
что и как рисовать - передается по ссылке через структуру UIDraw
по-иоему всё достаточно просто.
...
Рейтинг: 0 / 0
Grids
    #32309645
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дайте мне посмотреть :-)

где someclass - нечто производное от UIRow , которое имеет вирт метод
а может не строку а ячейку?
...
Рейтинг: 0 / 0
Grids
    #32309666
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно просто,
замечания есть

1. что-то грид себя ведет не очень :)
2. ничего страшного, если виртуальных методов будет больше
3. подход, мягко говоря, "в лоб"
4. модель грида представляю себе сложнее, как минимум надо отделить:
- сам грид
- источник данных
- продумать систему событий, причем "человеческую", а не через сообщения Windows или только лишь через виртуальные функции

обычно я делю классы/компоненты по следующему признаку:
- те, которые легко и быстро разработаны, но трудны и не гибки в использовании
- те, которые достаточно сложны по внутренней архитектуре, но удобны для использования "клиентом" класса/компонента.

----
Что подразумевает под собой разработка своей GUI-либы, как минимум:
#1 управление потоками, т.к. все события на конкретное окно приходят только в рамках того потока, в котором это окно было создано,
#2 из #1 вытекает необходимость разработки (раз уж на то пошло) всей "обвески" для управления процессами, потоками, памятью, событиями, синхронизацией, task-ами, таймерами и т.д. и т.п.
#3 достаточная объектная модель визуальных компонентов, надо отходить от понятия "окно" (UIWindow) и переходить к более абстрактным Control->ControlContainer->Form->MDIMainForm и т.д. Почему? Хотя бы потому, чтобы иметь одну и ту же объектную модель для обычного контрола и window-less контрола.
#4 обработка сообщений Windows, у тебя все на этом построено, а я это прячу в одном из базовых классов, т.е. ты можешь свой некий класс (своя кнопка, к примеру), унаследовать как от обычного контрола, так и от Window-less контрола, что позволит тебе легко и единообразно разработывать сложные GUI элементы
#5 независимость от MFC/ALT/WTL - гут! но надо продумать схему взаимодействия с другими окнами для этих ситуаций
#6 нужна своя модель для графических ресурсов и систему слежения за этими ресурсами

Когда я говорил о том, что достиг больше промежуточных результатов, то имел ввиду, что пп1-6 уже реализованы в разной мере, но до готового грида я пока не дошел :), вот если бы за деньги заказали, а так я "наваливаюсь" разве что периодически из интереса
да и дело не только в гриде, своей целью ставлю разработать вообще всю палитру контролов, т.к. стандартные или идущие с IE ну ни как не удовлетворяют. (эхххх, голубая мечта... тьфу, не в том смысле )

Я уже делал подобную попытку, послал свой материал на рассмотрение некоторым товарищам, но, похоже ни у них ни у меня нет достаточного свободного времени заниматься этим.

Если у тебя есть время и силы на эксперименты, с удовольствуем помогу, блин, просто не хватает человека, который бы этим занимался все время. К тому же, надеюсь (почти уверен), что к этому делу с удовольствием присоединятся еще несколько человек. :)

---
Повторюсь, в любом случае - похвально, хотя и бажит :)
Есть желание повторить на чуть более серьезном уровне?
...
Рейтинг: 0 / 0
Grids
    #32309943
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alex_k
мыло то оставь) мой - fouga@progress-neva.ru
...
Рейтинг: 0 / 0
Grids
    #32309994
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas
На счет свободного времени - у меня его тоже не очень.. занимаюсь "этим" разве что по выходным и по вечерам когда силы остаются.

2 alex_k
>где someclass - нечто производное от UIRow , которое имеет вирт метод
а может не строку а ячейку?

Знаешь, я сначала тоже думал что нужно плясать от ячейки, но потом понял - это тупиковый вариант. Получается в конце концов, что каждая ячейка должна быть производной от какого-то базового класса. Типов ячеек - может быть мульён. Вот например:
1) данные в ячейке должны быть представлены определенной bmp
2) данные в ячейке не просто строка - а несколько строк например:сумма в рублях/ сумма в валюте
Попробуй такую фигню реализовать на стандартных гридах? может быть и сможешь, но во что тебе это станет?

2) vdimas
Когда я еэто всё писал у меня была цель не создать каку-то монолитную библиотеку, а просто некоторый набор конкретных ресурсов, любой из которых можно было бы выделить и не использовать всё остальное.
Пример с MFC - попробуй допустим взять там какой-то один компанент и использовать только его, Пусть даже хотябс CComboBox. Это просто невозможно. А я сделал так, что если тебе нужен только Grid (который у меня называется UICage -клетка) то бери только его.

По поводу того, что Грид плохо работает, давай по подробнее.
1) размер заголовков менять можно и в высоту и в ширину
2) Листание страниц сделано нормально, но полосу прокрутки я еще не доделал. Объясняю почему.
Полоса прокрутки нужна только тогда, когда тебе известно количество записей в контейнере. А я зачастую просматриваю таблицы в которых по миллиону строк. Ну не тащить же их себе все на станцию... поэтому
у меня есть собственный контейнер типа deque через который я всё это делаю.
Когда это у меня заработает, я тебе покажу.
А с vector и простым массивом я полосу прокрутки сделаю. Скоро)))
...
Рейтинг: 0 / 0
Grids
    #32310577
ujeen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извините, а чем не подходят гриды от сторонных разработчиков ?
от infragistics например ?
...
Рейтинг: 0 / 0
Grids
    #32310748
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ujeen
гриды на самом деле не такая уж сложная штука.
Просто хочется чтоб при максимуме возможностей было минимум затрат
...
Рейтинг: 0 / 0
Grids
    #32310832
ujeen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2gardenman

то есть для вас
vdimas писал:как минимум 5-7 чел/мес чистой работы
немного ?
...
Рейтинг: 0 / 0
Grids
    #32310868
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шутка?) на самом деле реализовать грид - это примерно 2 недели работы..причем не напрягаясь... Но вот путёвый грид - эт месяца 2-3 подумать а потом - реализовывать)
...
Рейтинг: 0 / 0
Grids
    #32310912
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шутка?) на самом деле реализовать грид - это примерно 2 недели работы..причем не напрягаясь

Шутка? А сколько элементов управления для РЕДАКТИРОВАНИЯ ячеек в таком гриде.
Для примера, в переделанном мною MFC Grid от codeproject их 10 и только их разработка заняла в общей сумме на неделю больше.

А если стоит задача отобразить нечто в клеточку и прокручивающееся, дык это за 4 часа можно сделать, добавить ресайз колонок - еще 2 часа...

дело-то не в этом.

Знаешь, я сначала тоже думал что нужно плясать от ячейки, но потом понял - это тупиковый вариант. Получается в конце концов, что каждая ячейка должна быть производной от какого-то базового класса. Типов ячеек - может быть мульён. Вот например:
1) данные в ячейке должны быть представлены определенной bmp
2) данные в ячейке не просто строка - а несколько строк например:сумма в рублях/ сумма в валюте
Попробуй такую фигню реализовать на стандартных гридах? может быть и сможешь, но во что тебе это станет?

1)это да, ПОЧТИ каждая. Используя продумманную объектную модель можно обыграть случаи, когда ячейка уникальна для каждой клеточки, или когда имеем регулярную структуру типа грида для отображения/редактирования таблицы БД, тогда ячеек надо столько, сколько колонок и не больше.
2) кто мешает сделать тип ячейки - "контейнер ячеек", которая при своей перерисовке и обработке событий просто передает их дочерним элементам?

А нет стандартных гридов, ActiveX - не в счет.
А Infragistics - мощщщща, но торррррмозззз....

2) vdimas
Когда я еэто всё писал у меня была цель не создать каку-то монолитную библиотеку, а просто некоторый набор конкретных ресурсов, любой из которых можно было бы выделить и не использовать всё остальное.
Пример с MFC - попробуй допустим взять там какой-то один компанент и использовать только его, Пусть даже хотябс CComboBox. Это просто невозможно. А я сделал так, что если тебе нужен только Grid (который у меня называется UICage -клетка) то бери только его.

ты сам ответил на свой вопрос
можно написать именно библиотеку т.е. оформить в виде библиотеки, а в конечное приложение во время сборки из библиотеки попадают только те классы и только те их методы (невиртуальные! виртуальные попадают всегда, если попадает класс), которые реально используются
...
Рейтинг: 0 / 0
Grids
    #32310944
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2gardenman
виноват :-) вот мыло
alex_k на trk7 точка ru
(чтоб спамеры всякие не нашли)

насчет ячеек тебе Димас написал, я с ним согласен, конечно нужно сделать один базовый класс для всех ячеек. в моем гриде(громко сказано, ничего нет еще) ячейка может быть сколько угодно столбцов в ширину и строк в высоту, это я по поводу нескольких строк в ячейке.
...
Рейтинг: 0 / 0
Grids
    #32311474
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу базового класса ячейки:
Я чейка должна уметь только одно - рисовать себя в отведенном для этого
участке окна.

По поводу редактирования ячейки по месту:
ненавижу когда так реализуют интерфейс к БД.
Редактирование строки должно быть через форму.
Если хотите, давайте пообсуждаем эту тему.
...
Рейтинг: 0 / 0
Grids
    #32312344
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а че тут обсуждать?

садится девочка за набивку накладной, перед ней лист из 300 и более строчек, она открыла грид и пошла и пошла...
а заставь ее дважды кликать на каждой строке - услышишь все, что она о тебе думает

тоже самое от бухгалтера, когда он выписку из банка на 150 строк набивает...

разумеется, полно ситуаций таких, что удобнее открывать форму для каждой строки, но ситуации разные бывают.
...
Рейтинг: 0 / 0
Grids
    #32313098
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для меня, при редактировании с помощью грида всегда был и остается такой вопрос:
на каком этапе в этом случае начинается и на каком этапе заканчивается транзакция?
И как при этом поведут себя блокировки? Ведь база будет тормозить...
А на счет того, что вызов формы - это неудобно, эт вы зря.
Форма может вызываться простым нажатием клавиши ,... ну например Ins.
Ну, а после заполнения формы - жмешь Энтер, и выполняешь транзакцию.
Написать такое намного проще. Это еще ерунда, когда в таблице всего десяток колонок... А если таким образом нужно вводить не просто выписку, а платёжное поручение? сколько там всяких параметров может быть?
Скажи честно - формы тебе делать лень, и просто легче всё свалить на грид,
дескать указал тока колонки, а дальше хоть трава не расти.

Ну а насчет ввода больших объемов - эт вообще по-другому автоматизировать надо. На то есть сканер:)

Короче так - сделать чтобы через формы ввод был удобным - элементакрно) включи просто фантазию:)
...
Рейтинг: 0 / 0
Grids
    #32313381
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman писал:Написать такое намного проще. Это еще ерунда, когда в таблице всего десяток колонок... А если таким образом нужно вводить не просто выписку, а платёжное поручение? сколько там всяких параметров может быть?
Скажи честно - формы тебе делать лень, и просто легче всё свалить на грид,
дескать указал тока колонки, а дальше хоть трава не расти.

будем считать, что ты упустил эти строки из моего предыдущего поста:
разумеется, полно ситуаций таких, что удобнее открывать форму для каждой строки, но ситуации разные бывают.

автор писал:на каком этапе в этом случае начинается и на каком этапе заканчивается транзакция?
на этапе сохранения всего документа. В процессе подготовки грид может с оторванным рекордсетом работать.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Grids
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]