Шел 2019-й год... а MS Excel по-прежнему не научился рассчитывать высоту строки если в ней есть объединённые ячейки... И метод Range.AutoFit, который "Changes the height of the rows in the range to achieve the best fit", нас не спасёт.
Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами
21 февраля 2019
28 ноября 2017
Oracle Streams и AQ_TM_PROCESSES
Параметр Oracle AQ_TM_PROCESSES в очередях сообщений контролирует мониторинг времени и обработку сообщений с задержкой и заданным сроком действия. Он может принимать значение от 0 до 10. Установка параметра AQ_TM_PROCESSES в ноль отключает Queue Monitor Coordinator, что, как написано в документации Oracle, приведет к серьезным проблемам в работе Oracle Streams. Но даже значение отличное от нуля может привести к проблемам. У моего заказчика при AQ_TM_PROCESSES = 1 трейс-файлы начали "распухать" от сообщений "Streams AQ: waiting for messages in the queue".
19 ноября 2015
RAD Studio 10 Seattle Update 1
Компания Embarcadero Technologies выпустила первое обновление RAD Studio 10 Seattle. Оно исправляет несколько сотен ошибок, подробнее... В этой бочке мёда не обошлось без ложки дёгтя: это обновление только для владельцев RAD Studio 10 Seattle с лицензией "Update Subscription" (в менеджере лицензий в описании лицензии должен быть пункт "Is Subscription"). Таким образом, остальные покупатели RAD Studio 10 - в пролете, и после установки этого обновления будут вынуждены поставить старую версию.
Delphi 10 Seattle Web Install (includes Update 1)
C++Builder 10 Seattle Web Install (includes Update 1)
RAD Studio 10 Seattle Web Install (includes Update 1)
Delphi 10 Seattle Web Install (includes Update 1)
C++Builder 10 Seattle Web Install (includes Update 1)
RAD Studio 10 Seattle Web Install (includes Update 1)
24 октября 2015
Изучайте используемый инструментарий!
Вчера начал разбираться с чужим проектом на Delphi 7. Система весьма сложная – несколько взаимосвязанных АРМов по 20-50 форм (а может и больше, точно не считал). Усложняет все то, что она разрабатывается уже давно и пережила смену нескольких команд разработчиков. Каждая команда приносила в проект свои инновации. Например, одна из них перевела доступ к БД Oracle с BDE на ADO. При этом все старые объекты для работы с базами через BDE (TDatabase, TTable, TQuery и TStoredProc) продолжают лежать на формах рядом с их копиями для работы через ADO (TADOConnection, TADOTable, TADOQuery и TADOStoredProc). Они даже клонировали объекты TDataSource для ADODataSet'ов. Все замеченные беглым взглядом "интересные" моменты перечислять не буду, а вернусь к заголовку этой заметки. Одна из команд добавила в проект DBGridEh из EhLib 6.0 в компанию к стандартному DBGrid'у. Хороший выбор grid'а, одобряю ;-) Хочу поделится с вами их реализацией сортировки по клику на заготовке колонки. К каждому DBGridEh'у, подчеркиваю - к каждому DBGridEh'у, был написан обработчик OnSortMarkingChanged:
Еще, как зануда, отмечу, что вещи в стиле
Так, что господа, те кто считает себя программистом, дружите с Try...Finally...End и главное - ИЗУЧАЙТЕ ИСПОЛЬЗУЕМЫЙ ИНСТРУМЕНТАРИЙ!!!
В одном из АРМ'ов только на главной форме больше 20 DBGridEh'ов лежащих на страницах TNotebook. И на каждый был написан свой обработчик! Если говорить о Delphi, или о объектно-ориентированном программировании в целом, то почему бы все эти десятки одинаковых обработчиков не заменить на один, где вместо gridXYZ использовать TDBGridEh(Sender) (или (Sender as TDBGridEh)), а вместо dsXYZ.DataSet использовать TDBGridEh(Sender).DataSet? Но самое интересное, что для сортировки в DBGridEh и такого обработчика писать не надо. EhLib для автоматической сортировки данных в DataSet'е имеет набор специальных объектов и от программиста требуется только добавить в раздел "uses" любого модуля в проекте один из модулей EhLibXXX (EhLibBDE, EhLibADO, EhLibCDS... в зависимости от подключенного к grid'у DataSet'а). Таким образом, вместо написания и копипаста десятков обработчиков OnSortMarkingChanged нужно было всего лишь подключить к проекту небольшую юниту EhLibADO.... dsXYZ: TDataSource; gridXYZ: TDBGridEh; ... procedure TfmMain.gridXYZSortMarkingChanged(Sender: TObject); var i: Integer; s: String; b: TBookmark; begin Screen.Cursor := crHourGlass; b := dsXYZ.DataSet.GetBookmark; s := ''; for i := 0 to gridXYZ.SortMarkedColumns.Count - 1 do begin s := s + gridXYZ.SortMarkedColumns[i].FieldName; if (gridXYZ.SortMarkedColumns[i].Title.SortMarker = smDownEh) then s := s + ' DESC'; s := s + ';'; end; TADODataSet(dsXYZ.DataSet).IndexFieldNames := s; dsXYZ.DataSet.GotoBookmark( b ); Screen.Cursor := crDefault; end;
Еще, как зануда, отмечу, что вещи в стиле
необходимо использовать совместно с конструкцией Try...Finally...End, т.к. если между этими строчками во время выполнения программы произойдет ошибка, то курсор не будет восстановлен. Т.е. нужно было написать так:Screen.Cursor := crHourGlass; ... Screen.Cursor := crDefault;
А еще к восстановлению курсора в блок Finally...End было бы неплохо, для высвобождения памяти распределенной при вызове GetBookmark, добавить DataSet.FreeBookmark(b). Это же элементарно – для всех изменяемых или создаваемых ресурсов, на случай ошибки, нужно гарантировать возвращение их к исходному состоянию или высвобождению занимаемой ими памяти.Screen.Cursor := crHourGlass; Try ... Finally Screen.Cursor := crDefault; End
Так, что господа, те кто считает себя программистом, дружите с Try...Finally...End и главное - ИЗУЧАЙТЕ ИСПОЛЬЗУЕМЫЙ ИНСТРУМЕНТАРИЙ!!!
08 октября 2015
Idera Inc покупает Embarcadero Technologies
Слухи о том, что компания Idera, Inc покупает компанию Embarcadero Technologies, которые появились на форумах и в блогах в середине сентября подтвердились. Вчера инвестиционная компания Thoma Bravo, LLC опубликовала об этом событии свой пресс-релиз. А немного позже был опубликован и официальный пресс-релиз "Idera Announces Intent to Acquire Embarcadero, Expands Position in Database Management and Developer Tools Markets".
21 апреля 2014
FastReport VCL 5. Улучшение интерактивности
Интерактивные отчеты позволяют определить в отчёте действие, которое произойдет при щелчке мыши на каком-нибудь объекте отчета в окне предварительного просмотра. В предыдущих версиях FastReport существовало несколько способов сделать отчет интерактивным.
11 апреля 2014
FastReport. PDF-экспорт и встраивание шрифта
В списке новшеств FastReport VCL 5 значится "В PDF-экспорт улучшено встраивание шрифтов: вместо целого шрифта встраивается только используемое в отчёте подмножество символов шрифтов. Это позволяет значительно сократить размер файла". В своих программах я часто работаю с документами в PDF-формате, поэтому вопрос размера документа, экспортированного из FastReport в PDF-файл меня интересует.
Подписаться на:
Сообщения (Atom)