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

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

Автор: volser
Дата сообщения: 12.05.2010 10:16
SIgor33
Зная айди записи можно найти любое другое значение колонки в датасете используя метод Lookup.
Автор: tanaseduard
Дата сообщения: 12.05.2010 10:56
Есть большой проект. В нем порядка 100 подключаеммых bpl с формами и класамми. Возникла такая идея.
В многих формах используеться одинаковый набор иконок в CxImageList, а также предопределенны нексолько десятков готовых компонентов в TcxEditRepository,а также TcxStyleRepository. Для импортирования в новую форму банально использывался Copy/Paste этих контейнеров. В связи с этие возникло несоклько неудобных моментов:
1. Вес выходных bpl увеличиваеться. Хотя во всех модулях они одинаковы.
2. При изменении набора, или добавление нового приходиться страдать фигней чтоб скопировать во все пакеты.

Вопрос. Можно ли создать форму(пакет) на которой будут находиться эти компоненты с готовыми наборами, а все остальные будут использовать их. В Run-Time это не проблема, а вот как сделать чтоб в Design Time можно было выбрать контейнер, увидеть рисунки в контейнере и т.д. Например если такую форму создать в том же пакете где и форма, то она видет нормально эти контейнеры, а вот если эта форма в другом пакете то даже если вручную указываю в Uses ссылку на модуль из другого пакет, Delphi в Object Inspector не видит эти компоненты.
Автор: unikum
Дата сообщения: 12.05.2010 11:54

Цитата:
Можно ли создать форму(пакет) на которой будут находиться эти компоненты с готовыми наборами,

Я в таких случаях использую фреймы
Автор: neznayka3
Дата сообщения: 12.05.2010 12:10
Подскажите, как и где узнать текст введенный вручную в cxLookupComboBox? Пытаюсь в OnKeyPress читать EditingText, но выходит не то.
Автор: X11
Дата сообщения: 12.05.2010 12:13
Просто cxLookupComboBox.Text
Автор: neznayka3
Дата сообщения: 12.05.2010 12:29
X11

Цитата:
Просто cxLookupComboBox.Text

Последняя введенная буква не отображается, если enter не нажать. Надо, чтобы последняя отображалась тоже. Immediate Post = true не помогает.
Автор: vladman
Дата сообщения: 12.05.2010 12:33
Man_Without_Face

Цитата:
Вопрос: можно ли как нибудь к моей DLL "приклеить" эту, чтобы у меня была поддержка скинов?

Из ReadMe.txt - "это обычная ресурсная DLL без всяких процедур и функций"
Так что вам не составит особого труда скомпилировать вашу dll, включив в нее новый, вами созданный ресурс со скинами. Более того, с момента создания это dll уже появились новые скины, так что ваш труд может быть также полезен и другим.
Подробнее о создании ресурсных dll можно прочитать здесь
Автор: tanaseduard
Дата сообщения: 12.05.2010 12:44

Цитата:
Я в таких случаях использую фреймы


Это если обычное приложение, а если построенное на BPL такое вроде нельзя сделать.

Добавлено:
Можно ли создать новый компонент на основе TcxImageList, но уже с встроенными рисунками.
Тоесть свой вариант компонента, ничем не отличающегося от стандартного, но с предустановленными рисунками.
Автор: SIgor33
Дата сообщения: 12.05.2010 12:58
volser

Цитата:
Зная айди записи можно найти любое другое значение колонки в датасете используя метод Lookup.

по Id я и запросом могу вытянуть.
а хотелось бы из TcxGridDBTableView и Properties столбца
Автор: afiget
Дата сообщения: 12.05.2010 13:20

Цитата:
Подскажите, как и где узнать текст введенный вручную в cxLookupComboBox? Пытаюсь в OnKeyPress читать EditingText, но выходит не то.

Как уже было сказано выше:
cxLookupComboBox.Text плюс символ, который передан в процедуру обработки события OnKeyPress. Этот символ ведь еще не ввели, вы его даже заменить на свой можете.
Автор: JohnSilver182
Дата сообщения: 12.05.2010 13:22
Hi All
А новые Скины в виде DLL , будут ли появляться ???
Автор: X11
Дата сообщения: 12.05.2010 13:47
D2007. Dev48.
Есть приложение, к нему несколько плагинов (DLL), подгружатся при старте приложения.
Плагин - это просто отдельная форма, т.е. никакой особой связи с приложением нет.
На форме плагина есть dxComponentPrinter. К dxComponentPrinter1 привязан грид.
Вызываю
dxComponentPrinter1.Preview();
вываливается несколько AV, да ещё и при закрытии формы плагина тоже. Не знаю, нужен ли текст ошибок.
Раньше печатал без проблем. В старых версиях девочек. Вот обновил плагины... блин

Добавлено:
Если в дизайне (в среде) нажать кнопку Preview в компоненте dxComponentPrinter, то ошибок нет.

