Рекомендации по наиболее полезной замене Delphi TStringGrid (Grid)

Одной из самых слабых сторон Delphi являются сетки (например, TStringGrid), где, хотя он хорошо выполняет основную работу, становится сложнее, когда вам нужно напечатать его или настроить его внешний вид. Я использую его около 15 лет, поэтому он хорошо встроен в мои приложения, и со временем я разработал собственные решения для преобразования TGrid в RTF (для печати через MSWord) и использовал TDrawGrid для дополнительной настройки. Мои решения (все еще) должны работать как в Delphi 7, так и в Delphi XE. Как оказалось, ни одна из моих сеток не привязана к БД, все они заполнены ячейками в коде.

Теперь я планирую разобраться в своих отчетах и ​​«навести порядок» в своих формах, что означает замену сетки более функциональной реализацией. Их много, и у меня есть две из них Developer Express Quantum Grid и пакет TMS Grid. Однако время очень ограничено, чтобы поэкспериментировать со шрифтами, цветами и печатью, и я был бы признателен за рекомендации, какую из многих комбинаций отчета сетки / печати и отображения я должен использовать. У меня пока нет генератора отчетов, и я подумывал о FastReports, но я открыт для предложений.


person Brian Frost    schedule 28.06.2011    source источник
comment
Вы не ошибетесь, выбрав пакет DevExpress. Изучение механики квантовой сетки занимает немного времени, но ROI огромен.   -  person whosrdaddy    schedule 28.06.2011
comment
То же самое и мое мнение: DevExpress очень мощный, но требует времени для управления. Это зрелый продукт, и печать также возможна с помощью компонентов для печати.   -  person Andreas    schedule 28.06.2011
comment
С помощью Dev Express cxGrid вы можете централизовать внешний вид своих сеток, используя один TcxStyleController. Экономит много усилий.   -  person Stuart    schedule 28.06.2011


Ответы (6)


Примерно в 1998 году я устал от TStringGrid и начал долгое путешествие вовне. Я активно использовал элементы управления виртуальными сетками, включая ExGridView Романа Мочалева (перенесенный в Delphi 2010/XE здесь) и управление квантовой сеткой от Developer Express и комплект для печати, который с ним связан, а также Virtual Tree View от Майка Лишке. да. Это вид дерева. Но если вы не создадите несколько уровней узлов, получится отличная виртуальная сетка.

В конце концов, ни один из них не идеален. Требования вашего приложения могут включать:

  • Печать. Если это так, я бы выбрал компоненты Developer Express, поскольку их компонент сетки и другие компоненты имеют встроенную поддержку печати в наборе для печати.

  • Много заказной живописи, но нет печати. Если это так, я бы вернулся к VCL TDrawGrid, потому что в противном случае более сложные системы раскрашивания будут только мешать вам.

  • Все просто. Если это так, я рекомендую ExGridView компонент. Все другие решения, кажется, помогают мне достичь цели на 98% и требуют тонны обслуживания для устранения сбоев пользовательского рисования, сбоев печати или чего-то еще. Если все, что вам нужно, это виртуальная сетка в стиле Windows 2000, показывающая данные из вашей модели, используйте ExGridView.

  • В будущем может потребоваться вложение узлов (дерево). Тогда просто начните с VirtualTreeView прямо сейчас и используйте его как сетку, а позже плавно добавьте функциональность дерева.

Есть гораздо больше «дополнительных требований», которые возможны в вашем случае, чем я могу придумать и перечислить здесь. Но именно эти «также» вещи будут (или должны) определять ваш выбор. Ваше приложение должно работать 24/7/365.25? Что ж, тогда будьте проще и избегайте причудливых вещей, которые позже вам навредят.

Поскольку вы заявляете, что вам нужна печать, красивый тематический рисунок и у вас уже есть компоненты Developer Express, это будет наиболее логичным выбором №1. Это стабильный, зрелый и высококачественный набор компонентов. Для других людей, которые просматривают этот вопрос позже, мое единственное предостережение заключается в том, что это сложное, тяжеловесное решение, и оно не подходит для 100% всех приложений Delphi, которым «просто нужна рабочая сетка лучше, чем TStringGrid». DevEx Quantum Grid может копировать почти все функции сетки, которые вы когда-либо видели в Outlook, например, включая функцию «группировать по».

person Warren P    schedule 28.06.2011
comment
Но будьте осторожны - DevExpress ограничивает свою поддержку определенными версиями Delphi. Точно не помню, но недавно был большой протест, когда они сказали, что собираются отказаться от поддержки Delphi 2010 (!) - в конце концов они отказались, но я не уверен насчет уровня поддержки D7 - если таковой имеется. - person shunty; 01.07.2011
comment
Я не использую DevExpress активно в каких-либо текущих проектах, но в проектах, в которых я его использовал, я достаточно хорошо знал код, чтобы поддерживать его самостоятельно. Я хотел бы предостеречь разработчиков, чтобы они всегда были готовы взять на себя поддержку или иметь стратегию выхода, и это относится к ЛЮБОМ стороннему контролю, а не только к экспресс-выражению разработчиков. И НИКОГДА не добавляйте в свое приложение ничего, для чего у вас нет исходного кода. - person Warren P; 01.07.2011

