Достаточно давно специализируюсь на автобизнесе. Основная конфигурация Альфа-Авто 4/5. В какой-то момент потребовался "живой" визуальный инструмент, чтобы повысить удобство планирования. Т.к. писалось все под обычные формы, то реализовано в виде ActiveX.
У меня работает на платформе 8.3.10
Для адаптации под управляемые формы можно использовать вот эту разработку. (не проверял :)
Основные возможности:
- Режим отображения дней или часов с возможностью установить границы
- Независимая временная градация интервалов для каждого ресурса
- Возможность интерактивно добавить/удалить/передвинуть интервал - отрабатывает событие.
- Возможность запретить редактирование конкретного интервала
- Возможность запретить добавление интервала для определенного ресурса
- Подсказка при наведении на интервал
- Подсветка группы интервалов - нажмите и удерживайте кнопкой мыши
- Все интервалы "кликабельны"
- Увеличение/уменьшения масштаба (Zoom) - используйте колесо прокрутки мыши
- Что-то еще... если вспомню - допишу
Зависимости:
.NET Framework 4
Регистрация библиотеки:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe " "C:\<Путь к файлу >\DMSTimeLine.dll"" /codebase
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe " "C:\<Путь к файлу >\DMSTimeLine.dll"" /codebase (для X64)
Функции:
int initTimeLine(int startHour, int stopHour)
Инициализирует компонент в режиме часов.
startHour - час начала (Число)
stopHour - час завершения (Число)
Всегда возвращает 0.
int initDateLine(DateTime startDate, DateTime stopDate)
Инициализирует компонент в режиме дней
startDate - дата начала (Дата)
stopDate - дата окончания (Дата)
Всегда возвращает 0.
object addLine(string name, string label, int splitSec, bool allowAdd)
Выводит линию ресурса
name - имя/идентификатор линии (Cтрока)
label - выводимый текст (Cтрока)
splitSec - кратность интервалов на линии в секундах (Число)
allowAdd - разрешение добавлять интервал в пользовательском режиме (Булево)
Возвращает Объект линии. Используется для передачи в методе addTimeSpan.
int addTimeSpan(object tlLine, DateTime dtStart, DateTime dtEnd, String color, String label, String ttInfo, int id, String groupId, bool allowChange)
Выводит временной интервал на линию
tlLine - объект линии
dtStart - начало интервала (Дата)
dtEnd - окончание интервала (Дата)
color - цвет (Строка)*
label - выводимый текст (Строка)
ttInfo - текст подсказки (Строка)
id - идентификатор интервала (Число)
groupId - идентификатор группы интервалов (строка).
allowChange - разрешение на редактирование в пользовательском режиме (Булево)
Всегда возвращает 0.
void clearTimeLine()
Очищает элемент управления от содержимого
int setTimeSpanColor(int id, String color);
Устанавливает цвет интервала
id - идентификатор интервала (Число)
color - цвет (Строка)*
Возвращает 0 (цвет установлен), -1 (идентификатор не найден)
События:
onSpanClick(int spanId)
Двойной клик по интервалу
spanId - идентификатор интервала (Число)
onNewSpan(String lineName, DateTime start, DateTime end)
Обозначен новый интервал
lineName - имя/идентификатор линии (Cтрока)
start - начало интервала (Дата)
end - окончание интервала (Дата)
onSpanChange(int spanId, DateTime start, DateTime end)
Изменен интервал
spanId - идентификатор интервала (Число)
start - новое начало интервала (Дата)
end - новое окончание интервала (Дата)
onSpanDelete(int spanId)
Удален интервал
spanId - идентификатор интервала (Число)
Примечание:
* Имена цветов можно брать из документации на сайте Microsoft. Если цвет не найден, то будет установлен Красный.