Добавлено:
Это какой-то баг, связанный с тем, что в новой принтосистеме ленточный интерфес

Это ошибка, которая вываливается второй


Цитата:
Error reading dxRibbon.SupportNonClientDrawing: Access violation at address 096A68E2 in module 'export.dll'. Read of address 00000000.

Автор: vladman
Дата сообщения: 12.05.2010 14:17
brookson

Цитата:
Есть группировка по первому столбцу. Надо, чтоб для одной из групп выводились дополнительные DefaultGroupSummaryItems (по некоторых столбцах).
То есть для всех групп суммируем 4 столбец, а в одной из групп надо еще суммировать и 2, 3, 5 и 6 столбец.
Возможно ли такое?

Да, интересную задачку задали. Вроде как, нашел способ, пробуйте:

Код: procedure <Your>TForm.<Your>cxGridDBTableViewCustomDrawFooterCell(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
begin
if (AViewInfo is TcxGridRowFooterCellViewInfo) and
(TcxGridRowFooterCellViewInfo(AViewInfo).GridRecord.Values[<Your>cxGridDBTableViewGroupColumn.Index] <> <YourValue>) and // группа в которой не нужно скрывать саммари
(TcxGridRowFooterCellViewInfo(AViewInfo).Column = <Your>cxGridDBTableViewNotNeedGroupSummaryColumn1) and .... then //выши колонки 2, 3, 5 и 6
begin
ACanvas.FillRect(AViewInfo.Bounds, AViewInfo.Params.Color);
ADone := True;
end;
end;
Автор: vladman
Дата сообщения: 12.05.2010 19:20
SIgor33

Цитата:
Хотелось находясь на текущей записи без использования sql запроса по Id получить текстовое значение словаря данной записи.

Пробуйте

Код:
with <Your>cxGridDBTableView.DataController do
ShowMessage(DisplayTexts[FocusedRecordIndex, <Your>cxGridDBTableViewLookupColumn.Index]);
Автор: crazypiggy
Дата сообщения: 13.05.2010 09:00
Добрый день. Использую cxGrid в нем включаю DataControler->Filter->Options-> fcoCaseInsensitive=true и фильтр работает независимо большая буква или маленькая, а вот для cxDBPivotGrid не могу найти как сделать так чтобы фильтр работал независмо от размера символа. Подскажите как включит этот CaseInsensitive для PivotGrid
Автор: SIgor33
Дата сообщения: 13.05.2010 13:51
Подскажите можно ли изменить у TcxGridDBTableView ширину leveltabs (таб вкладки вьюва) а то весь текст надписи таба не входит?
Автор: safon777
Дата сообщения: 13.05.2010 17:18
Привет всем.

Столкнулся с простой проблемой, для которой не могу найти решения
Есть cxGrid. Я перебираю все записи грида через TableView.DataController, попутно анализирую соответствующие Values.
Пользователи попросили ограничить перебор выделенными записями (когда есть выделение)
Думал в начало цикла вставить проверку на Selected если есть выделение и не переделывать код, НО не нашел способа выяснить при таком способе перебора является ли record выделенным.
Перебор у DataController идет по полю index. Единственное где я смог найти selected это у TableView.ViewData.Records[i].Selected. Все бы хорошо, но индекс у ViewData использует RecordIndex и не соответствует index у DataController'а (т.е. конечно соотетствует, пока не начнешь сортировать/фильтровать/группировать данные)
Вопрос: как определить является ли выделенной запись которой соответствует массив значений TableView.DataController.Values[i,...]
PS. Про SelectedReсords знаю. Не хочется переписывать "тонну" кода, когда можно было бы решить проблему просто...

Спасибо всем ответившим

Автор: Zaragossa
Дата сообщения: 13.05.2010 17:32
Раньше работал на Ehlib, там у меня, когда вставал на строку, сразу цветом(красным) выделялись все похожие строки(из строки выбиралось название кода). А в Деве не могу понять как это сделать... Максимум на что меня хватило это на вот это:
DBtableCustomDrawCell

ATextToDraw, val: String;
begin
if CheckBox6.Checked= True then
begin
ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
val := VarAsType(AViewInfo.GridRecord.DisplayTexts[DBtablemarka.Index], varString);
if val = checkbox6.Caption then
ACanvas.Canvas.Font.Color := clRed
end;

На этом у меня тупик. Рисует то что я выделил...
Подскажите как это сделать пожалуйста.
Автор: vladman
Дата сообщения: 13.05.2010 18:38
SIgor33

Цитата:
Подскажите можно ли изменить у TcxGridDBTableView ширину leveltabs (таб вкладки вьюва) а то весь текст надписи таба не входит?

А разве эта ширина не устанавливается во всю длину текста надписи?
Автор: marser
Дата сообщения: 13.05.2010 18:59
safon777
Попробуйте использовать:
DataController.GetRowIndexByRecordIndex
DataController.IsRowSelected
Автор: vladman
Дата сообщения: 13.05.2010 19:51
safon777, marser

Цитата:
Вопрос: как определить является ли выделенной запись которой соответствует массив значений TableView.DataController.Values[i,...]


Цитата:
Попробуйте использовать:
   DataController.GetRowIndexByRecordIndex
   DataController.IsRowSelected

Можно и одной строкой )
DataController.DataControllerInfo.Selection.IsRecordSelected(ARecordIndex: Integer): Boolean;
Автор: vladman
Дата сообщения: 13.05.2010 23:44
Zaragossa