Виртуальное древовидное представление компонент может быть возможностью. Мы используем его как сетку в нашем приложении. Печатать не пробовал, но в ближайшее время попробую. Он может экспортировать в форматированный текст или html, что может быть полезно для этого.

РЕДАКТИРОВАТЬ: Между прочим, это открытый исходный код и довольно отточенный.

EDIT2: исправлено название компонента. Я сделал это изначально, но он потерялся, когда я сделал ссылку.

person boileau    schedule 28.06.2011
comment
Обычно называется компонентом Virtual Treeview. - person Warren P; 28.06.2011
comment
+1 отличный компонент, особенно если вы работаете с большими объемами данных. - person jpfollenius; 28.06.2011
comment
Мне потребовалось некоторое время, чтобы виртуальная идея вошла в мой мыслительный процесс (компонент не должен (не должен) владеть какими-либо данными). Однако это не должно быть таким сложным, если у вас уже есть все ваши данные, хранящиеся в объектах/переменных. - person boileau; 28.06.2011
comment
И... Вот что значит Виртуал. Ваши данные находятся в вашей модели (один раз), а не клонируются из вашей модели в ваши объекты TTreeNode. Таким образом, двум наборам объектов сложнее рассинхронизироваться, поскольку второго из этих двух наборов никогда не существовало. Не виртуальность - вот что сложно. - person Warren P; 29.06.2011
comment
@boileau: Как насчет поддержки печати для Virtual TreeView, пожалуйста? - person Brian Frost; 29.06.2011
comment
Я не видел прямой поддержки печати, я почти уверен, что вам придется выполнять какую-то обработку. - person boileau; 29.06.2011
comment
При печати Virtual TreeViews (а) вы можете сделать дешевый и грязный захват растрового изображения (что дешево, грязно и выглядит ужасно), или (б) вы можете создать эквивалент HTML или RTF (форматированный текст) и распечатать его, или вы могли бы (c) использовать систему групповых отчетов и настроить аналогичный набор столбцов. В конце концов (c) почти всегда лучше, потому что пользователям почти всегда нужно настраивать вывод, и почти всегда требуется какое-то диалоговое окно параметров отчета во время выполнения. - person Warren P; 29.06.2011

Я настоятельно рекомендую использовать ExpressQuantumGrid!

Вы можете подумать о фасадном классе TStringGridToCxGrid, который заменяет TStringGrid и переводит ваш устаревший код в TcxGrid.

person splash    schedule 28.06.2011
comment
@Splash: как мне это сделать? Интересный. - person Brian Frost; 28.06.2011
comment
Я рекомендую вам использовать Express Quantum Grid только в том случае, если вам нужно более 300 000 строк исходного кода и 3000 единиц дополнительной сложности. Иногда да, это то, что нужно. Но иногда это слишком много, слишком тяжеловесно. - person Warren P; 28.06.2011
comment
@Уоррен П: Согласен. Из-за своей мощности и гибкости TcxGrid по своей природе нетривиален и сложен. Но это в основном справедливо и для TWoman. ;-) - person splash; 28.06.2011
comment
По крайней мере, ты не сказал "Иррациональный", как Пи. - person Warren P; 28.06.2011
comment
@Brian Frost: Вы должны реализовать тот же интерфейс, который публикует TStringGrid. Внутренне вызовы свойств и методов должны быть сопоставлены с соответствующими TcxGrid членами. Некоторое время назад я написал функцию статического преобразователя, которая преобразует нашу пользовательскую сетку в TcxGrid во время выполнения, но ее также можно использовать в качестве фасадного компонента. - person splash; 28.06.2011
comment
@splash: осторожнее, мальчик... :-) Но по крайней мере ты сказал сложный, а не сложный ;-D - person Marjan Venema; 28.06.2011
comment
Разве математическое определение комплекса не состоит в том, что он содержит как действительные, так и мнимые элементы? - person Warren P; 28.06.2011

Меня всегда интересовал KGrid. Однако я не использовал его, кроме простого тестирования. Стоит проверить, если вы заинтересованы в бесплатной альтернативе.

person MarkF    schedule 28.06.2011
comment
Хороший. +1 за независимую (начиная с TCustomControl) сетку реализации. - person Warren P; 28.06.2011

Вы также можете рассмотреть возможность использования BergSoft NextGrids http://www.bergsoft.net/.

Практически ничего не стоит и имеет достойную поддержку

person JamesT    schedule 28.06.2011
comment
59 долларов США — это не так уж и много. Назовите это Разумным, доступным... Гораздо дешевле, чем DevEx. Истинный. - person Warren P; 28.06.2011
comment
Хорошая сделка. :-) Красивый вид тоже. - person Warren P; 28.06.2011
comment
Я купил BergSoft Suite несколько лет назад для Delphi 7 и никогда им не пользовался. Недавно я обновился до версии для XE8, и они оказались наиболее полезными. :) - person user1355041; 21.04.2017

Вы можете попробовать использовать библиотеку EhLib, включающую компонент TDBGridEh. Он дешевый и очень мощный. http://www.ehlib.com

person Silver    schedule 28.06.2011