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

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

Автор: BUALEX
Дата сообщения: 14.10.2007 15:04
Вопрос по PrintingSystem.
Подскажите пожалуйста почему вознкает ошибка при выполнении IDB_DXPSFIUNCTION_PAGENUMBER not found, если в свойствах проекта убрать галочку (Build with runtime poackage).
Раньше все работало, но снес винду и немогу установить PrintingSystem заново из-за это ошибки.
Автор: Haitong
Дата сообщения: 14.10.2007 16:47
Подскажите в чем трабла.
При выполнение кода . вылетает ошибка - "Access violation at address"

Цитата:
procedure TFCreateTable2.cxGrid1DBBandedTableView1EditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
var lValue,nValue:Real;
begin
if AItem.VisibleIndex=cxGrid1DBBandedTableView1cost_plan.index then
begin
lValue:=AItem.EditValue;
Sender.DataController.Post;
nValue:=AItem.EditValue;
(Sender.MasterGridView as TcxGridDBTableView).Columns[1].EditValue:=(Sender.MasterGridView as TcxGridDBTableView).Columns[1].EditValue-(lValue-nValue);
(Sender.MasterGridView as TcxGridDBTableView).DataController.Post;
end;
end;

Таблицы в мастер-детайл. при изменение значения у детайл таблицы, нужно менять значения мастре таблицы.
Автор: Dronton2
Дата сообщения: 15.10.2007 12:10
Haitong
Если дебагером пройтись - в какой строчке вылетает AV?
Может быть AItem = nil?
Автор: DGM001
Дата сообщения: 16.10.2007 02:26
Haitong Проверь также вызовы DataController.Post - там тоже глюки бывают.



Добавлено:
Haitong
Хотя скорее всего это из-за того, что ты метод Post вызываешь в событии EditValueChanged
Автор: alexsob
Дата сообщения: 16.10.2007 05:35
Не подскажут ли уважаемые мэтры, как в cxGrid в обработчике события OnButtonClick у колонки типа ButtonEdit получить колонку (Column) в которой произошло событие именно через Sender?
Понятно, что можно через TableView.Controller.FocusedItem или через что-нибудь более другое, но ведь зачем-то этот Sender нужен?
Автор: Dennica
Дата сообщения: 16.10.2007 06:20
alexsob
можно попробовать так:

Код:
ShowMessage(
(((Sender as TControl).Parent as TcxGridSite)
.GridView as TcxCustomGridTableView)
.Controller.FocusedItem.Name
);
Автор: alexsob
Дата сообщения: 16.10.2007 07:15
Dennica
Спасибо, все сработало!
Была мысль использовать Parent, да что-то пролетела мимо ...
Автор: TohaChe
Дата сообщения: 17.10.2007 11:00
После установки дэвок на BCB6 стал заметно тупить Code Insight. Думает по 10-20сек...
(Как мартовские так и сентябрьские)
Причем эти же дэвки на Delphi7 - никакого тупежа.
Вопрос уже поднимался, но тогда пришли к выводу что это происходит если устанавливать скины. А установку скинов я отключил.
Никто не сталкивался с таким?
Автор: X11
Дата сообщения: 17.10.2007 11:32
Конечно сталкивались, большинство сталкивались. И в RAD 5.0 тоже самое. Хотя скины уже не бетта версии. Всё равно я их не ставлю. Кстати компиляция тоже медленее.
Автор: Haitong
Дата сообщения: 17.10.2007 14:53
Проблема действительно в вызове из EditValueChanged. нашел решение в Developer Express Knowledge Base, через функцию postmessage.
Автор: DGM001
Дата сообщения: 17.10.2007 20:49
Haitong

А код статьи в KB не подскажешь?
Автор: Gaivoronsky
Дата сообщения: 18.10.2007 00:20
Уважаемые all, решил поэкспериментировать со скинами. Если это EXE, то вроде проблем нет.
Но если вызов из DLL, то скины не срабатывают. Если вызов из Актив Х формы, то скины вообще не работают (хотя в дизайнере все Ок). Кто - нибудь знает как это решить?
Автор: IceMan T
Дата сообщения: 18.10.2007 06:33
Если есть исходники ExpressSkins Library, попробуй во всех модулях заменить
в секции инициализации

initialization
dxUnitsLoader.AddUnit( @Method1, @Method2 );

на
initialization
Method1;

и соответственно секцию финализации поправить подобным образом.
Должно сработать.
Автор: Nikolay_P_I
Дата сообщения: 18.10.2007 10:15
Мне нужно постоянно автоматически отображать изменения в базе данных на XtraGrid.

Однако, на время, когда пользователь добавляет новую запись или редактирует старую - мне надо прекратить обновление datasource.

Как прекратить обновление - понятно - перестану делать XPCollection.Reload().