Цитата:
На этом у меня тупик. Рисует то что я выделил...

Вроде бы все верно, только не понятно присваивание ATextToDraw := ..., т.е. зачем оно нужно, а также где и чему присваивается значение checkbox6.Caption. Набросайте простой пример иллюстрирующий вашу проблему. Это поможет быстрее с ней разобраться.
Автор: SIgor33
Дата сообщения: 14.05.2010 08:13
vladman

Цитата:
А разве эта ширина не устанавливается во всю длину текста надписи?

Самое интересное что нет. Если текст слишком большой то окончание ставиться многоточие
например Данные полученные из внешнего источника
отображает Данные полученные из внешнего ист..
Автор: X11
Дата сообщения: 14.05.2010 09:24

Цитата:
Пользователи попросили ограничить перебор выделенными записями (когда есть выделение)

Цикл по выделенным записям грида уже обсуждали много раз.


Код: Var
i: integer;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
with dbgMail.dataController do
begin
beginupdate;
Screen.Cursor := crHourGlass;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin

//unbound or provider mode
ShowMessage(VarToStr(Values[ARowInfo.RecordIndex, dbgMailMessage.Index]));

end;//else
end;//for
finally
endupdate;
Screen.Cursor := crDefault;
end;//try
end;//with
Автор: Zaragossa
Дата сообщения: 14.05.2010 11:48
vladman

Набросаю пример.

У меня ,предположим, 3 записи в таблице:
№счетчика Марка Показания
1 ТВ-2 10
2 ТВ-1 25
3 ТВ-2 16

Так вот, мне нужно когда я клацаю по строке, выделяло все похожие строки, сравнение происходит по марке. Выглядеть должно так:

1 ТВ-2 10
2 ТВ-1 25
3 ТВ-2 16

P.S. Если оставить код такой как есть

if CheckBox6.Checked= True then
begin
val := VarAsType(AViewInfo.GridRecord.DisplayTexts[DBtablemarka.Index], varString);
if val = checkbox6.Caption(название поля марка) then
ACanvas.Canvas.Font.Color := clRed

с самого начала закрашивается выделенная строка, а остальные закрашиваются если перейти на другую закладку и вернутся, причина скорее всего в том что грид не обновляется сразу, пробовал cxGrid2.Refresh - не помогло.
Автор: vladman
Дата сообщения: 14.05.2010 17:23
SIgor33

Цитата:
Самое интересное что нет. Если текст слишком большой то окончание ставиться многоточие

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


Добавлено:
Zaragossa
Попробуйте так

Код:
if AViewInfo.GridRecord.Values[<Your>cxGridDBTableViewFieldForCheck.Index] = <YourValueForMark> then
ACanvas.Font.Color := clRed;
Автор: crazypiggy
Дата сообщения: 17.05.2010 14:32
Добрый день. Я уже задавал этот вопрос, но мне пока никто не ответил. Попробую ещё раз. Использую cxGrid в нем включаю DataControler->Filter->Options-> fcoCaseInsensitive=true и фильтр работает независимо большая буква или маленькая, а вот для cxDBPivotGrid не могу найти как сделать так чтобы фильтр работал независмо от размера символа. Подскажите как включит этот CaseInsensitive для PivotGrid.
Автор: vladman
Дата сообщения: 17.05.2010 19:39
crazypiggy

Цитата:
Подскажите как включит этот CaseInsensitive для PivotGrid.

По идее, фильтр в cxGrid и cxPivotGrid работают по одной технологии. То, что свойство DataController в PivotGrid не паблишед, еще не значит что его не существует. Попробуйте выполнить

Код: <Your>cxDBPivotGrid.DataController.Filter.Options := <Your>cxDBPivotGrid.DataController.Filter.Options + [fcoCaseInsensitive];
Автор: linker_2009
Дата сообщения: 17.05.2010 19:55
[b]crazypiggy[/b]
у меня работатет следуящая строка
cxPivotGrid1.DataController.Filter.Options:=[fcoCaseInsensitive];
Автор: mdid
Дата сообщения: 18.05.2010 16:10
есть cxgrid....создал поле типа TcxCheckBox..хочу сделать поля не помеченными

Код:
TcxCheckBox(EndMon.Properties).State:=cbsUnchecked;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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