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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
VitOs2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья!
Подскажите пожалуйста, как можно отследить, находится ли курсор мышки над ApplicationButton?
Используется Devexpress Ribbon.
Спасибо!

Всего записей: 54 | Зарегистр. 18-03-2008 | Отправлено: 14:29 28-05-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
тутича сорцы  http://upload.com.ua/get/900875666/ со стандартным пасом, пароль к базе под ковриком #  а юзер
стандартный ,но наскоко я разбираюсь в колбасных обрезках - если ты будеш подкидать под свой сервак то надо твои юзер/пас

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 14:41 28-05-2009
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister Floh
 
Значит неправильно написан класс наследник.
 
На примере TcxRadioGroupItem:
 
class TcxRadioGroupItemAccess : public TcxRadioGroupItem
{
  bool __fastcall GetEnabled(void)
  {
    return TcxRadioGroupItem::Enabled;
  }
  void __fastcall SetEnabled(bool Value)
  {
    TcxRadioGroupItem::Enabled = Value;
  }
public:
  __property bool Enabled = { read=GetEnabled, write=SetEnabled };
};

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 15:22 28-05-2009 | Исправлено: jicoff, 15:37 28-05-2009
Meister Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
afiget
jicoff
Итак господа хочу для начала выразить Вам свою искреннюю признательность за то, что помогли мне разобраться как все это на самом деле работает, в частности, как достучаться к private property. Это действительно была захватывающая борьба! Большое спасибо!!
 
А теперь я хочу написать свое заключение (может несколько философское), после которого опять (уж извините ) попрошу совета...
 
Итак если разработчик компонента закрывает свойство в private - значит это кому-нибудь нужно.. И вот почему я прихожу к такому выводу - если я в FormCreate определяю какие из RadioButtons будут Disabled, то при входе во всплывающее меню это все равно не отрисовывается:

а отрисовка происходит только после клика по одному из RadioButton:

Какие только из возможных событий для Update (Repaint?) PopUp menu я только не использовал - все на смарку.. Отсюда вывод - скорее всего разработчики тоже не добились желаемого результата и чисто логически решили, что в Radio Button свойство Enabled действительно лишнее... Ведь чаще всего так и бывает.. И только в моем случае и в ему подобных - оно нужно.. В конце концов ведь это не критично..
 
Теперь о советах... Господа! Как мне кажется сама идиология Ribbons несовместима с идеей Radio Buttons  в данном случае - старо и не красиво.. Посему - самое простое конечно решение создавать элементы RadioGroupItems в run-time, но вспомним, что ранее в этом абзаце мы отказались от него по описанным там же причинам - прошу совета как реализовать менюшку для выполнения статистических запросов (кол-во их заранее известно)? Т.е. что имеется ввиду: отмечаем один из элементов Popup menu (аля Radio button) ну и далее при нажатии самой TcxLargeButton выполняем отмеченный запрос.. Ранее в форуме я уже упоминал, что собираюсь использовать n-ое кол-во TcxLargeButton, в которых использовать свойство Down и таким образом реализовать что-то типа RadioGroup... Только вот где и как это реализовать? Толи в обычном Popup Menu, то ли в галерее.. Буду пробовать... А от Вас Господа я жду конструктивных советов по оформлению дизайна.. За каждый совет и мнение буду очень признателен.. Будете у нас - с меня пиво.. (Или я у Вас)
 
Спасибо за внимание...

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 22:55 28-05-2009 | Исправлено: Meister Floh, 23:17 28-05-2009
vladman

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

Цитата:
Enabled есть, а вот Checked я не нашел..

Так его там и не должно быть
В случае c TcxBarEdit значения Checked устанавливаются свойством EditValue TcxBarEdit'а в соответствии со свойством EditValueFormat. Например, для CheckGroup c 3 Item'ами можно выполнить.

Код:
uses
  cxCheckBox;
...
  TcxCheckGroupProperties(<YourcxBarEditItem>.Properties).EditValueFormat := cvfStatesString;
  <YourcxBarEditItem>.EditValue := '011';
...

После выполнения, Item'ы с индексами 1 и 2 будут Checked.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 00:58 29-05-2009
dimm78

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

Цитата:
Meister Floh

А не проще использовать тот же TcxLargeButton с выпадающей менюшкой, из обычных cxButton? При нажатии главной кнопки появляется меню, а при выборе конкретного пункта выполняется Ваш статческий запрос. Помоему это логично....  

Всего записей: 163 | Зарегистр. 07-12-2005 | Отправлено: 02:02 29-05-2009 | Исправлено: dimm78, 02:03 29-05-2009
vladman

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

Цитата:
Подскажите пожалуйста, как можно отследить, находится ли курсор мышки над ApplicationButton?  

В событии Ribbon OnMouseMove выполняем

Код:
  if PtInRect(TdxRibbon(Sender).ViewInfo.ApplicationButtonImageBounds, Point(X, Y))
    then Self.Caption := 'IN'
    else Self.Caption := 'OUT';


Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 02:31 29-05-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister Floh
я конечно не проверял, но можно наверно попробывать использовать cxCheckListBox, cxCheckGroup, cxCheckBox и заставлять выбирать только один из вариантов... возможно там не будет таких проблем с запрещением каких либо пунктов и отрисовкой...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 08:40 29-05-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Meister Floh поддерживаю dimm78 поставь бутоны и объедени их групу
и поставь им свойство чекед - и будет тебе вариант радиобутонов

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 09:10 29-05-2009
VitOs2

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

Всего записей: 54 | Зарегистр. 18-03-2008 | Отправлено: 09:45 29-05-2009
vladman

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

Цитата:
если ты будеш подкидать под свой сервак то надо твои юзер/пас

Ну конечно же под свой, к вашему же точно не достучусь.  
 

Цитата:
тутича сорцы

Вскрытие показало - причина - неверная реализация master-detail для такого представления как вы выбрали.
Ваш подход верен при классическом представлении, когда в один момент времени отображаются записи дитэйл только одного мастера. В данном же случае вам необходимо в дитэйл датасете выбирать все записи для всех мастеров попавших в выборку, а реализацию соответствий записей из дитэйл к определенному мастеру берет на себя Грид.
т.е. в tblDvig: TpFIBDataSet в SelectSQL вместо        
WHERE a.CTAN_AMORT_MASTER_ID=:CTAN_AMORT_MASTER_ID ORDER BY a.DATA указать всего лишь  
ORDER BY a.CTAN_AMORT_MASTER_ID, a.DATA .т.е. убрать where и добавить в сортировку поле a.CTAN_AMORT_MASTER_ID, причем первым. Сортировка по a.CTAN_AMORT_MASTER_ID важна, не забудьте это указать.
На первый взгляд это все, но проверить не могу, поскольку билдером не пользуюсь. Так что поправляйте и проверяйте.
Вот еще покопался, и заметил, что у вас V_Dvig.DataController.DataModeController.DetailInSQLMode = True в таком случае можно попробовать другой подход
По 1. пункту (*стал - пропали записи детала с предыдущего мастера*) попробуйте tblDvig.DataSource отвязать от мастера т.е. tblDvig.DataSource = nil.
По 2. пункту (*я вижу токо новую запись, а те что уже были пропадают*) попробуйте в существующий запрос добавить перед сортировкой по дате еще и сортировку по a.CTAN_AMORT_MASTER_ID, должно помочь.
 
А в общем, мне больше нравится master-detail при DetailInSQLMode = false, проверено много раз - работает отлично. Так что в случае изменения SelectSQL не забудьте V_Dvig.DataController.DataModeController.DetailInSQLMode = false.

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

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

Цитата:
Можно так -  
 

Код:
 
procedure <YourForm>.<YourcxDBVerticalGridStylesGetContentStyle>(Sender: TObject; AEditProp: TcxCustomEditorRowProperties;
  AFocused: Boolean; ARecordIndex: Integer; var AStyle: TcxStyle);
begin
  AStyle := <YourcxStyle>; //это обязательно!
  if TcxDBEditorRow(AEditProp.Row).Properties.DataBinding.FieldName = '<YourField1Name>' then
    AStyle.Color := clRed
  else
    if TcxDBEditorRow(AEditProp.Row).Properties.DataBinding.FieldName = '<YourField2Name>' then
      AStyle.Color := clYellow
    else AStyle.Color := clGreen;
end;  
 

 

 
При такой реализации изменения стиля влияет на отрисовку всех ячеек (ибо меняется весь стиль)  
Реализовал выделение нужных ячеек путем статического присваивания ячейкам отдельного стиля.

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 11:58 29-05-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
все отлично в отображении но с одним ньюансом - я перегенерировал модифи скл,
в связи с новым селектом и теперь не подставляется ключ мастера при новой записи
в детал
 
 
Добавлено:
новую запись я добавляю не через грид,а через диалог
и наверное без where a.CTAN_AMORT_MASTER_ID=:CTAN_AMORT_MASTER_ID
не обойтись

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 13:08 29-05-2009
vladman

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

Цитата:
наверное без where a.CTAN_AMORT_MASTER_ID=:CTAN_AMORT_MASTER_ID не обойтись

Обойтись. Всего навсего в обработчике BeforePost датасета tblDvig нужно выполнить tblDvig['CTAN_AMORT_MASTER_ID'] := tblCtan['CTAN_AMORT_MASTER_ID']

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



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
ну моно и так .Пасиб большое
 
 
Добавлено:
vladman
блин я мать торможу не по детски,все добавляется,подставляется ключ мастера

Цитата:
tblDvig['CTAN_AMORT_MASTER_ID'] := tblCtan['CTAN_AMORT_MASTER_ID']

но теперь не вижу новой записи до полной перезагрузки таблицы tblDvig
 

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 14:00 29-05-2009
vladman

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

Цитата:
При такой реализации изменения стиля влияет на отрисовку всех ячеек (ибо меняется весь стиль)

Нет, стиль меняется только для нужных Row. Может вас ввело в заблуждение else AStyle.Color := clGreen;?
попробуйте изменить else AStyle := nil. В таком случае только Row c FieldName = '<YourField1Name>' и FieldName = '<YourField2Name>' будут изменять цвет, все остальные будут отрисовываться без применения стиля.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:10 29-05-2009
Chukotka

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

Цитата:
Нет, стиль меняется только для нужных Row.

Спасибо, проверю еще раз.
 
Не подскажете - как определить столбец, над которым находится курсор мышки (QuantumTreeList)? Есть ли аналог гридовского GetHitTest(X, Y)? На форуме devexpress мелькал ответ что, дескать, пользуйте <TreeList>.GetHitInfo - такого свойства не нашел.

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 14:36 29-05-2009
vladman

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

Цитата:
но теперь не вижу новой записи до полной перезагрузки таблицы tblDvig

Вы добавляете (Append) в конец. а при простом рефреше рефрешится только одна запись и сортировка не отрабатывает, поэтому и нужен FullRefresh.
Попробуйте вместо tblDvig->Append() tblDvig->Insert()

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:37 29-05-2009
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
идет,токо сначала надо tblDvig->Last();
 
Добавлено:
Пасиб за помощь

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 16:00 29-05-2009
vladman

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

Цитата:
Не подскажете - как определить столбец, над которым находится курсор мышки (QuantumTreeList)?

Подскажу, чего же не подсказать
procedure <YourForm>.<YourcxDBTreeList>MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if TcxDBTreeList(Sender).HitTest.HitAtColumn then
    Self.Caption := TcxDBTreeList(Sender).HitTest.HitColumn.Name;
end;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 16:27 29-05-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