Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress

Автор: PetrovD
Дата сообщения: 13.12.2005 14:35
korobovmax

по первому вопросу:

TimeTableScheduler.ActiveHitTest.Time, а у час ты, наверное, сам оттуда вытащишь...

по второму вопросу:

В момент клика событие становится выделенным => попадает в массив SelectedEvents, поэтому я вылавливаю ID события так:

if TimeTableScheduler.SelectedEventCount<>1 then exit;
Module.TimeTableDataSet.Locate('ID',TimeTableScheduler.SelectedEvents[0].ID,[]);
Автор: korobovmax
Дата сообщения: 13.12.2005 15:42
Первое понял. Всё великолепно.

Со вторым стормозил, извиняюсь.

Спасибо огроменное
Автор: PetrovD
Дата сообщения: 13.12.2005 15:48
korobovmax

Па-а-ажалста, мне ж не жалко!
Автор: korobovmax
Дата сообщения: 13.12.2005 17:21
А вот ещё задачка. Под силу ли она будет?
Так как форма-редактор эвентов своя собственная, то и поля события надо заполнять вручную. А что надо заполнить, чтобы сработало напоминание о событии?
Какая-то там мудрёна с полем Options.

Добавлено:
Хи-хи. Сам всё сделал.
В поле Options надо писать 6 (3 - для событий "на целый день", остальные - не понял).
Далее надо у SchedulerDBStorage в событие OnRemindersAlertReminder добавить строчки:
if AReminder.Event.ID <> NULL then begin
// БЛА-БЛА-БЛА
ShowMessage(AReminder.Event.Caption);
end;
Это нужно, чтобы напоминание не срабатывало в момент, когда событие только что создали.
Автор: VadimLou
Дата сообщения: 13.12.2005 19:38
korobovmax
>BarManager.LockUpdate
Thanks
Автор: PetrovD
Дата сообщения: 14.12.2005 05:13
korobovmax
Если так и дальше пойдет, то мы с тобой станем ведущими специалистами по шедулеру в России
Автор: golkanavt
Дата сообщения: 14.12.2005 12:58
Внимание, вопрос знатокам шедулера
экспорт в Excel возможен только в стандартном виде, переделать его как либо возможно? хочется получить расписание в виде таблички, в которой колонки - даты, строки - события (заранее определенный список), соответственно на пересечении нужна отметина, есть событие либо нет
Автор: korobovmax
Дата сообщения: 14.12.2005 14:18
PetrovD, а то! Думаю ещё, что не только по шедулеру


golkanavt! Возможен экспорт в "собственном" формате или нет определяет наличие исходников. У нас, благо, есть
Как переделать - просто переколбасить cxExportSchedulerToExcel (которая сама вызывает cxExportSchedulerToFile) в модуле cxExportSchedulerLink.pas.

Понимаю, непросто. Но возможно. На крайний случай можно всегда самому сделать.
Автор: PetrovD
Дата сообщения: 14.12.2005 17:31
korobovmax,
golkanavt
Можно шедулер не переколбашивать (ух какое слово красивое получилось ), а выбирать данные из базы и в экселевский документ их ручками складывать - так по-моему проще получится.
Или еще один вариант - собирать данные в гриду через memorytable или сложным sql-запросом и экспортить ее в Excel стандартными средствами.
Автор: golkanavt
Дата сообщения: 15.12.2005 13:02
korobovmax, PetrovD

про такие варианты я и сам знаю, думал, может проще есть путь, ну и ладно, как обычно сделаем ручками
Автор: vadson6666
Дата сообщения: 16.12.2005 05:21
Народ, кто может помочь со следующей проблемой: имеется таблица с кард виевом, у карточки есть свойство Кард Експандинг, установленное в Труе. Требуется разворачивать карточку по двойному клику на каптионе карточки, как это сделать?
Автор: GodOfWine
Дата сообщения: 16.12.2005 15:42
Есть 2 вопроса по ExpressQuantumGrid 4:
1) как сделать cxGrid неактивным, обычно это делается просто: Grid.enabled:=false;
2) установил свойство cxGrid.OptionsBehavior.CellHints в true, получил хинт с содержимым ячейки при наведении курсора, а хотелось бы, чтобы хинт появлялся только для тех данных, которые не помещаются в ячейку. Пытался сам проверять и выводить хинт, но не смог получить значение ячейки под курсором...
Автор: borodavolga
Дата сообщения: 16.12.2005 16:50
Народ, а тут обсуждаются ли грабли и все такое ActiveX компонент devexpress?
Автор: Alex47
Дата сообщения: 16.12.2005 17:46
GodOfWine
Цитата: "1) как сделать cxGrid неактивным, обычно это делается просто: Grid.enabled:=false;"

