|
![]() |
#1 |
Moderator
|
Проект не прицепил по 2-м причинам. Во первых, мне казалось все очевидно. Во вторых, проект сильно завязан на другой большой проект, частью которого он является.
Поэтому предложение - я сейчас распишу все куски кода, если что-то будет все-таки не понятно, подготовлю тестовый пример. Итак: 1. Создаем форму, размещаем на ней ListView (listCtrl) 2. На форме создаем методы: class declaration X++: boolean pulse; // для мигания стрелки int timer; // для тайминга прорисовки X++: public void init() { ; super(); listCtrl.addColumn(1, new FormListColumn("Операция", 1, 200)); listCtrl.addColumn(2, new FormListColumn("Прогресс", 2, 80)); imageList = gm_txRegMainClass::createImageList(['gm_archive', 'gm_next', 'gm_back', 'final']); listCtrl.setImagelist(imageList); timer = WinApi::getTickCount(); } Метод, который отображает перечень задач: X++: void setActionList(gm_containerCollection _actions) { gm_ContainerEnumerator enumerator = _actions.getEnumerator(); FormListItem item; int idx; ; while (enumerator.moveNext()) { item = new FormListItem(enumerator.current(), 0); idx = listCtrl.addItem(item); listCtrl.setText(idx, '0%', 1); } WinApi::updateWindow(element.hWnd()); } Метод отображающий прогресс операции: X++: void setPercent(int _idx, str _percent) { FormListItem item; ; item = listCtrl.getItem(_idx); if (WinApi::getTickCount() - timer > 500) { if (pulse) item.image(1); else item.image(2); pulse = !pulse; timer = WinApi::getTickCount(); listCtrl.setItem(item); listCtrl.setText(item.idx(), _percent, 1); WinApi::updateWindow(element.hWnd()); } } Для удобства метод завершения задачи: X++: void setFinalStatus(int _idx) { this.setPercent(_idx, 'Готово'); this.changeImage(_idx, 3); } X++: // Показ формы object initProgressBar(container _steps) { Args args = new Args(); Object formRunObject; FormRun formRun; ; args.name(formstr('gm_reportProgressForm')); formRun = ClassFactory.formRunClass(args); formRun.init(); formRun.run(); formRunObject = formRun; formRunObject.setActionList(new gm_ContainerCollection(_steps)); formRunObject.setCaption('Сбор значений'); return formRunObject; } void run() { progressBar = this.initProgressBar([' Сохранение документа',' Захват значений', ' Учет настроек HQ консолидации',' Составление списка ячеек', ' Удаление старых значений', ' Открытие файла']); this.openDocument(); progressBar.setFinalStatus(0); // мы сделали первую задачу delete_from values where values.ReportId == report.ReportId; progressBar.setFinalStatus(1); // мы сделали вторую задачу num = this.total(); cnt = 0; while select valuesSetup where valuesSetup.ReportType == report.ReportType { this.processCellSetup(valuesSetup.SheetName, valuesSetup.ExcelLabel); cnt++; progressBar.setPercent(2, strfmt('%1', cnt/num * 100) + '%'); // отображаем процесс длиетльной операции } progressBar.setFinalStatus(2); // мы сделали третью задачу // .... Последний раз редактировалось Андре; 09.08.2007 в 14:29. |
|
|
За это сообщение автора поблагодарили: kashperuk (4). |