UserControl реализующий сложный заголовок Janus GridEx 2000

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

UserControl реализующий сложный заголовок Janus GridEx 2000

Сообщение Andrey Fedorov » 19.07.2007 (Чт) 9:27

Вот, набросал UserControl, позволяющий легко реализовать сложный заголовок для Janus GridEx 2000. Пример использования в комплекте. А как выглядит заголовок видно на рисунке.
Вложения
p.png
p.png (11.92 Кб) Просмотров: 4356
GridHeader.rar
(65.61 Кб) Скачиваний: 211
Последний раз редактировалось Andrey Fedorov 14.08.2007 (Вт) 16:25, всего редактировалось 3 раз(а).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 11.08.2007 (Сб) 21:18

При ресайзе окна влево исчезают заголовки, при ресайзе окна вправо, либо ресайзе столбцов появляются:

Изображение
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.08.2007 (Пн) 12:02

VVitafresh писал(а):При ресайзе окна влево исчезают заголовки, при ресайзе окна вправо, либо ресайзе столбцов появляются:


Указанного эффекта с той версией что у меня добиться уже не удалось. Прикладываю ее. Заодно там реализован экспорт в Excel-евский файл...
Вложения
s.png
s.png (53.6 Кб) Просмотров: 4314
Последний раз редактировалось Andrey Fedorov 14.08.2007 (Вт) 11:21, всего редактировалось 1 раз.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 17:15

Andrey Fedorov, с заголовками теперь все ОК, но экспорт в Excel не работает. Т.е. при нажатии кнопки открывается окно Excel'я и просто висит, не реагирует.
Сейчас нет времени, а дома попробую еще потестить повнимательней.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 19:46

Файл сохраняется нормально. Зависает при попытки открыть его в функции ExportGridInExcel:
Код: Выделить всё
If Not Cancel Then
        If ShowExcelApplication Then ShellExecute Parent.hWnd, "open", FilePath, "", "", SW_SHOW
        ExportGridInExcel = True
End If


ADD:
Ты забыл про Set rn = Nothing, но это все равно не помогает.

Причем, если закоментировать строку
Код: Выделить всё
Dim ea As Object, ws As Object, WB As Object
и
Dim rn As Object
и заменить ее на:
Код: Выделить всё
Dim ea As Excel.Application, ws As Excel.Worksheet, WB As Excel.Workbook, rn As Excel.Range
то все работает как и должно.

Если же убрать референс на Microsoft Excel 11.0 Object Library и оставить все как было, то когда доходит очередь до вызова ShellExecute в процессах еще висит Excel :shock:
Такое впечатление, что не все объектные переменные обNULLены.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.08.2007 (Пн) 23:51

VVitafresh писал(а):то когда доходит очередь до вызова ShellExecute в процессах еще висит Excel :shock:
Такое впечатление, что не все объектные переменные обNULLены.


Немного не так. У тебя 2007 Excel?

Я сейчас попробовал в нем - при ShellExecute выкидывается приложенное окошко и ... ждет подтверждения. :lol: После подтверждения все работает. В общем, поправлю... Погодя... :lol:
Вложения
Err.png
Err.png (25.7 Кб) Просмотров: 4311
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 14.08.2007 (Вт) 0:22

Andrey Fedorov писал(а):Немного не так. У тебя 2007 Excel?

Не угадал. У меня более старая версия -- десятая (Office XP). Никакого окошка, соответственно, не появляется.

И все-таки проблема не в вызове ShellExecute, а где-то перед этим. Ведь когда доходит до ShellExecute в процессах УЖЕ не должен висеть Excel, работа с ним окончена всем объектным переменным присвоен NULL. Ведь верно?

А у меня Excel остается. И я проверял в пошаговом режиме: если этот процесс прибить, то ShellExecute нормально открывает файл, как и ожидалось. А если его не прибить, то вылазит "висячее" окно экселя.
Последний раз редактировалось VVitafresh 14.08.2007 (Вт) 0:32, всего редактировалось 1 раз.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.08.2007 (Вт) 0:32

VVitafresh писал(а):
Andrey Fedorov писал(а):Немного не так. У тебя 2007 Excel?

Не угадал. У меня более старая версия -- десятая (Office XP). Никакого окошка, соответственно, не появляется.


Ну, под XP, значит тебе (или кому-то еще) отладить и проверить надо будет - у нас на работе его уже нет (на работе 2003, а дома 2007), а ставить только из-за этого влом... ;)

P.S Уверен что никакого? И ниже окна программы?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 14.08.2007 (Вт) 1:05

Мда.... Поставил на чистый комп (виртуалка) Excel 2003 и все работает как часы :roll:

Просто аж интересно, почему такая проблема с Excel XP
Твой контрол я вряд ли буду использовать, т.к. юзаю True DbGrid, но сам факт такого глюка!

Хотелось бы знать для себя хотя бы где грабли и как их обходить (я имею в виду работу с эксель через позднее связывание, т.к. при раннем связывании с Excel XP тоже все пучком, как я и писал выше). Интересно будет еще Exel 2000 проверить, но это уже завтра, сегодня спать :)
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 14.08.2007 (Вт) 10:22

В Excel 2000 такая же история как и с Excel XP. Только он перед открытием еще выводит сообщение:
Отменить удаление выделенных листов будет невозможно.
Чтобы удалить листы, нажмите кнопку 'ОК'.


А потом эксель виснет, вот скриншотик:

Изображение

Точнее даже не зависает (это я неправильно выразился), менюшки и кнопочки активны, но внутри (там где Worksheet) абсолютно ничего нет, просвечивается Desktop и эта часть окна не перерисовывается :shock:
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.08.2007 (Вт) 11:26

Обновил исходники в первом письме - проверь.

Excel теперь в процессах не висит. В принципе там все достаточно просто - конструкции типа:

Код: Выделить всё
With rn.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlMedium
    .ColorIndex = xlAutomatic
End With


Поменял на:

Код: Выделить всё
Set eb = rn.Borders(xlEdgeTop)
eb.LineStyle = xlContinuous
eb.Weight = xlMedium
eb.ColorIndex = xlAutomatic
...
Set eb = Nothing

И Excel стал исчезать из процессов перед выполнением ShellExecute.

Попробуй как сейчас...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 14.08.2007 (Вт) 14:40

Andrey Fedorov, вот теперь все отлично и в Office 2000 и в XP! :thumleft:

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.08.2007 (Вт) 15:13

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


Это, конечно, можно, но просто... влом для бесплатного компонента. Ну просто нудной возни для сей фичи достаточно много, а трудовой запал уже иссяк без подпитки. Да и так неплохо получилось - лично мне достаточно. Да и обычно у Grid-ов со сложным форматированием заголовков менять размеры колонок нет большой надобности.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 14.08.2007 (Вт) 15:25

Согласен, и так очень даже неплохо вышло. Это была просто мысль вслух насчет дополнительной фичи.

Жаль, что Janus GridEx 2000 несовместим с DataGrid по свойствам и событиям, так бы я, возможно, перешел на него.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.08.2007 (Вт) 16:31

VVitafresh писал(а):Жаль, что Janus GridEx 2000 несовместим с DataGrid по свойствам и событиям, так бы я, возможно, перешел на него.


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

Обновил исходники в первом письме ветки еще раз - была мелкая ошибочка при включенной группировке у Grid-a...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

    TopList