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

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

Автор: MagistrAnatol
Дата сообщения: 26.02.2015 12:52
X11

Цитата:
Что мешает написать несколько строк кода по созданию формы?

лень

Автор: makz
Дата сообщения: 26.02.2015 15:48
MagistrAnatol

Цитата:
лень

Причина уважительная, поддерживаю.
Подойдем с другого конца: почему поиск не удобен, не потому что фокус теряется? Если так, то от этого есть лекарство .Properties.FocusPopup=True.
Автор: MagistrAnatol
Дата сообщения: 26.02.2015 18:01
makz
дельный совет, спасибо
Автор: tanaseduard
Дата сообщения: 06.03.2015 11:35
Кто то знает где можно скачать дополнительные скины под девки? Родные хорошо, но возможно есть интересные решения новые от сторонних разработчиков?
Автор: ChSerg
Дата сообщения: 06.03.2015 15:43

Цитата:
дополнительные скины под девки

Разве такие есть?
Автор: MagistrAnatol
Дата сообщения: 09.03.2015 18:48
Не помню задавал в этой ветке вопрос - подскажите как на девках реализовать параметры как на Opere > 15 :

слева лист со списком групп опций - при выборе нужного пункта прокрутка на нужную группу
и самое главное поиск параметра с подсветкой найденных символов и скрытие элементов не подходящих под поиск

В принципе я реализовал такой функционал, но только через ТМСы -
TAdvScrollBox - AdvScrollBox1->ScrollInView()
подвсетка символов капшина TADVPanel, ну а с скрытием особых проблем нету
Но использую рибон и грид от девок - ну и хочется чтобы все было в одном стиле - а так интерфейс немного коряво смотрится
Автор: exteris
Дата сообщения: 10.03.2015 09:57
MagistrAnatol
Скриншот можете показать?
Автор: dred2k
Дата сообщения: 10.03.2015 12:22
exteris
MagistrAnatol
Для таких случаев не то что скриншот - видеоролик не помешал бы
Автор: MagistrAnatol
Дата сообщения: 10.03.2015 21:02
Скрины моно и скрины, точнее видик
вот как ето в опере
http://youtu.be/Ghf91jUbAWg
вот мой проект , правда что-то уже зацепил, все нормально работало
http://youtu.be/1Vm-M8xmpZ4
Но насколько я понял из супорта девок вопрос о html форматировании подымается уже лет пять, предполагают , что к 15 версии сделают, но гарантии не дают.
Все ответы сводятся к использованию ричедита - но для моей задачи как раз тот вариант
В параллельной ветке по компонентам делфи предлагали сварганить html страницу и обрабатывать ее в браузере - имхо тоже извращение
Перерыл кучу статей - единственный вариант - писать на канве - но сильно много нюансов с координатами- задолбаешся угадывать где какой контрол в текущий момент .
А у ТМС ов для многих компонентов капшины с html форматированием, плюс есть html компоненты.
Скорее всего на них и остановлюсь - правда придется поиграть с темами, что бы девки и тмсы подружить
Автор: dred2k
Дата сообщения: 10.03.2015 22:04
MagistrAnatol
В девках появился LayoutControl, попробуй поиграться с ним. Вещь довольно удобная, возможно поможет. Скрывать динамически контролы там точно можно, а вот насчет выделения... Возможно, придется лейблы рисовать самому, как вариант.

Организацию настроек в виде дерева не рассматриваешь ? Очень удобно заюзать TcxVerticalGrid. И структурировано, и симпатично, и редакторы на любой вкус... Скрывать динамически опять же просто, останется только найденные наименования "подсветить" вручную.
Автор: X11
Дата сообщения: 10.03.2015 22:06
LayoutControl - это весЧ, но там нет встроенного поиска групп
Автор: dred2k
Дата сообщения: 10.03.2015 22:11
X11
Нет в мире компонента TПанацея.
Так что попрограммить придется...
Автор: MagistrAnatol
Дата сообщения: 11.03.2015 08:20
dred2k

Цитата:
TcxVerticalGrid
пробовал
Весь прикол в подсвечивании
На данный момент остановился на TAdvPanel
1-я панелька с капшином - группа
на нее кидаю другие панельки с текстом вместо лейбелов , ну а на них уже контролы
Ну а прелесть TAdvPanel то что там что капшин , что текст с html форматированием, ну а скрытие - немного надо по извращаться для панелек 1-го уровня - надо считать колво видимых дочерних панелей
и что самое , что меня бесит - после показа панелей Visible=true меняется их позиция, а тут ничего лучшего чем вручную ставить свойство Top я не придумал
Автор: eu6pc
Дата сообщения: 11.03.2015 09:52
Коллеги, помогите советом:
На форме есть CXGrid, двухуровневый (master-detail), на обоих уровнях используется CxGridTableView (который не DB). Данные в грид из БД заношу "вручную", изменения записываю в БД по событиям DataController`а. Все работает как нужно, однако есть одна проблема: перед сохранением записи я на событии OnBeforePost проверяю на заполнение обязательных полей - пустые не допускаются.
Так вот: если я добавил запись, незаполнил нужные поля и пытаюсь перейти к другой записи или уровню грида - срабарывает OnBeforePost - грид пытается сохранить запись. Тут вроде бы все хорошо. НО! если я мышкой нажму на любой другой контрол на форме - например переключу закладку или мышкой перейду из одного detail в другой - грид не пытается сохранить запись - событие OnBeforePost не происходит!

Как заставить CxGridTableView сохранять запись автоматически при потере фокуса и НЕ ДАВАТЬ уйти с него, пока запись не будет выполнено сохранение или отмена ?

По идее можно силой проверить сохранение записи на событии OnExit самого грида, однако если там осталась пустое поле, и я мышкой кликаю на другую закладку на форме - onBeforePost выполняется, в нем выдается сообщение о необходимости заполнения поля, НО клик мышки всеравно срабатывает и выполняется его обработка на другом контроле - изменение закладки, например.
Подскажите, пожалуйста, как быть в данной ситуации ? ImmediatePost не предлагать
Автор: Mic777
Дата сообщения: 11.03.2015 10:07
eu6pc
Проверка обязательности заполнения обязательно должна быть на OnBeforePost?
почему не на "классическом" OnValidate?
Не факт конечно что OnValidate не позволит на другую вкладку уйти, но все таки можно попробовать.
Автор: X11
Дата сообщения: 11.03.2015 10:18

Цитата:
почему не на "классическом" OnValidate?


да, + там есть параметр " Error"

проверяешь, если не заполнено, пишешь
Error := True;
Автор: Mic777
Дата сообщения: 11.03.2015 10:42
X11

Цитата:
Error := True;

Сталкивались когда такой вариант все равно позволяет "спрыгнуть" на другой Control, но
все равно через OnValidate бороться с обязательностью заполнения легче.

eu6pc
Как вариант я бы проверял все на OnValidate и где еще необходимо (на том же OnExit) дополнительно вызывал бы ValidateEdit.

Grid.Controller.EditingController.Edit.ValidateEdit(True);

Если все это обернуть отдельной функцией, скажем "CheckValid"
то например на OnChanging у TcxTabControl можно устанавливать
AllowChange := CheckValid;

ну и по аналогии на других контролах так же
Автор: eu6pc
Дата сообщения: 11.03.2015 10:52
Спасибо большое за идею - буду пробовать
Автор: Mic777
Дата сообщения: 11.03.2015 10:55
eu6pc
Имей ввиду, если грид не в режиме редактирования, то
Grid.Controller.EditingController (или .Edit не помню уже точно) = nil
Автор: eu6pc
Дата сообщения: 12.03.2015 08:56
Прикол в том что в CXGridTableView (который не DB) - события OnValidate я не нахожу. В GridDBTableView есть, а в моем случае - нет.
Есть OnValidateDrawValue , но это, насколько я понял, немного не то.
Автор: Mic777
Дата сообщения: 12.03.2015 09:17
eu6pc
Это событие будет на конкретный Item - для TableView - это колонка.
Если для колонки элемент репозитория используется - то у него смотри OnValidate.
Автор: eu6pc
Дата сообщения: 12.03.2015 09:25
Ваша правда. Я там и смотрел. Но оказывается нужно было выбрать конкретный properties (вид editor'а) - и тогда данное событие появляется. Спасибо!
Автор: makz
Дата сообщения: 13.03.2015 02:44
tanaseduard
AlphaControls умеют девок переодевать.
Автор: tanaseduard
Дата сообщения: 13.03.2015 11:07
makz

Спасибо. Попробуем
Автор: kURSKoBL
Дата сообщения: 01.04.2015 11:47
Есть примеры работы с cxGrid без использования мышки? Ну например ввёл значение - нажал энтер - перешёл в ячейку справа.
Нажал плюс - добавилась запись и установился курсор на первую ячейку.
Автор: Mic777
Дата сообщения: 01.04.2015 11:52

Цитата:
Есть примеры работы с cxGrid без использования мышки?

Сори, но какой вопрос, такой ответ:

ЕСТЬ!

что надо-то ???
Автор: X11
Дата сообщения: 01.04.2015 12:12
Insert
F2
Enter
Tab
см свойства OptionsBehavior
FocusCellOnTab
FocusCellCyrcle
и т.д.

в событие OnEditKeyDown можно добавить

Код: if (key = vk_return) and (TcxGridTableView(Sender).datacontroller.IsEditing) then
TcxGridTableView(sender).DataController.Post;
Автор: LadyOfWood
Дата сообщения: 01.04.2015 14:19

Цитата:
Кто то знает где можно скачать дополнительные скины под девки?

Там в поставке есть редактор скинов, можно создать свой.
Автор: kURSKoBL
Дата сообщения: 01.04.2015 15:52
Mic777
Надо ссылку на примеры, логично?
X11 сохранять легко, пост такой же как и у всех, а вот чтобы перейти не вниз (как по стрелочке вниз) а вправо?
Автор: Mic777
Дата сообщения: 01.04.2015 16:00

Цитата:
Надо ссылку на примеры, логично?

Ссылку на что, как сочетания клавиш обрабатывать?
Или на хелп где расписано какие сочетания клавиш в девовском гриде есть и как настраивать его поведение в принципе?

вот пример как в право/лево (в том числе) ходить:
[more]
procedure TfrDI_InputTable.InputGridTableViewKeyDown(Sender: TObject; var Key:
Word; Shift: TShiftState);
begin
if (Key = VK_INSERT) then
Key := 0
else if (Key = VK_DELETE) and (ssCtrl in Shift) and not ReadOnly then
begin
DeleteRowFromTable;
Key := 0;
end
else if (Key in [VK_TAB, VK_RETURN]) then
begin
if Shift = [] then
begin
if (not FindNextEditingCell(mdForward))
and (not Assigned(FNavigatorFrame) or not (FNavigatorFrame.EndOfPart and FNavigatorFrame.EndOfTable)) then
SendMessageChangeCurrentTable(VK_NEXT);
end
else if ssShift in Shift then
begin
if (not FindNextEditingCell(mdBack))
and (not Assigned(FNavigatorFrame) or not (FNavigatorFrame.BeginOfPart and FNavigatorFrame.BeginOfTable)) then
begin
SendMessageChangeCurrentTable(VK_PRIOR);
SetFocusLastEditingCell;
end;
end;
Key := 0;
end
else if Key in [VK_UP, VK_DOWN] then
begin
case Key of
VK_UP : GotoNextEditingCellInColumn(InputGridTableView.Controller.FocusedRowIndex, mdBack);
VK_DOWN : GotoNextEditingCellInColumn(InputGridTableView.Controller.FocusedRowIndex, mdForward);
end;
Key := 0;
end
else if (Key in [VK_PRIOR, VK_NEXT]) and (ssCtrl in Shift) then
begin
case Key of
// Ищем первую разрешенную для редактирования ячейку от первой строки,
// поэтому направление вперед
VK_PRIOR : GotoNextEditingCellInColumn(NotAssigned, mdForward);
// Ищем первую разрешенную для редактирования ячейку от последней строки,
// поэтому направление назад
VK_NEXT : GotoNextEditingCellInColumn(InputGridTableView.DataController.RowCount, mdBack);
end;
Key := 0;
end
else if (Key in [VK_LEFT, VK_HOME, VK_RIGHT, VK_END]) and not(InputGridTableView.Controller.FocusedColumn.Editing) then
begin
case Key of
VK_LEFT : GotoNextEditingCellInRow(InputGridTableView.Controller.FocusedColumn.VisibleIndex, mdBack);
VK_HOME : GotoNextEditingCellInRow(NotAssigned, mdForward);
VK_RIGHT : GotoNextEditingCellInRow(InputGridTableView.Controller.FocusedColumn.VisibleIndex, mdForward);
VK_END : GotoNextEditingCellInRow(InputGridTableView.VisibleColumnCount, mdBack);
end;
Key:=0;
end;
end;

[/more]
в функции FindNextEditingCell просто устанавливается FocusedColumnIndex для Controller просто нужно было по определенным правилам (типа некоторые колонки не редактируются и т.п.)
но идея думаю понятна.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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