У меня это работает. В чем проблема?
Автор: xokc
Дата сообщения: 16.12.2005 20:16


Цитата:
2) установил свойство cxGrid.OptionsBehavior.CellHints в true, получил хинт с содержимым ячейки при наведении курсора, а хотелось бы, чтобы хинт появлялся только для тех данных, которые не помещаются в ячейку. Пытался сам проверять и выводить хинт, но не смог получить значение ячейки под курсором...


Делаешь TcxCustomGridView.GetHitTest от Mouse.CursorPos только не забудь преобразовать глобальные координаты в локальные через ScreenToClient. И в полученном TcxGridHitTest ищи ту самую ячейку

Автор: korobovmax
Дата сообщения: 17.12.2005 08:24
vadson6666, начинай поиски отсюда:
__http://devexpress.com/Support/KnowledgeBase/ShowArticle.xml?kbid=1453&prod=ExpressQuantumGrid&tech=&kbss=card

GodOfWine,
про 1: может "не активный" грид - это грид "не в фокусе"? Тогда достаточно передать ффокус любому другому контролу.
про 2: выводить хинты только "при надобности" умеют выводить колонки грида. Можно там посмотреть.

borodavolga, попробовать пообсуждать можно. Есть вопрос?

GodOfWine,
xokc,
а если выводить хинт самому, как можно узнать, что в ячейке действительно не хватило места для вывода всего содержимого?
Автор: vadson6666
Дата сообщения: 17.12.2005 09:27

Цитата:
vadson6666, начинай поиски отсюда:
__http://devexpress.com/Support/KnowledgeBase/ShowArticle.xml?kbid=1453&prod=ExpressQuantumGrid&tech=&kbss=card


Это, конечено, хорошо, только я эту ссылку уже видел и весь форум ДевЭкспресса уже просмотрел, однако, вопрос до сих пор остается открытым, вот если бы какой нибудь небольшой кусочек кода... Хотя бы понять, в каком направлении рыть и к чему вязаться.
Автор: korobovmax
Дата сообщения: 18.12.2005 10:56
vadson6666, да всё просто.

Опишу то, как получил решение:
Идём по ссылке на DevExpress и узнаём оттуда метод ViewData.Expand у TcxGridDBCardView.
Смотрим реализацию и видим, что у ViewData есть массив Record'сов, каждый из которых умеет Expand'ить только себя (нам ведь именно это нужно ).

Остаётся одна подзадача - узнать индекс текущей записи. При беглом просмотре свойств не нашлось нужного индекса, поэтому приведу приём, которым пользуюсь в случаях, когда неочевидно, откуда взять ID записи:

1. Объявляем глобальную переменную RecID: Integer;
2. (Так как мы используем CardView, то) у CardView в событии OnFocusedRecordChanged:
RecID := AFocusedRecord.Index;

Всё - в RecID у нас всегда хранится индекс текущей записи (при этом не надо забывать про поведение с включённым MultiSelect ).

Далее уже можно, например, в CardView OnDblClick:
CardView.ViewData.Records[RecID].Expand(False);
CardView.ViewData.Records[RecID].Collapse(False);

------------------------

Не лишним будет сказать, что можно работать не с массивом ViewData.Records, а с ViewData.Cards. В рамках решения данного вопроса - никакой разницы. Но, просто Card'сы умеют чуть-чуть побольше - например, Visible := False .

Всё .
Автор: korobovmax
Дата сообщения: 18.12.2005 22:55
PetrovD, как выделить эвент в шедулере, зная его ID?
Сначала - Scheduler.GoToDate. А дальше?

Пробовал напрямую присвоить Scheduler.SelectedEvents[0].ID своему значению, но свойство оказалось read-only.

Пробовал так:
Scheduler.SelectEvent((SchedulerDBStorage.GetEventByID(RecID) as TcxSchedulerControlEvent));

Тоже облом - вылетает ошибка преобразования типов, что странно ибо TcxSchedulerControlEvent, который нужен для SelectEvent - прямой наследник TcxSchedulerEvent, и которому ничего "своего личного" в реализации SelectEvent не нужно.
Автор: vadson6666
Дата сообщения: 19.12.2005 05:27
korobovmax

Огромное спасибо за полный и развернутый ответ: все получилось!!!
Автор: GodOfWine
Дата сообщения: 19.12.2005 09:08
Alex47

Цитата:
У меня это работает. В чем проблема?

Да, видимо я сам тормозил.

xokc

Цитата:
Делаешь TcxCustomGridView.GetHitTest от Mouse.CursorPos только не забудь преобразовать глобальные координаты в локальные через ScreenToClient. И в полученном TcxGridHitTest ищи ту самую ячейку

