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

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

Автор: VitOs2
Дата сообщения: 13.08.2010 08:35
Уважаемые!
Прошу помочь в следующем:
Есть TcxGridTableVew (gridTVOptions), нужно переместиться в нужную ячейку (поиск идет по пустым значениям) (LookUpComboBox), инициировать Edit и открыть список (DropDown). Делаю так:

with gridTVOptions.DataController do
for I := 0 to RecordCount-1 do
Begin
if GetValue(I,gridTVOptionsNumber.Index) = Null then
Begin
gridOptions.SetFocus;
gridTVOptions.Controller.FocusedRowIndex := I;
gridTVOptionsNumber.Editing := True;
// Как сдесь откыть список???!!
Exit;
End;
End;
Если еще чего неоптимально, прошу подправить.
Спасибо

Сппустя 20 минут. Разобрался сам

TcxLookUpComboBox(gridTVOptions.Controller.EditingController.Edit).DroppedDown := True;
Всем спасибо!
Автор: X11
Дата сообщения: 13.08.2010 09:17
Приветствую, о всезнающий All!
Вопрос по TcxLookupCombobox, которой встроен в TcxGridDBTableView.
Есть колонка, типа LookupCombobox, настроил, привязал набору данных. Всё отлично работает, список выпадает.
В событие OnCloseUp добавил следующий код:

Код: ShowMessage(VarToStr((Sender as TcxLookupCombobox).EditValue));
Автор: afiget
Дата сообщения: 13.08.2010 10:05
VitOs2
TcxCustomDropDownEdit.DroppedDown:=true;
Только приведите ваш редактор к правильному типу.

X11
EditingValue?
PostEditValue?
Автор: crazypiggy
Дата сообщения: 13.08.2010 11:25
Добрый день. У меня есть таблиа cxGrid в которой три колонки
| Документ | Номер | Серия |

Документ- Properties LookupCombobox берется из таблицы в которой хранится название документа длина серии и номера.
Как мне запретить пользователю вводить в строке НОМЕР и СЕРИЮ пока не будет выбран ДОКУМЕНТ и как мне ограничить длину вводимых строк в этих столбцах взависимости от длины номера и длины серии указаного в таблице ДОКУМЕНТОВ ???
Автор: X11
Дата сообщения: 13.08.2010 12:06

Цитата:
EditingValue?
PostEditValue?

я так понимаю, что эти свойства относятся к самому гриду..., но грид-то нередактируемый, вернее привязан к readonly датасету.
Автор: dimm78
Дата сообщения: 13.08.2010 12:08

Цитата:
Документ- Properties LookupCombobox берется из таблицы в которой хранится название документа длина серии и номера.
Как мне запретить пользователю вводить в строке НОМЕР и СЕРИЮ пока не будет выбран ДОКУМЕНТ и как мне ограничить длину вводимых строк в этих столбцах взависимости от длины номера и длины серии указаного в таблице ДОКУМЕНТОВ ???


Думается мне что для запрета ввода следует навесить обработчик OnEditing у вьюхи грида и если в строке не выбран документ возвращать в нем AAllow = False. Со вторым сложнее. Можно навесить обработчик на создание эдитора в ячейке и динамически задавать маску ввода в зависимости от длины номера и серии.
Автор: X11
Дата сообщения: 13.08.2010 12:23

Цитата:
PostEditValue?

вообще процедура, намекните, как с ней работать

Добавлено:
Только вот заметил, что после закрытия списка... значение поля-то не меняется..


Добавлено:
Ура, получилось.

Код: procedure TfmArendaSearch.dbgArendaID_STREETPropertiesCloseUp(Sender: TObject);
var
AItem: TObject;
ID_street: string;
begin

with (Sender as TcxLookupComboBox).Properties.Grid.DataController do
begin
AItem := GetItemByFieldName('id');

if Assigned(AItem) then
ID_street := Values[(Sender as TcxLookupComboBox).ItemIndex, (AItem as TcxLookupDBGridColumn).Index];

if SetFieldVal(stArenda, 'ID_STREET', ID_street, dbgArenda.DataController.Values[dbgArenda.DataController.FocusedRecordIndex, dbgArendaID.index]) then
dbgArenda.DataController.RefreshExternalData ;

end;
end;
Автор: BlackVetal
Дата сообщения: 13.08.2010 13:38
X11
AutoIncrementalSearch - по идеи свойство которое должно тебе помочь ...
Автор: afiget
Дата сообщения: 13.08.2010 13:53
BlackVetal
Это в какой версии библиотеки?
X11
Проверь для начала свойство Properties.DropDownListStyle. Оно не должно быть IsFixedList.
Тогда ты можешь вводить текст в списке.
По-умолчанию свойство Properties.IncrementalFiltering включено, так что вышеуказанного будет вроде как достаточно для поиска пользователем нужного значения в списке.
Автор: BlackVetal
Дата сообщения: 13.08.2010 14:06
afiget
Чесно сказать мене иногда трудно ориентироваться в топике - я работаю DevExpress 10.1.4 под VS2008(2010). Так как вроде производитель один я? предполагаю что под Делфя свойство и компоненты должно хоть в чем совпадать.
Поэтому под VS в гридах и списках есть свойство AutoIncrementalSearch - быстрый поиск ... Извиняюс если ввел внепонятки кого либо!
Автор: Chukotka
Дата сообщения: 13.08.2010 15:34
Подскажите - есть png-файл, размером, скажем, 32x160 (5*32). Нужно содержимое этого файла считать в TcxImageList, получив в списке 5 иконок 32x32. Возможно ли такое?
На форуме девок нашел только совет использовать метод Add, добавляющий одну иконку, что не есть гуд. Другой метод FileLoad не позволяет считывать png-изображения.
Автор: crazypiggy
Дата сообщения: 13.08.2010 15:46
dimm78

Цитата:
Думается мне что для запрета ввода следует навесить обработчик OnEditing у вьюхи грида и если в строке не выбран документ возвращать в нем AAllow = False


Не могли бы Вы пример кода привести.

И ещё вопрос. в cxGrid есть две вьюхи. в Detail вьюшке никак не могу получить значение выделенной строки. Не подскажите как это сделать?
Автор: f3ka
Дата сообщения: 13.08.2010 15:48
Chukotka
хм.... насколько я помню, когда в дизайне грузишь картинку в cxImageList больше чем стоит размер иконки то он САМ разрезает на правильный размер... может попробовать посмотреть каким методом он туда его грузит?
Автор: dimm78
Дата сообщения: 13.08.2010 19:35

Цитата:
Не могли бы Вы пример кода привести.

И ещё вопрос. в cxGrid есть две вьюхи. в Detail вьюшке никак не могу получить значение выделенной строки. Не подскажите как это сделать?

К сожалению сейчас под руками дельфей нет... Если подождет до понедельника то накидаю...
Автор: X11
Дата сообщения: 16.08.2010 09:10

Цитата:
X11
Проверь для начала свойство Properties.DropDownListStyle. Оно не должно быть IsFixedList.
Тогда ты можешь вводить текст в списке.
По-умолчанию свойство Properties.IncrementalFiltering включено, так что вышеуказанного будет вроде как достаточно для поиска пользователем нужного значения в списке.

Неа, нее помогает.


Цитата:
Поэтому под VS в гридах и списках есть свойство AutoIncrementalSearch - быстрый поиск

Не нашёл.

Добавлено:
Как видно из кода

Код:
procedure TfmArendaSearch.dbgArendaID_STREETPropertiesCloseUp(Sender: TObject);
var
AItem: TObject;
ID_street: string;
begin

with (Sender as TcxLookupComboBox).Properties.Grid.DataController do
begin
AItem := GetItemByFieldName('id');

if Assigned(AItem) then
ID_street := Values[(Sender as TcxLookupComboBox).ItemIndex, (AItem as TcxLookupDBGridColumn).Index];

if SetFieldVal(stArenda, 'ID_STREET', ID_street, dbgArenda.DataController.Values[dbgArenda.DataController.FocusedRecordIndex, dbgArendaID.index]) then
dbgArenda.DataController.RefreshExternalData ;

end;
end;
Автор: X11
Дата сообщения: 16.08.2010 11:17
Я вот не понимаю, зачем было связывать нередактируемость привязанного к гриду датасета к контекстному поиск в лукапе этого грида?

Добавлено:
Попробовал сделать PopupEdit с cxLookupCombobox, страх и ужос охватили меня

Автор: JohnSilver182
Дата сообщения: 16.08.2010 13:10
Hi All , Извините за много вопросов

а) dxBarManager1Bar1 почему то не имеет свойство STYLE . А элементы самого dxBarManager1Bar1 имеют , только выставлять им бесполезно свойство STYLE . Как говориться как dxBarManager1Bar1 решит , так и будет.

б) Есть один cxGrid1DBTableView1 , но он не ловит OnKeypress , OnKeyDown . Мог ли Я нечаянно как то свойства изменить что бы заблокировать это ??

в) cxGrid1 , грузим 50 000 позиций (просто один столбец). На каком минимальном CPU будет работать быстрый поиск без тормозов ???
Автор: X11
Дата сообщения: 16.08.2010 13:20

Цитата:
dxBarManager1Bar1 почему то не имеет свойство STYLE .

смотри dxBarManager1, а не отдельные панели

Добавлено:

Цитата:
в) cxGrid1 , грузим 50 000 позиций (просто один столбец). На каком минимальном CPU будет работать быстрый поиск без тормозов ???

