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

» Использование DevExpress (часть 4)

Автор: frumych
Дата сообщения: 10.01.2011 01:29
Может где было, но я не нашел. Не пинайте сильно, если что.
Есть некая таблица, которую отображаю в Express DBTreeView. Задача - изменить шрифт для некоторых элементов дерева в зависимости от значения поля в той же таблице. Поля этого, естественно, в дереве нет.
В OnCustomDraw в качестве параметра есть TTreeNode. Но как по нему найти соответствующий DBTreeNode так и не придумал. В общем буду примногоблагодарен за подсказку куда копать.
Автор: marser
Дата сообщения: 10.01.2011 08:31
frumych

Код: procedure TForm1.dxDBTreeView1CustomDraw(Sender: TObject; TreeNode: TTreeNode; AFont: TFont; var AColor, ABkColor: TColor);
var
DBTreeNode: TdxDBTreeNode;
begin
DBTreeNode := TdxDBTreeNode(TreeNode);
....
end;
Автор: X11
Дата сообщения: 10.01.2011 16:01
Проблема с динамическим созданием столбцов у TdxMemData.

Вываливается ошибка Invalid FieldSize, как же правильно указать размер поля?
Если я в дизайне ставлю размер поля 10000, то всё ок, без ошибок.
Что я забыл?


Код:
if fGrid is TcxGridTableView then
with TcxGridTableView(fGrid) do
begin
for i := 0 to ColumnCount - 1 do
if Columns[i].Visible then
with TField.Create(fMemData) do
begin
if Columns[i] = nil then continue;

AField := DefaultFieldClasses[GetFieldTypeByStringType('ft'+Columns[i].DataBinding.ValueType)].Create(fMemData);
AField.Name := GetValidName(fMemData, Name + Columns[i].Name);

AField.DisplayLabel := Columns[i].Caption;
AField.DisplayWidth := 10000;
AField.Size := 10000;
// AField.DisplayWidth := Columns[i].Width;
AField.FieldName := Columns[i].Name;
AField.Visible := Columns[i].Visible;
AField.FieldKind := fkData;
AField.DataSet := fMemData;
end;//with TField.Create(fMemData) do

fMemData.FieldDefs.Update;
end;//with TcxGridDBTableView(fGrid) do
Автор: crazypiggy
Дата сообщения: 11.01.2011 02:06
Добрый день. У меня такой вопрос в сxCalcEdit устанавливаю сxCalcEdit.Properties.MaxValue:=FAbonSCHRAZR.AsFloat но могу вводить туда какие угодно значения. Как запретить вводить в поле больше чем MaxValue? И ещё вопрос на обработчик cxCalcEdit.PropertiesOnchange обрабатываю cxCalcEdit.EditingValue*100 но при вводе запятой или при очистке всего значения вываливается ошибка. Пытался делать
if VarIsFloat( cxCalcEdit.EditingValue) then ResultEdit.Value:=cxCalcEdit.EditingValue*100 но программа почемуто игнорирует это условие и проскакивает его. Что мне делать?
Автор: tanaseduard
Дата сообщения: 11.01.2011 08:59
crazypiggy
В TcxCalcEdit не нашел значение Min/Max, какая версия девок?
Попробуйте обрабатывать If not VarIsNull() then
Автор: marser
Дата сообщения: 11.01.2011 11:27
crazypiggy

Цитата:
У меня такой вопрос в сxCalcEdit устанавливаю сxCalcEdit.Properties.MaxValue:=FAbonSCHRAZR.AsFloat но могу вводить туда какие угодно значения. Как запретить вводить в поле больше чем MaxValue?

Если DevExpress-овских компонентах Properties.MaxValue не published, то MaxValue хрен сработает. Попробуйте обработать событие OnValidate.
Автор: tanaseduard
Дата сообщения: 11.01.2011 11:30
crazypiggy
И еще как вариант посмотреть может есть свойство Properties.AssignedValues.Min/Max. Определяет в других типах компонентов или включать ограничение.
Автор: crazypiggy
Дата сообщения: 11.01.2011 12:35
tanaseduard
Версия 53. А Min/Max в Properties находится
Автор: tanaseduard
Дата сообщения: 11.01.2011 15:14
Кто сталкивался с такой проблемой в последнем релизе девок:
Иконки на элементах(dxBar,cxGrid etc) всегда серые, как будто Enabled=False?
Автор: marser
Дата сообщения: 11.01.2011 15:58
tanaseduard
Глюк в 54 версии
http://www.devexpress.com/Support/Center/~/p/Q297763.aspx
Автор: tanaseduard
Дата сообщения: 11.01.2011 16:45
marser
Спасибо. Ждемс 55 версии.
Автор: X11
Дата сообщения: 11.01.2011 17:00
54 версия - всё ок, при установке выбирал НЕ 7-ую бета версию.
Автор: tanaseduard
Дата сообщения: 11.01.2011 17:41
X11
54 Версия, не 7 Beta. C барами все ок, а вот некоторыми элементами, например ButtonEdit,PopupEdit проблема.
Автор: ERO1
Дата сообщения: 12.01.2011 07:55
1) Есть ли возможность в cxGridе переходить от одного записи в другую по прокрутке колесика в мышке?
2) Я впервые пользуюсь Девкой и есть ли у кого небуд описания на русском? Хотя бы Грида как его можно сделать простым или быстро сделать просмотр данных.
3) Можно ли скины девок использовать для обычных компонент. например для EhLib грида (он мне очень нравится)
Автор: X11
Дата сообщения: 12.01.2011 09:04
Бред какой-то. Я не использую в программе шедулер, но при открытии формы в дизайне вываливается ошибка:
---------------------------
bds.exe - Системная ошибка
---------------------------
Запуск программы невозможен, так как на компьютере отсутствует dclcxSchedulerRS11.bpl. Попробуйте переустановить программу.
---------------------------
ОК
---------------------------
Автор: tanaseduard
Дата сообщения: 12.01.2011 09:06
X11

Было тоже самое, полечил переустановкой дев.
Автор: X11
Дата сообщения: 12.01.2011 09:14
D2007 слепая или сама библиотека DevExpress глючит. Оказывается, пакет лежит в папке:
"C:\Program Files\Developer Express Inc\Library\BDS2007\"
и этот путь прописан в lib, в настройках среды.


Добавлено:
Но при загрузке среды ошибка не появлялась.
Автор: tanaseduard
Дата сообщения: 12.01.2011 09:16
X11

Зато эта ошибка достает если проект построен на Bpl полностью.
Автор: X11
Дата сообщения: 12.01.2011 09:24
Скопировал файл в папку: C:\Users\Public\Documents\RAD Studio\5.0\Bpl - вроде норм.
Автор: X11
Дата сообщения: 12.01.2011 16:06
Проблема с Drag And Drop у компоненты TcxDBTreeList.
Почитал справку.
Включил dmAutomatic, OptionsData.AutoCalcKeyValue.
В событии OnDragOver написал: Accept := Sender = Source;

Само дерево нормально редактируется ручками, могу удалять, добавлять записи.
Но когда начинаю тащить запись, то курсор в виде запрещающего значка.
Что я ещё забыл?

Добавлено:
И ещё. Ставлю бряку на Accept := Sender = Source; в событии OnDragOver - никакой реакции. Почему?
Автор: sldaac
Дата сообщения: 12.01.2011 16:17
X11

Цитата:
Бред какой-то. Я не использую в программе шедулер, но при открытии формы в дизайне вываливается ошибка:

В IDE , заходиш Космпоненты, снимаеш чек с него, ОК (если ненужен) или повторно заходиш и ставиш чек. Еще возможны приколы, когда ставиш новые компоненты, после перезагрузки такое появляется.
Лечить пытался по разному (в ХЕ) все равно иногда при взлете ХЕ выскакивает сообщение.
Автор: linker_2009
Дата сообщения: 12.01.2011 19:32

Цитата:
В событии OnDragOver написал: Accept := Sender = Source;

Sender и Source разные классы всегда.
Посмотри сам
Accept:=True;
Showmessage(Sender.ClassName+' '+Source.ClassName);
Source по идее должен быть TcxDragControlObject
И код в процедуре соответсвенно Accept:=(Source is TcxDragControlObject);

Автор: TechnoDreamer
Дата сообщения: 12.01.2011 21:23
linker_2009, та с чего бы это они разные всегда? Если в пределах одного контрола драг, то оба будут TcxTreeView.

Добавлено:
X11

Цитата:
И ещё. Ставлю бряку на Accept := Sender = Source; в событии OnDragOver - никакой реакции. Почему?

Вот тут и проблема. Точно dmAutomatic стоит? А DragKind:=dkDrag?

Добавлено:
linker_2009, может вы с гридом путаете? Правда там Sender=TcxGridSite.
Но в любом случае у X11 евента не происходит, так что проблема не в коде самого евента.
Автор: linker_2009
Дата сообщения: 12.01.2011 21:36
TechnoDreamer
Если не ошибаюсь, в пределах одного контрола, то эти обработчики и трогать не надо, все по дефолту работает.

Добавлено:
TechnoDreamer
Да, действительно ошибся. Извиняюсь.

Автор: TechnoDreamer
Дата сообщения: 12.01.2011 23:11

Цитата:
Если не ошибаюсь, в пределах одного контрола, то эти обработчики и трогать не надо, все по дефолту работает.

Должен быть хотя бы пустой обработчик, по крайней мере так в хелпе написано, лично не проверял, всё как то более сложные условия драга требовались.
Автор: RomanDaemon
Дата сообщения: 13.01.2011 04:31
Подскажите как все-таки во вьюхе cxGrid поставить фокус на определенную строку, зная значение поля? Если делать locate для датасета, то фокус не перемещается. А хотелось бы и фокус передвинуть. Я уже замучился процедуры и проперти грида/вьюхи перебирать...
Автор: makz
Дата сообщения: 13.01.2011 07:20

Цитата:
Если делать locate для датасета, то фокус не перемещается.

DataController.DataModeController.SyncMode:=True
Автор: Prizzzrak777
Дата сообщения: 13.01.2011 08:25
RomanDaemon

Поиск внутри грида
<cxGridDBTableView>.DataController.Search.Locate
Автор: X11
Дата сообщения: 13.01.2011 09:48

Цитата:
Подскажите как все-таки во вьюхе cxGrid поставить фокус на определенную строку, зная значение поля?

после поиска попробуй:

Код:
with <cxGridDBTableView> do
if DataController.RecordCount > 0 then
Controller.FocusedRow.Selected := True;

Автор: marser
Дата сообщения: 13.01.2011 10:53
RomanDaemon

Цитата:
Подскажите как все-таки во вьюхе cxGrid поставить фокус на определенную строку, зная значение поля?


Код: var
ARecordIndex: Integer;

Если по ключу
ARecordIndex := DataController.FindRecordIndexByKey(...)
По любой колонке
ARecordIndex := DataController.FindRecordIndexByText(...);

if ARecordIndex > -1 then
begin
DataController.FocusedRecordIndex := ARecordIndex;
Controller.MakeFocusedRecordVisible;
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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