Через TcxGridSite получаю TcxCustomGridHitTest, только как по нему найти ячейку?
Автор: DroN_S
Дата сообщения: 19.12.2005 10:43
Пытаюсь установить QuantumGrid из DexExpress'а...

Цитата:
[Hint] cxDBData.pas(3986): Value assigned to 'TcxDBDataController.FindRecordIndexByKey' never used
[Error] cxScrollBar.pas(886): Incompatible types: 'Integer' and 'PRect'
[Error] cxScrollBar.pas(886): Incompatible types: 'Integer' and 'tagSIZE'
[Error] cxScrollBar.pas(889): Incompatible types: 'Integer' and 'PRect'
[Error] cxScrollBar.pas(889): Incompatible types: 'Integer' and 'tagSIZE'
[Fatal Error] cxControls.pas(56): Could not compile used unit 'cxScrollBar'

Откопал где-то в инете, что нада дельфи заставить в tools-enviroment добавить в библиотеку папки с сорцами и packages.
Сделал, но ошибки остались..
Что делать?
Автор: korobovmax
Дата сообщения: 19.12.2005 12:37
PetrovD, сам догадался

Выделяю запись по ID так:

Scheduler.SetFocus; // надо-евдо
for i := 0 to Scheduler.VisibleEventCount - 1 do
if Scheduler.VisibleEvents[i].ID = RecID then
Scheduler.VisibleEvents[i].Selected := True;


Добавлено:
Всё, Мастер Шедулера (), научился ручками делать с напоминалками всё, что угодно: и открывать записи (с переходом шедулера на неё), и прекращать напоминание, и переносить напоминание на будущее (Snooze'ить).
Автор: gpi
Дата сообщения: 19.12.2005 19:01
DroN_S

Цитата:
Откопал где-то в инете, что нада дельфи заставить в tools-enviroment добавить в библиотеку папки с сорцами и packages.

Достаточно указать пути к исходникам
А ты какую версию устанавливаешь? Случайно хвостов от предыдущей не осталось?
У меня на D7 Quantum Grid 5.11 установилась без проблем
Автор: DroN_S
Дата сообщения: 19.12.2005 19:27
gpi
может и остались, я не смотрел...
сейчас пороюсь, посмотрю, раньше было такое, помогла переустановка...
Автор: korobovmax
Дата сообщения: 19.12.2005 21:14
gpi, дело не в путях. Если пишется ошибка несовместимости типов, значит дельфи находит реализацию этих типов (и файлы с ними соответственно).
Автор: xokc
Дата сообщения: 19.12.2005 22:23
GodOfWine

Цитата:
Через TcxGridSite получаю TcxCustomGridHitTest, только как по нему найти ячейку?

Ну дальше мне казалось очевидно - UnboundModeDemoIntMinerField.pas из Demos:

AHitTest := ViewInfo.GetHitTest(X, Y);
if AHitTest is TcxGridRecordCellHitTest then
begin
ACol := TcxGridRecordCellHitTest(AHitTest).Item.Index;
ARow := TcxGridRecordCellHitTest(AHitTest).GridRecord.Index;
end;

korobovmax

Цитата:
а если выводить хинт самому, как можно узнать, что в ячейке действительно не хватило места для вывода всего содержимого?

Ну я думаю примерно так:
1. Получив номер ячейки узнаешь ее ширину
2. Получешь через GetTextWidth ширину вывоимого текста
3. Сравниваешь величины и принимаешь решение
Автор: Nuwalli
Дата сообщения: 19.12.2005 22:24
сожалея о моем плохом русском я использую переводчика.
Я видел эту статью http://forum.ru-board.com/topic.cgi?forum=33&topic=2214&start=360, и я имею ту же самую проблему, я использую devExpress Quantum Grid Suite 5.11 и BCB6, я пробовал копировать кодекс, который VladimLou объявлял, и это не работало бы, так интересно, мог ли бы любой помочь мне.
спасибо очень.
Автор: xokc
Дата сообщения: 19.12.2005 22:32
Nuwalli
Write about you problem in english. Translator to russian is very bad.
Автор: gpi
Дата сообщения: 19.12.2005 22:38
korobovmax
А я и не говорил, что это из-за путей. Просто пути к packages указывать не нужно.
DroN_S
Обычно с новой версией Quantum Grid идут и новые версии ExpressEditors, ExpressLibrary и т.д. Можно предположить несовместимость версий оставшихся компонентов и вновь устанавливаемых, хотя cxScrollBar.pas не менялся (по размеру) с версии 5.5, а может быть, и более ранней. Поудаляй bpl и dcp-файлы предыдущих версий Quantum Grid в системной папке и папке Delphi\Projects\Bpl. И посмотри, чтобы не были указаны пути к старым исходникам

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Kylix


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.