Будет сравнительно быстро и на медленных типа Cel 800. Ещё зависит от самой ОС, она же тоже жрёт ресурсы.

Добавлено:

Цитата:
б) Есть один cxGrid1DBTableView1 , но он не ловит OnKeypress , OnKeyDown . Мог ли Я нечаянно как то свойства изменить что бы заблокировать это ??

Попробуй установить [TForm].keypreview в False
Автор: JohnSilver182
Дата сообщения: 16.08.2010 13:31

Цитата:
смотри dxBarManager1, а не отдельные панели

ТАм
dxBarManager1.STYLE = [bmsUseLookAndFeel, bmsStandard ....]

Добавлено:

Цитата:
Попробуй установить [TForm].keypreview в False


Я тоже подумал , но оно стояло и так
Автор: regkz
Дата сообщения: 16.08.2010 13:47

Цитата:
Я тоже подумал , но оно стояло и так

чтобы ловило нужно выставить в true, чтобы не обращало внимания на нажатие клавиш нужно выставить в fslse
Автор: JohnSilver182
Дата сообщения: 16.08.2010 13:55

Цитата:
чтобы ловило нужно выставить в true, чтобы не обращало внимания на нажатие клавиш нужно выставить в fslse


Вопрос то в другом

Есть один cxGrid1DBTableView1 , но он не ловит OnKeypress , OnKeyDown . Мог ли Я нечаянно как то свойства изменить что бы заблокировать это ??
Автор: regkz
Дата сообщения: 16.08.2010 14:14
JohnSilver182
сам грид не будет ловить пока у формы не будет включено (переведено в true) свойство KeyPreview, уже после этого нужно обрабатывать нужные события с клавишами
Автор: JohnSilver182
Дата сообщения: 16.08.2010 14:20

Цитата:
сам грид не будет ловить пока у формы не будет включено (переведено в true) свойство KeyPreview, уже после этого нужно обрабатывать нужные события с клавишами


В РОТ мне ноги !!!!
Автор: X11
Дата сообщения: 16.08.2010 14:44
Есть грид, привязанный к датасету, там есть, конечно же TcxGridDBColumn типа PopupEdit, как бы правильнее программно открыть этот PopupEdit, например с пом. Ctrl+S?

Добавлено:

Цитата:
, как бы правильнее программно открыть этот PopupEdit,

Вот так:


Код: procedure TfmArendaSearch.dbgArendaKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//если нажата клавиша Ctrl+Enter
if (ssCtrl in Shift) then
if (key = VK_RETURN) then
if (dbgArenda.Controller.FocusedColumn = dbgArendaSTREET_NAME) then
dbgArenda.Controller.EditingController.ShowEdit(dbgArendaSTREET_NAME);
end;
Автор: Czechoslovak
Дата сообщения: 17.08.2010 11:11

Цитата:
сам грид не будет ловить пока у формы не будет включено (переведено в true) свойство KeyPreview, уже после этого нужно обрабатывать нужные события с клавишами


Все будет ловить, если он вовремя нажатия находиться в фокусе, а KeyPreview надо что бы можно было перехватывать все нажатия клавиш, а потом только запускались обработчики клавиш конкретных компонент например в нашем случае TableView
Автор: asi81
Дата сообщения: 17.08.2010 19:10
Добрый день!
Столкнулся с проблемой в новом DevExpres 52 в событии TcxDBTreeList - OnBeginDragNode параметр ANode все время возвращает NULL, хотя должен возвращать Node, который был схвачен, как я понимаю. Никто не сталкивался с подобной проблемой? И как кроме как в этом евенте определить какой Node был схвачен? Мне нужно это знать при обработке события - OnDragOver.
Автор: V1s1ter
Дата сообщения: 17.08.2010 20:28
asi81
FocucedNode ?
Автор: asi81
Дата сообщения: 18.08.2010 10:36
V1s1ter
Работает - спасибо. Непонятно только, что же случилось с OnBeginDragNode. В 48 пакете все работало как часы.
Автор: asi81
Дата сообщения: 19.08.2010 10:39
Хотя нет. Иногда FocusedNode возвращает тот узел, который был в фокусе до того, как я схватил перетаскиваемый узел. Тоесть сначала надо перевести фокус на нужный узел, а потом хватать. Причем в одном приложении этот диалог работает вроде бы нормально(FocusedNode как раз тот, что схватился), а в другом неправильно.
Автор: JohnSilver182
Дата сообщения: 19.08.2010 12:46

Цитата:
Есть один cxGrid1DBTableView1 , но он не ловит OnKeypress , OnKeyDown . Мог ли Я нечаянно как то свойства изменить что бы заблокировать это ??

хнык хнык хнык

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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