Не понятно - как нормально узнать, что пользователь начал добавлять строку или ее редактировать ? И как узнать - что он это делать закончил.
Автор: zver
Дата сообщения: 18.10.2007 10:26
Как сделать в cxGrid при Master-Detail чтобы строчки с пустыми деталями не отображались вообще, а не только чтобы там ExpandButton-a не было?
Автор: Dennica
Дата сообщения: 18.10.2007 10:41
zver
Можут решить проблемму с помощью дтасет?
Запихнуть в него типо
select m.* from master m where exists(select * from detal d where m.id = d.mid)
Будут показываться только те строки из мастер таблицы которые имею детали.
Автор: Dronton2
Дата сообщения: 18.10.2007 14:13
Как получить список скинов, доступных программе?
У TdxSkinController есть свойство SkinName. В designtime это свойство можно заполнить из выпадающего списка. Хочется получить такой же список в runtime.
Автор: IceMan T
Дата сообщения: 18.10.2007 15:46
dxSkinsDefaultPainters.SkinNames - массив наименований скинов
Автор: clear2121
Дата сообщения: 19.10.2007 07:25
Hi!
Подскажите, что я делаю неправильно.
Есть грид, в нем отображаются 2 записи (1 и 2). В CustomDrawCell написано:

    if ( TmpData1->FieldByName("fAlEdDel")->AsInteger == 1 )
    {
        ACanvas->Brush->Color = clYellow;
        ACanvas->Canvas->FillRect(AViewInfo->Bounds);
    }

    if ( TmpData1->FieldByName("fAlEdDel")->AsInteger == 2 )
    {
        ACanvas->Brush->Color = clGreen;
        ACanvas->Canvas->FillRect(AViewInfo->Bounds);
    }

    if ( TmpData1->FieldByName("fAlEdDel")->AsInteger == 4 )
    {
        ACanvas->Brush->Color = clRed;
        ACanvas->Canvas->FillRect(AViewInfo->Bounds);
    }

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

СПАСИБО!
Автор: IceMan T
Дата сообщения: 19.10.2007 07:43
Лучше стили юзай. Есть у грида такое событие, вроде называется OnGetContentStyle и т.д. В этом событии в зависимости от условий применяешь необходимый стиль.
Автор: Dennica
Дата сообщения: 19.10.2007 08:48
clear2121
В момент срабатывания кустомдрав не происходит физического перемещения записи в датасэте, т.е. тебе нужно обращаться не к датасету, а к данным прокэшированным гридом. Например (delphi)

Код: uses cxGridDBDataDefinitions;
...
if UpperCase((AViewInfo.Item.DataBinding as TcxGridItemDBDataBinding).FieldName) = 'ID' then
if AViewInfo.Value = 1 then
...
Автор: Bill_PHO
Дата сообщения: 20.10.2007 21:07
Не подскажет ли кто, можно ли выполнить Expand в cxDBTreeList не для всего дерева, а только для веточек заданного уровня или для конкретной ветви? Если да, то как?
Автор: Gaivoronsky
Дата сообщения: 20.10.2007 23:50
ув. IceMan T как Вы написали делать нельзя, появляются непонятные ишибки (что-то об инициализации GDIPlus), но Вы подсказали куда копать.
В файле dxGDIPlusAPI.pas нужно найти функцию isDLL и сделать так, что бы всегда она возвращала false. Так как оказалось, при вызове из DLL скин просто записывается в список, но ничего не делается дальше. Спасибо за подсказку!
Автор: Dennica
Дата сообщения: 21.10.2007 09:40
Bill_PHO
Для ноды определен метод:
procedure Expand(Recurse: Boolean);
Найди верхнюю ноду ветки, которую нужно развернуть, и вызови Expand(True)
Автор: Bill_PHO
Дата сообщения: 21.10.2007 12:02
Dennica
Да, нашел, спасибо.
Автор: brookson
Дата сообщения: 21.10.2007 17:00
Доброго времени суток!

Вопрос по Master-Detail cxGrid-у, привязанному к dxMemData.
Во время программного перехода по записям обнаружил, что переход в подчинённом датасете вызывает переход в мастере. Но не наоборот!!
Т.е. если имеются записи:
master1 - detail1
master2
master3 - detail2

то при переходе на 2-ю запись подчинённого датасета мастер переходит на 3-ю запись
Но при переходе в мастере с 1-й записи на 2-ю подчинённый остаётся на 1-й записи.
Ничего слишком хитрого в настройках нет. Датасеты оба настроены как положено, проставлены ключ. поля и у деталей - настройки MasterKeyFieldNames, DetailKeyFieldNames.
Может подскажете, что не так?
Автор: Dennica
Дата сообщения: 21.10.2007 17:56
brookson

Цитата:
Но при переходе в мастере с 1-й записи на 2-ю подчинённый остаётся на 1-й записи.

А куда по вашему должен выполниться переход в деталях если у второй записи мастера нет подчиненных записей?
Автор: brookson
Дата сообщения: 21.10.2007 18:26

Dennica

Да, но если стать на 3-ю запись мастера, подчинённый дальше на первой стоит
Автор: Dennica
Дата сообщения: 21.10.2007 19:48
brookson
При мастер-детайл, для каждого мастера создается экземпляр view с деталями. Причем, пока мастер не раскрыть, например плюсиком, экземпляра вьюшки с деталями не существует. Сделано так видимо для ускорения загрузки грида. Теперь если вернуться к твоему примеру, в случае, когда ты переходишь с первого мастера на третий не раскрытый, экземпляра деталей просто не существует и гриду некуда ставить фокус. Если ты раскроешь первый и третий мастер и попрыгаешь между ними, фокус в деталях будет устанавливаться корректно. Но если ты с первого или третьего перейдешь на второй мастей, деталей для которого не существует, фокус в деталях останется на записях того мастера, который был выбран до перехода.
А для чего тебе нужен фокус в деталях? Может можно как-то подругому решить задачу..
Автор: brookson
Дата сообщения: 21.10.2007 20:49
Я двигаюсь не по гриду, а по dxMemData. Про грид написал, потому как между двумя датасетами формально связи нет, а между соответствующими вьюшками грида - есть. Вообще был сильно удивлён, обнаружив, что указатель одного dxMemData изменяется в зависимости от другого.
Пытаюсь сохранить записи в базу данных в таблицы, похожие по структуре. Никак не могу найти красивое решение.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

Предыдущая тема: Язык программирования на русском языке


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