Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress 2

Модерирует : ShIvADeSt

ShIvADeSt (07-02-2009 14:53): Продолжаем тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123#1
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, начало тут
 

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:16 29-01-2007 | Исправлено: VitaliM, 15:47 24-11-2008
AlexeiKozlov

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
народ,а что за косяк .
у меня 8.2
студия 2008.
язык vb
 
добавляю компонент от dev ,например barmanager.
удаляю его.
но в коде дизайнера,код не удален!там все осталось.
и так со всеми компонентами. как исправить этот глюк?

Всего записей: 2188 | Зарегистр. 16-10-2004 | Отправлено: 13:39 22-08-2008
Dennica



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
brookson
Может код, выводящий панель на печать, стоить внутри блока блокировки обновления вьюшки или датасэта? Типо..
cxGrid1TableView1.BeginUpdate;
... закачка новых данных ...
dxComponentPrinter1.Preview(true, PanelLink);  
cxGrid1TableView1.EndUpdate;
А так, вроде никогда такого глюка не замечал.
 

Всего записей: 235 | Зарегистр. 19-12-2005 | Отправлено: 15:01 22-08-2008 | Исправлено: Dennica, 15:05 22-08-2008
brookson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dennica

Цитата:
Может код, выводящий панель на печать, стоить внутри блока блокировки обновления вьюшки или датасэта?  

Да нет, всё честно.

Код:
 
procedure TF_REPORTS.BtnPrintPanelClick(Sender: TObject);
begin
dxComponentPrinter1.Preview(true, PanelLink);
end;

В гриде создание идёт внутри

Код:
 
tvgrid1.BeginUpdate;
...
tvgrid1.EndUpdate;
cxGrid1.Visible:=true;
 

Не знаю, что еще. Пробовал обновлять панель. Не помогло

Всего записей: 139 | Зарегистр. 06-09-2007 | Отправлено: 00:17 23-08-2008
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Странная производительность у ТриЛистовых эдиторов
 
В ТриЛисте есть 3 столбца, данных для которых - процента (0-100)
Если специально назначать редактор ПрогрессБарЭдит из ЭдитРепозитори или создавать свой ПрогрессБарЭдит, то уже при отрисовки 100 записей начинаются лаги.
Пример: при указанных 100 записях время загрузки записей изменяется с 1 секунды до 8!
 
Кто-нибудь сталкивался с такой проблемой?

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 13:39 26-08-2008
Dennica



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
korobovmax
Список связан с датасэтом?
Если не отрисовывать прогресс скорость загрузки/перемещения по записям нормальная?
 
У меня тоже есть пару мест в прогах где используется этот контрол, прикрученный к датасэтам, и скорость его работы оставляет желать лучшего. Эксперементально вычислил что при выставлении OptionsData.SyncMode := False скорость становится приемлемой, но в некоторых случаях этот флажок мне снять нельзя =(. Как его можно ускорит ь еще я так и не нашол.

Всего записей: 235 | Зарегистр. 19-12-2005 | Отправлено: 14:25 26-08-2008
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Связан, но хитро Есть самописное дерево (SQLTree), которое собирает ноды из таблиц в памяти в дерево и дает ноды DX-овскому дерево. Можно сказать, аналог dxMemData, который можно подсунуть Гриду.
 
Соответственно, используется не DB-шное дерево, а TcxTreeList, у которого SyncMode'а нет
 
Без него и с использование других контролов все нормально по скорости.

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 15:55 26-08-2008
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
korobovmax
Я бы вместо ПрогрессБарЭдит использовал 100 картинок разной ширины в ImageComboBox либо делал отрисовку сам. В зависимости от способностей в программировании
Есть еще вариант со своим компонентом: одной картинкой шириной в 1 пиксель (ну или сколько там нужно для отображения 1 процента) и растягиваением этой картинки на нужное кол-во пикселей в зависимости от значения в процентах.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 21:19 26-08-2008
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно так сделать.
Оба варианта привлекательны. Скорее всего, попробую второй, потому что, как я думаю, проще сделать Пики и Оверхеды (подсветка красным, в случае превышения заданной позиции) - такие штуки ПрогрессБара использую.
 
Еще немного помогает BeginUpdate/EndUpdate до и после раскрытия нода (у меня, считай - загрузки данных). 6.5 вместо 8

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 09:31 27-08-2008
sergiuz1303



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время суток!
Столкнулся с проблемой при обработке события OnCustomDrawCell в гриде пишу такой вот код
 
if AViewInfo.GridRecord.Values[0]=1 then
 begin
    ACanvas.Canvas.Brush.Color := clMoneyGreen;
    ACanvas.Canvas.Font.Color  := clRed;
 end;
 
Все красиво работает когда открываеться таббличка первый раз.
Но если я меняю значения в первом столбце с 0 на 1 или наоборот (хотя фактически это не так важно) то  начинаються глюки. То есть есть изменяю первую строчку то тоже ничего но если я начинаю изменять последующие к примеру там третью то после обработки события OnCustomDrawCell текст в третей строчке заменяеться на текст из первой строчки причем по всем столбцам.
 
Подскажите что нужно изменить.
 
П.С. Использую Firebird подключаюсь через Фибсы.  
изменение через кнопку или через обработку события OnCellClick
 

Всего записей: 46 | Зарегистр. 11-06-2007 | Отправлено: 17:13 27-08-2008
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
sergiuz1303
Надо либо ImmediatelyPost установить,
либо в событии OnFocusedItemChange пинать грид, чтобы перерисовался.
 
Добавлено:
Также посмотрите демо CustomDrawTableViewDemo ->
форма CustomDrawTableViewDemoMainForm -> обработчик tvCarsCustomDrawCell.
 
Данные для условия берутся из GridRecord.DisplayTexts[Index].  
Потом ACanvas.Canvas.FillRect(ARec);
Наконец, самое важное: ADone := True.

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 20:02 27-08-2008
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите. Не могу найти в дебрях свойств cxGrida нужное свойство, но думаю, что оно есть: нужно сортировать столбец согласно отображаемого текста.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 20:38 27-08-2008
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть ли у кого мысли, как заставить в произвольный момент перерисовывать заголовки в гриде?

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 20:40 27-08-2008
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё, нашёл наконец-то: DataController->Options->dcoSortByDisplayText
 
Добавлено:
Жаль, что нельзя сортировать по выводимому тексту только какую-то конкретную колонку
 
Добавлено:
jicoff, а что-нить типа header.repaint... update... columt.header.repaint
 
Добавлено:
а если так:
cxGridDBCPTEL.HeaderAlignmentHorz := cxGridDBCPTEL.HeaderAlignmentHorz;
 
cxGridDBCPTEL.HeaderAlignmentHorz := taCenter;
а потом вернуть в прежнее положение
 
типа обманки

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 20:47 27-08-2008
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такая проблема с фильтрованием данных.
Нужно фильтровать данные согласно видимом тексту в колонке, т.к. физически в таблице (FIBDataset/firebird) шифрованные. Хотелось бы фильтр чтобы работал, так же как и сортировка, такое возможно в cxGrid?

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 01:43 28-08-2008
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
 

Цитата:
что-нить типа header.repaint... update... columt.header.repaint

 
уже предпринимал, но перерисовка не происходит. В общем случае отрисовка вызывается на отображение и скрытие окна, на котором лежит грид.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 05:08 28-08-2008
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну значит вызвать перерисовку грида или панели, на которой он лежит

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 10:38 28-08-2008
sergiuz1303



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
korobovmax
Извиняюсь за наглость но немогли бы вы скинуть действительно рабочий пример кода для зарисовки грида, желательнро не тот что используеться в примере Девов.

Всего записей: 46 | Зарегистр. 11-06-2007 | Отправлено: 11:06 28-08-2008
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
sergiuz1303
ADone в True не надо, если не полностью своя прорисовка.
 
Тогда, в обработчике OnCustomDrawCell:
var
val: String;
...
 
val := VarAsType(AViewInfo.GridRecord.DisplayTexts[<НазваниеСтолбца>.Index], varString);
      if val = 'SPORTS' then
        ACanvas.Canvas.Font.Color := clRed
      else
      if val = 'SALOON' then
        ACanvas.Canvas.Font.Color := clBlue
      else
      if val = 'TRUCK' then
        ACanvas.Canvas.Font.Color := clGreen;
      ACanvas.Canvas.FillRect(ARec);
 
Все.
 
Добавлено:
sergiuz1303
Хм.
От вашего кода принципиально не отличается, а так как на примере прекрасно работает (при изменении значения прорисовывается на нужной записи), смотрите, чтобы грид подхватывать индексное поле.

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 11:39 28-08-2008
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
 

Цитата:
Ну значит вызвать перерисовку грида или панели, на которой он лежит

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

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 15:27 28-08-2008
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Dennica, afiget
Насчет прогрессбаров - я, вместо указания RepositoryItem, в OnGetEditProperties написал условие, чтобы устанавливать эдитор в прогрессбар только если значение не пустое.
То есть:
    if (ANode.Values[<Столбец>.ItemIndex]) <> 0) then
        EditProperties := edtrepsI.Properties;
 
Иначе - показывать поумолчанию (TextEdit).
 
В OnGetDisplayText написал:
    if Value = '0' then
        Value := '';
 
В итоге:
1. Заметно ускорилось, так как далеко не на всех нодах (сейчас) есть значения для отображения прогрессбара по ним;
2. Стало более наглядно, так как куча бесполезных (показывающих 0%) надписей исчезло.
 
Конечно, с течением времени скорость будет падать, так как прогрессбары все-равно медленные, но, глядишь, к тому времени уже выйдет обещанный QuantumTreeList 5.0 (!)

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 16:48 28-08-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress 2
ShIvADeSt (07-02-2009 14:53): Продолжаем тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru