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

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

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

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

golkanavt



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

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




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

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
vladman

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

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

Можно. Обработайте событие onDrawRowHeader, в котором воспользуйтесь функцией ACanvas.DrawText в которой, в свою очередь, укажите в качестве параметра Flags значение cxWordBreak or cxShowEndEllipsis. Не забудьте указать Done := True;. Правда при этом, вам придется самим полностью перерисовать весь Header. Если будут трудности обращайтесь, попробую набросать готовый обработчик.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 23:57 13-12-2009
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На главной форме только cxPageControl и dxBarManager1. Динамически в коде
Код:
dxBarManager1.BeginUpdate;
...
dxBarManager1.EndUpdate();
создаются cxTabSheet и на них с других форм переносятся dxDockSite со всеми компонентами. Прорисовка идет не мгновенно, заметно для глаз. Как ускорить прорисовку?
Когда все созданные табы скрыты по кнопке pcoCloseButton
Код:
procedure TfmGlob.cxPageControl1CanClose(Sender: TObject;
  var ACanClose: Boolean);
begin
  ACanClose:=false;
  cxPageControl1.Pages[(cxPageControl1.ActivePageIndex)].TabVisible:=false;
end;
то при попытке показать первый скрытый таб, он появляется, но скрыт другим невидимым табом. Необходимо щелкнуть по нему, чтобы содержимое появилось. Как это исправить?  
 
Добавлено:
Похоже последний баг, из-за неправильного ActivePageIndex, при установке TabVisible=true; Как сделать активный таб зная его имя? PageIndex у таба не подойдет, если есть скрытые табы.

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 10:59 14-12-2009
Graach



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

Цитата:
Если будут трудности обращайтесь, попробую набросать готовый обработчик.

Обращаюсь Вот так у меня выглядит обработчик onDrawRowHeader:
 
ACanvas.Brush.Color := AHeaderViewInfo.viewparams.color;
ACanvas.FillRect(AHeaderViewInfo.HeaderRect);
ACanvas.drawtext(AHeaderViewInfo.captioninfo.items[0].cation, AHeaderViewInfo.headerrect, cxWordBreak or cxShowEndEllipsis, true);
done:= true;
 
Причем троеточие в конце строки он ставит (в принципе он и при выборе этого свойства в гриде ставил), а вот переносить не переносит.

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 12:52 14-12-2009
vladman

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

Цитата:
Вот так у меня выглядит обработчик onDrawRowHeader:  

Вроде бы все у вас верно. Но все-таки  попробуйте этот код, должно работать.

Код:
procedure <YourTForm>.<YourcxVerticalGrid>DrawRowHeader(Sender: TObject; ACanvas: TcxCanvas; APainter: TcxvgPainter;
    AHeaderViewInfo: TcxCustomRowHeaderInfo; var Done: Boolean);
var
  vCaptionTextRect: TRect;
begin
  vCaptionTextRect := AHeaderViewInfo.CaptionsInfo[0].CaptionTextRect;
  ACanvas.Brush.Color := AHeaderViewInfo.ViewParams.Color;
  ACanvas.FillRect(AHeaderViewInfo.HeaderRect);
  ACanvas.DrawText(AHeaderViewInfo.CaptionsInfo[0].Caption, vCaptionTextRect, cxWordBreak or cxShowEndEllipsis);
  Done := True;
end;
 

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 15:47 14-12-2009
afiget



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

Цитата:
укажите в качестве параметра Flags значение cxWordBreak or cxShowEndEllipsis

Может быть только первое?

Цитата:
создаются cxTabSheet и на них с других форм переносятся dxDockSite со всеми компонентами. Прорисовка идет не мгновенно, заметно для глаз. Как ускорить прорисовку?

Посмотрите: Ссылка 1

Цитата:
Как сделать активный таб зная его имя?

У таба есть имя? Откуда? Или вы имели ввиду Caption. Если так, то в цикле найдите нужный таб и сделайте ему TabVisible:=true
Посмотрите также в сторону SelectNextPage и ActivePage.
 
И еще, PageIndex как раз подойдет, в отличие от TabIndex.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 15:48 14-12-2009
vladman

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

Цитата:
Как сделать активный таб зная его имя?

<YourcxPageControl>.ActivePage := <YourcxTabSheet>;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 15:51 14-12-2009
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
neznayka3
 
А установить свойство ActivePage в нужное значение не помогает?

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 15:56 14-12-2009
Graach



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

Цитата:
Вроде бы все у вас верно. Но все-таки  попробуйте этот код, должно работать.

Не работает

Цитата:
Может быть только первое?  

Уже перепробовала все комбинации всех возможных параметров.
Эффект один и тот же (из тех что более ли менее похожи на то, что должно быть) - делает wordbreak, но не переносит на следующую строку. Причем даже если вручную в ран тайме увеличить высоту строки, все равно ничего под перво строкой не выводится...

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 18:30 14-12-2009
vladman

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

Цитата:
Не работает

Сделайте простой пример где не работает, посмотрим. Может мы о разном говорим.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 03:19 15-12-2009
Graach



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

Цитата:
Сделайте простой пример где не работает, посмотрим. Может мы о разном говорим.

Что-то я не поняла вопрос? я ввела код из вашего предыдущего поста и в результате в конце строки появилось троеточие.

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 09:26 15-12-2009 | Исправлено: Graach, 10:20 15-12-2009
vladman

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

Цитата:
Что-то я не поняла вопрос?

Создайте простое приложение, которое проиллюстрирует проблему. Выложите как запускаемый модуль, так и его исходный код.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 11:05 15-12-2009
Graach



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

Цитата:
Выложите как запускаемый модуль, так и его исходный код.

Ссылка
В архиве простенький проект с одним гридом. И овт так это все выглядит у меня:
   
 
ЗЫ. просьба сильно не бить за оформление ссылок...

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 13:27 15-12-2009 | Исправлено: Graach, 13:28 15-12-2009
vladman

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

Цитата:
И овт так это все выглядит у меня:

Ну как по мне, правильно выглядит - переносит по словам. Что с ней не так?
Наверное, я понял. Вы, скорее всего, имели ввиду, что в случае неотображения неполного текста Headera его высота (да и высота всей строки) должна динамически увеличиваться. Верно?

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 16:31 15-12-2009
Graach



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

Цитата:
Вы, скорее всего, имели ввиду, что в случае неотображения полного текста Headera его высота (да и высота всей строки) должна динамически увеличиваться. Верно?

Да! Именно так и делается если не влазит значение Value (как в этом примере, компонент сам перенес текст значения на вторую строчку и соответственно увеличил высоту строки).

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 19:28 15-12-2009
vladman

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

Цитата:
компонент сам перенес текст значения на вторую строчку и соответственно увеличил высоту строки

Такое поведение регулируется свойствами TcxVerticalGrid.OptionsView.CellAutoHeight и TcxEditRow.Options.CanAutoHeight.
Значения этих свойств используется только для отрисовки Row Value, но не Header'a.
Уже существует suggestion касательно AutoHeight для Caption (Header), но пока еще не реализовано.
Постараюсь что-то придумать для решения вашей проблемы.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 01:55 16-12-2009
neznayka3

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

Цитата:
ActivePage.

Не знал, про это свойство. Работает как надо.

Цитата:
Посмотрите: Ссылка 1  

Спасибо за ссылку, почитаю. Можно ли как то глобально запретить прорисовку всех DevEx компонент? Чтобы не писать Begin\End Update для каждого грида, BarManager и тд.

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 08:31 16-12-2009
Graach



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

Цитата:
Постараюсь что-то придумать для решения вашей проблемы.

Моя благодарность не будет знать границ

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 10:57 16-12-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Graach
Вот, что-то придумал, пробуйте.
В свой пример добавляйте обработчик OnDrawValue для cxVerticalGrid1, опишите поле
  private
    FHeaderHeight: Integer;
в классе формы
И, собственно, сами обработчики:

Код:
uses
  Math;
...
...
procedure TForm2.cxVerticalGrid1DrawRowHeader(Sender: TObject; ACanvas: TcxCanvas; APainter: TcxvgPainter;
  AHeaderViewInfo: TcxCustomRowHeaderInfo; var Done: Boolean);
var
  vCaptionTextRect: TRect;
  vText: string;
begin
  vCaptionTextRect := AHeaderViewInfo.CaptionsInfo[0].CaptionTextRect;
  vText := AHeaderViewInfo.CaptionsInfo[0].Caption;
 
  ACanvas.Brush.Color := AHeaderViewInfo.ViewParams.Color;
  ACanvas.FillRect(AHeaderViewInfo.HeaderRect);
  FHeaderHeight := Windows.DrawText(ACanvas.Handle, PChar(vText), Length(vText), vCaptionTextRect, DT_CALCRECT or DT_WORDBREAK) + 4;
  Windows.DrawText(ACanvas.Handle, PChar(vText), Length(vText), vCaptionTextRect, DT_WORDBREAK);
  Done := True;
end;
 
procedure TForm2.cxVerticalGrid1DrawValue(Sender: TObject; ACanvas: TcxCanvas; APainter: TcxvgPainter; AValueInfo:
    TcxRowValueInfo; var Done: Boolean);
var
  vContentRect: TRect;
  vText: string;
  vContentHeight: Integer;
begin
  vContentRect := AValueInfo.ContentRect;
  vText := AValueInfo.DisplayValue;
 
  ACanvas.Brush.Color := AValueInfo.ViewParams.Color;
  ACanvas.FillRect(AValueInfo.ContentRect);
  vContentHeight := Windows.DrawText(ACanvas.Handle, PChar(vText), Length(vText), vContentRect, DT_CALCRECT or DT_WORDBREAK) + 4;
  AValueInfo.Row.Height := Max(FHeaderHeight, vContentHeight);
  Windows.DrawText(ACanvas.Handle, PChar(vText), Length(vText), vContentRect, DT_WORDBREAK);
  Done := True;
end;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 15:17 16-12-2009
victorman2010

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть dxMemData, через процедуры CreateFieldsFromDataSet и LoadFromDataSet
добавляю поля из дата сета. Вопрос: можно ли в этот dxMemData с уже созданными полями добавлять или удалять поля, ориентируясь на дата сет (что то вроде "DeleteFieldFromDataSet")?

Всего записей: 33 | Зарегистр. 16-12-2009 | Отправлено: 15:42 16-12-2009
vladman

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

Цитата:
Можно ли как то глобально запретить прорисовку всех DevEx компонент? Чтобы не писать Begin\End Update для каждого грида, BarManager и тд.

Насколько мне известно - нет. Так ли это необходимо именно для всех компонент? Если все же считаете, что необходимо, напишите свою процедуру перебора всех компонент, например, формы, определения типа очередного компонента и, соответственно, вызова его метода Begin\EndUpdate.
 
Добавлено:
victorman2010

Цитата:
Есть dxMemData, через процедуры CreateFieldsFromDataSet и LoadFromDataSet  

Достаточно вызвать LoadFromDataSet, поля создадутся автоматически.

Цитата:
можно ли в этот dxMemData с уже созданными полями добавлять или удалять поля, ориентируясь на дата сет (что то вроде "DeleteFieldFromDataSet")?

Удалите сначала все поля, а потом снова выполните LoadFromDataSet.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 16:07 16-12-2009 | Исправлено: vladman, 16:30 16-12-2009
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru