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

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



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister Floh
Менюшка как реализована, какими компонентами?
Так может быть и не создавать "радио-бутоны"? Или ты в дизайн-тайм создаешь?
 
Добавлено:
Кстати, в любом случае можно их прятать. И еще, у наследников TdxBarComponent есть Enabled.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 11:57 27-05-2009
X11



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

Цитата:
Можно попробовать на событие GridView.OnInitEdit, у TcxMemo есть свойство PopupMenu, преобразовать AEdit к TcxMemo и вперед...

Начинает получаться. Так вот, на могу понять, как получить текст этого преобразованного cxMemo
 
Нажимаю F2 для вызова редактора. ImadiateEditor и AlwaysShowEditor отключены.

Код:
 
procedure TfmPreviewDB.grid2InitEdit(Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem; AEdit: TcxCustomEdit);
begin
 if AItem.Index = colAD.Index then begin
   TcxMemo(AEdit).PopupMenu := pmMemoAD;//меню появляется то, что нужно.
 
   //здесь нужно получить и обработать выделенный в мемо-поле текст
   ShowMessage(TcxMemo(AEdit).EditingText);//глючит.
 end;
end;
 

 
Эта строка:
ShowMessage(TcxMemo(AEdit).EditingText);
показывает при самом первом редактировании пустое окно. При всех остальных редактированиях уже реальный текст из мемо-колонки. Что не так?
 
EditingValue, EditValue вызывают исключительные ситуации при нажатии на F2 в ячейке:

Цитата:
 
raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'.
 

 
Что можете подсказать, как узнать в этом событии текст мемо-ячейки.
 
Пытался в справке найти инфу по TcxMemo:

Цитата:
Sorry, no topics were found for the selected link.
Keywords = "TcxMemo;"
IndexMoniker =  
Source URL =  
 


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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 12:34 27-05-2009
Meister Floh



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

Цитата:
Менюшка как реализована, какими компонентами?  

Меню выглядит так:

Соответственно реализовано:
TdxBarLargeButton, ButtonStyle->bsDropDown, DropDownMenu->TdxRibbonPopupMenu в котором - TcxBarEditItem, Properties->RadioGroup
 
Хочу, чтобы в зависимости от заполненности строк отвечающих за запросы, можно было енэйблить-дизэйблить элементы радиогруп...

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 12:42 27-05-2009 | Исправлено: Meister Floh, 12:44 27-05-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не много не в ту степь пошёл. Мну удалось приклеять меню к мемо-колоке.
Дальше не могу сообразить, как получить выделенный текст. Мне нужно обработать выделенный текст. Даж не могу сообразить по каким ключевым словам искать, в какую сторону смотреть? Подозреваю что, нужно смотреть в сторону InplaceEditor, нет?

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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 12:49 27-05-2009
vladman

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

Цитата:
тута пример с базой

А еще username/pwd на конект к самой базе? У вас скорее всего не те, что по умолчанию. Лучше перекомпилируйте приложение с sysdba/masterkey. Но опять же, само приложение это хорошо, но из него тяжело понять как вы это реализовали на уровне свойств и методов, посему исходный код - лучший помощник в таких вопросах .

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот подсказали.

Код:
 
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
   if Assigned(ActiveControl)
      and (
            (ActiveControl is TcxGridSite)
            or (ActiveControl.Parent is TcxGridSite)
            or (ActiveControl.Parent.Parent is TcxGridSite)
          )  then
     miTest.Caption := (ActiveControl as TcxCustomInnerMemo).SelText;
end;
 


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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 13:28 27-05-2009
jicoff

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
 
Можно, наверное, воспользоваться GridView.Controller.EditingController.Edit

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 13:45 27-05-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немного странно себя ведёт грид.
Вот код, который нормально и правильно выполняется:

Код:
 
procedure TfmPreviewDB.pmSelectedSendToOrientirClick(Sender: TObject);
begin
   if Assigned(ActiveControl)
      and (
            (ActiveControl is TcxGridSite)
            or (ActiveControl.Parent is TcxGridSite)
            or (ActiveControl.Parent.Parent is TcxGridSite)
          )  then
     begin
       grid2.DataController.Values[grid2.DataController.FocusedRecordIndex, colOrientir.Index] :=
         VarToStr(grid2.DataController.Values[grid2.DataController.FocusedRecordIndex, colOrientir.Index]) +
        (ActiveControl as TcxCustomInnerMemo).SelText;
     end;
end;
 

 
Т.е. кусок выделенного текста заносится в нужную ячейку.
 
Проблема в том, что после его выполнения в исходной memo-ячейке ВЕСЬ текст становиться выделенным.
 
Добавлено:

Цитата:
Можно, наверное, воспользоваться GridView.Controller.EditingController.Edit

А если EditingController преобразовать к TcxMemo, можно или не получится?


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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 13:58 27-05-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister Floh
У TcxRadioGroupItem свойство Enabled имеет, но оно protected.
 
Может быть сделать обычное меню с одинаковым GroupIndex?

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
 
Если соответствует нужной ячейки, то преобразуется.
 
Добавлено:
Вообще сначала проверяю EditingController.IsEditing, тогда точно есть редактор и он соответствует текущей ячейке.

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 15:39 27-05-2009
X11



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

Цитата:
Проблема в том, что после его выполнения в исходной memo-ячейке ВЕСЬ текст становиться выделенным.  

а это можно считать багом?

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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 17:33 27-05-2009
Meister Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget
да наверно прийдется сделать какие нибудь ладж-бутон и использовать свойство down - короче собрать радиобутон на кнопках и красивее и просто, че разбираться куда "девочки попрятали свои штучки" - в частности enable и checked

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 17:52 27-05-2009
jicoff

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

Всего записей: 289 | Зарегистр. 03-03-2006 | Отправлено: 20:11 27-05-2009
vladman

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

Цитата:
Хочу, чтобы в зависимости от заполненности строк отвечающих за запросы, можно было енэйблить-дизэйблить элементы радиогруп....
че разбираться куда "девочки попрятали свои штучки" - в частности enable и checked

Так что тут разбираться если afiget все верно сказал

Цитата:
У TcxRadioGroupItem свойство Enabled имеет, но оно protected.  

Другое дело, что для доступа к protected свойствам необходимо воспользоваться небольшим трюком, т.е:

Код:
 
TcxButtonGroupItemAccess = class(TcxButtonGroupItem);
 
implementation
 
...
TcxButtonGroupItemAccess(TcxRadioGroupProperties(<YourcxBarEditItem>.Properties).Items[1]).Enabled := false;
...

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
О интересно.. Попробуем разобраться.. И перевести написаное в термины С++, потому как в нем все немного не так и не так прозрачно как в дельфях..
 
 
Добавлено:
vladman
afiget
А по поводу cheked ничего не подскажите?
 
Добавлено:
vladman
Кстати по поводу вот этого -
Цитата:
TcxButtonGroupItemAccess = class(TcxButtonGroupItem);
- насколько я понял трюк заключается в том, чтобы из класса наследника стучаться к протектед свойствам.. Т.е. по идее нужно подкидывать класс наследник с радиобуттонами в ран-тайм, и таким образом, получаешь доступ к свойству enabled? Тогда может проще в классе наследнике перенести свойство в паблишед? или нет?
 

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 10:24 28-05-2009
AndreyAgrh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
with ProductsGridView1.DataController do  
 begin  
// Добавляю новую запись.  
   RecordCount := RecordCount + 1;  
   SetValue(RecordCount-1,1,Bcode);  
   SetValue(RecordCount-1,2,Desc);  
   SetValue(RecordCount-1,3,GridPosition);  
   SetValue(RecordCount-1,4,Id);  
// Хочу позиционироваться на ней  
  FocusedRecordIndex := RecordCount - 1; //  Исходя из девовского хелпа, это должно работать!!!  
  //ProductsGridView1.ViewData.Records[RecordCount - 1].Selected := True;  
 end;  
 
В рез-те кода выделенной становиться не добавленная запись, а предыдущая. На закоментированной строке просто вываливается ошибка (Project Project1.exe raised exception class EListError with message 'List index out of bounds (0)'.).  
Подскажите, где я что делаю не так?

Всего записей: 204 | Зарегистр. 30-06-2007 | Отправлено: 11:50 28-05-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister Floh
а какая разница то? при использовании класса наследника что protected что published свойства видны...
можно сделать типа финт ушами и написать типа свой класс
TcxButtonGroupItem = class(<BaseUnitName>.TcxButtonGroupItem);  
в отдельном юните и этот юнит подключать ПОСЛЕДНИМ в разделе USES, тогда возможно можно будет иметь доступ к protected свойствам без приведения к классу-наследнику...
я так делал когда мне не нравилось поведение родных классов DevExpress и переопределял методы и обработчики событий на свои...
 
Добавлено:
AndreyAgrh
а не надо ли каким то образом подтверждать добавление записи типа POST?
 
Добавлено:
AndreyAgrh
и разве нету у DataController'а метода Append?

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 12:13 28-05-2009
vladman

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

Цитата:
А по поводу cheked ничего не подскажите?  

Так у TcxCheckGroupItem вроде как свойство Enabled даже published. Или что вы имели ввиду под подсказать .

Цитата:
Тогда может проще в классе наследнике перенести свойство в паблишед? или нет?

Нет, наверное это не проще. Проще именно так как я написал - одна строка определения наследника и затем явное приведение в нужных местах (где нужен доступ к protected свойствам/методам предка) соответствующих типов к типу наследника.

Цитата:
The Protected directive starts a declaration section of a class definition. In a protected section, Fields, Properties and Methods are declared to be accessible to this class and classes descending from it. But not accessible externally by class users.
It is similar to the Private directive - it hides the internal implementation of a class, but does not hide such data and methods from subclasses.  


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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AndreyAgrh
Если вы используете простой TableView то я думаю достаточно делать  
DataController.GotoLast
 
Хотя я всегда делал так:
DataController.Insert;
<Column>.EditValue := <Value>;
...
DataController.Post;

Всего записей: 75 | Зарегистр. 17-03-2006 | Отправлено: 12:47 28-05-2009
Meister Floh



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

Цитата:
Или что вы имели ввиду под подсказать

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

Цитата:
TcxButtonGroupItemAccess(TcxRadioGroupProperties(<YourcxBarEditItem>.Properties).Items[1]).Enabled := false;  

По идее в С++ это должно выглядеть вот так:
Код:
 
static_cast<TcxButtonGroupItemAccess *>(static_cast<TcxRadioGroupProperties *>(<YourcxBarEditItem>->Properties)->Items->Items[0])->Enabled = false;
 
и ошибка:
Код:
 
E2031 Cannot cast from 'TcxRadioGroupItem *' to 'TcxButtonGroupItemAccess *'
 

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 13:13 28-05-2009 | Исправлено: Meister Floh, 14:15 28-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-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru