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

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

Автор: xokc
Дата сообщения: 25.05.2009 18:14

Цитата:
Именно в приложении к Ribbon?

Именно в Риббоне.

Цитата:
Только я не совсум понимаю, что в SDI можно мёржить?

Ну очень просто - есть ряд потомков некоего базового класса, для настройки каждого из которых необходим свой уникальный dxBar, который и создается внутри этого класса. Каждый из классов реализован в виде отдельного pas и dfm с Риббоном и единственным dxBar. На главной форме есть ComboBox, по переключении которого текущий экземпляр класса вместе со своей панелью разрушается, а новый создается и туда добавляется. Все работает без проблем.
Автор: zaroman
Дата сообщения: 26.05.2009 07:57
vladman
Спасибо огромное! Все работает!
Автор: vladman
Дата сообщения: 26.05.2009 10:07
ZalivkoDenis
zaroman
Не за что. Рад что все работает.
Автор: ATonik
Дата сообщения: 26.05.2009 10:08
Доброго времени суток! Возникла проблема, которую никак не могу решить: Есть tcxVerticalGrid, в нем программно создается ряд с EditPropertiesClass = TcxLookUpComboBoxProperties. Как программно задать значение этого ряда (до того, как пользователь выбрал что-нибудь из выпадающего списка)?
Автор: jonikDk
Дата сообщения: 26.05.2009 10:54
ATonik
Грид же показывает данные из таблицы, вот и задай значение по умолчанию для полей таблицы
Автор: MagistrAnatol
Дата сообщения: 26.05.2009 12:38
Господа,в чем прикол в гриде или фибплюсе
вот селект и рефреш
SELECT
a.OPER,
b.NAME,
a.DATA,
a.ZA_MES,
a.ZA_GOD,
a.CYMA,
a.NARAHOVANO,
a.OTKOGO_KOMY,
a.DOKYMENT,
a.DOKYMENT_DATA,
a.CTAN_AMORT_MASTER_ID,
a.ID_A_INC
FROM
DVIG_AMORT a
left join OPERACII b on a.OPER=b.OPER
WHERE
a.CTAN_AMORT_MASTER_ID=?CTAN_AMORT_MASTER_ID
ORDER BY
a.DATA

-----------
SELECT
a.OPER,
b.NAME,
a.DATA,
a.ZA_MES,
a.ZA_GOD,
a.CYMA,
a.NARAHOVANO,
a.OTKOGO_KOMY,
a.DOKYMENT,
a.DOKYMENT_DATA,
a.CTAN_AMORT_MASTER_ID,
a.ID_A_INC
FROM
DVIG_AMORT a
left join OPERACII b on a.OPER=b.OPER
WHERE(
a.CTAN_AMORT_MASTER_ID=?CTAN_AMORT_MASTER_ID
) and ( A.ID_A_INC = : OLD_ID_A_INC
)

Грид - мастер детал,в детале стоит тру детаилинсклмоде,в фибсах автотранзаншин и комит
добавляю новую запись, пока я не кликну по нижней записи мастера и не открою
его детал а потом вернусь на нужный мастер и не открою детал - даные не обновляются.
Переоткрывать таблицу не прикольно
Автор: X11
Дата сообщения: 26.05.2009 13:13
а в фибах заполнены свойства autoupdate?

Добавлено:
cxGrid (UnBound). Там есть колонка типа LookupComboBox.
Как в цикле по выделенным строкам (записям) узнать текст в этой лукап колонке?

Этот код даёт ID, а мне нужен текст.

Код:
for i := 0 to grid2.DataController.GetSelectedCount - 1 do begin
if grid2.Controller.SelectedRows[i].Values[colRegion.Index] = .... then <-узнать текстовое значение
....
Автор: MagistrAnatol
Дата сообщения: 26.05.2009 13:37
X11
для мастера стояла а для детайла
уже стоит , но блин в детайле новая запись нормально обновляется , зато все остальные записи детала для даного мастера пропадают, и надо опять перещелкивать по мастеру
шоб увидеть все детал записи
Автор: X11
Дата сообщения: 26.05.2009 14:06
А в гридах заполнено?

У мастера нужно выбрать в свойстве датаконтроллера KeyFieldName.

У детального грида тоже в свойстве датаконтроллера выбрать KeyFieldName и DetailKeyFieldName текущего грида, а также MasterKeyFieldName мастер-грида.
В детельном гриде свойство MasterKeyFieldName должно указывать на ключевое поле мастер-грида.
Автор: MagistrAnatol
Дата сообщения: 26.05.2009 14:52
X11
ето все заполнено иначе не строится мастер-датал,
мож неправильно рефреш написан?
Автор: X11
Дата сообщения: 26.05.2009 15:00
1. разве в рефреше не должно быть тоже самое по группировке, что и в селекте?
ORDER BY
a.DATA

2. A.ID_A_INC = : <не уверен, но должно быть без пробела> OLD_ID_A_INC
Так:
A.ID_A_INC = LD_ID_A_INC

3. a.CTAN_AMORT_MASTER_ID=?CTAN_AMORT_MASTER_ID
тоже замени вопросительный знак на двоеточие.

Добавлено:
сxGrid. Есть колонка Memo.
Хочу такое реализовать. Пользователь выделяет текст мышкой или клавиатурой. Нажимает правую кнопку мышки и заносит выделенный текст в другую колонку текущей записи.
Для начала не могу понять, как прикрутить popupMenu к колонке типа Memo? Чтобы это менб показывалось только у этой колонки. У самого грида уже меню есть, назначено.
Автор: MagistrAnatol
Дата сообщения: 26.05.2009 15:18
X11
я спецом сделал пробел - шоб не показывалася смайл,а заменить ща попробую


Добавлено:
замена ничего не дала
Автор: ATonik
Дата сообщения: 26.05.2009 16:08
jonikDk

Цитата:
Грид же показывает данные из таблицы, вот и задай значение по умолчанию для полей таблицы

Используется TcxVerticalGrid, он не связан с таблицей
Автор: X11
Дата сообщения: 26.05.2009 16:27
Может я неправ в чём-то, но заметил такую странность если cxGrid (unbound) отсортирован и сохраняет/восстанавливает сортировку. Dev43, D2007.

Предисловие.
В цикле наполняем грид.

Код:
//при создании и закрытии формы fmPreviewDB, grid2 восстанавливает и сохраняет настройки с помощью ini файла.

with fmPreviewDB, grid2 do begin
DataController.Append;
Columns[colSuperTypeId.Index].EditValue := Types.idSuperType;
Columns[colPhones.Index].EditValue := sPhones;
Columns[colSuperTypeName.Index].EditValue := Types.IdType;
Columns[colAD.Index].EditValue := sAD;
Columns[colAreaG.Index].EditValue := Areas.g;
Columns[colAreaI.Index].EditValue := Areas.i;
Columns[colAreaK.Index].EditValue := Areas.k;
Columns[colFloor.Index].EditValue := Floors.floor;
Columns[colFloors.Index].EditValue := Floors.floors;
Columns[colAparts.Index].EditValue := iAp;
Columns[colRegion.Index].EditValue := idRegion; <= LookupComboBox
Columns[colIS.Index].EditValue := idIS;

if Types.idSuperType = null then
Columns[colToDataBase.Index].EditValue := false
else
Columns[colToDataBase.Index].EditValue := True;

if Types.idSuperType = 1 then
Columns[colFloors.Index].EditValue := HouseFloor;


DataController.Post;
end;//with fmPreviewDB.grid2 do begin
Автор: jicoff
Дата сообщения: 26.05.2009 16:45
X11


Цитата:
сxGrid. Есть колонка Memo...


Можно попробовать на событие GridView.OnInitEdit, у TcxMemo есть свойство PopupMenu, преобразовать AEdit к TcxMemo и вперед...
Автор: Meister Floh
Дата сообщения: 26.05.2009 18:38
vladman
1. Заметил такую вещь.. Количество элементов в ApplicationMenu->ExtraPane зависит от высоты самого меню.. И как сделать чтоб вместо 3 пунктов, как у меня было скажем 5 я так и не нашел..
2. И еще в DBTreeList->OptionsView->ScrollBars->ssBoth, так вот вертикальный скрол появляется нормально, а горизонтальный появляется тогда, когда не в зоне отображения 2/3 дерева, где регулируется эта чувствительность?

Не подскажете?
Автор: vladman
Дата сообщения: 26.05.2009 23:25
ATonik

Цитата:
Как программно задать значение этого ряда

<YourcxVerticalGridEditorRow>.Properties.Value := <YourLookupKeyFieldValue>;

Добавлено:
X11

Цитата:
Этот код даёт ID, а мне нужен текст.

Раз нужен текст, так нужно и "говорить" Controller'у, что нужен текст

for i := 0 to grid2.DataController.GetSelectedCount - 1 do begin
if grid2.Controller.SelectedRows[i].DisplayTexts[colRegion.Index] = .... then <-узнать текстовое значение

Добавлено:
MagistrAnatol

Цитата:
Господа,в чем прикол в гриде или фибплюсе

Что-то из Вашей переписки с X11, к сожалению, так и не понял для себя суть проблемы. Если еще актуально, сделайте "компилябильный" пример с гридами, мастер-дитейлами, фибами. Думаю так будет быстрее понять в чем трудности.

Добавлено:
X11

Цитата:
Может я неправ в чём-то, но заметил такую странность если cxGrid (unbound)

Таки в чем-то неправ:

Цитата:
To iterate selected rows in unbound and provider modes, the data controller's GetSelectedRowIndex method must be used. It returns the row index of a specific selected row that can be used to retrieve information on the row using the GetRowInfo function.

Подробнее, даже с примером - ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TExample_ChangeSelectedRecords_Unbound.htm

Добавлено:
Meister Floh

Цитата:
Количество элементов в ApplicationMenu->ExtraPane зависит от высоты самого меню..

Точно. Такая реализация обусловлена MS Ribbon UI Guidelines, по которому все риббон контролы и их поведение должны в точности соответствовать этому документу от Майкрософт. Поэтому самое простое, что приходит в голову, так это создать Fake TdxBarButton со свойствами Caption = '' и Enabled = Flase. Затем поместить такое количество этих Fake TdxBarButton в ApplicationMenu, чтобы высота этого ApplicationMenu меню была достаточна для помещения нужного количества пунктов в ExtraPane. Думаю, должно сработать.

Добавлено:

Цитата:
а горизонтальный появляется тогда, когда не в зоне отображения 2/3 дерева, где регулируется эта чувствительность?

Вроде бы не замечал такого поведения. Воспроизвести не смог. Давайте пример, посмотрим.
Автор: MagistrAnatol
Дата сообщения: 27.05.2009 08:28
vladman
Проблемы две:
1 - на главной форме я раскрываю ветки мастера - так вот,если я раскрыл их по крестику,но на запись мастера
не становлюсь я детаил записи не вижу надо токо становиться на конкретную запись мастера.Стал - пропали записи детала
с предыдущего мастера.Я когдато такой глючок победил - но не помню как.
2 - Я добавляю новую запись в детаил( в проге ето приход-расход) - после поста я вижу токо новую запись,
а те что уже были пропадают.Необходимо стать на любую другую запись мастера,раскрыть детаил щелкнуть по нем -
потом вернутся на нужный мастер-раскрыть детаил и щелкнуть на нем и уже потом я увижу все записи включая новую
тута пример с базой пас стандартный под ковриком
http://upload.com.ua/get/900873289/
Автор: ATonik
Дата сообщения: 27.05.2009 09:22
vladman

Цитата:
<YourcxVerticalGridEditorRow>.Properties.Value := <YourLookupKeyFieldValue>;

Спасибо большое, все заработало.
Автор: Meister Floh
Дата сообщения: 27.05.2009 10:09
vladman

Цитата:
Вроде бы не замечал такого поведения. Воспроизвести не смог. Давайте пример, посмотрим.

Кажется понял.. Если в дереве нет значков (я использую их через ImageIndexFieldName) - вроде как все отрабатывается. Как только ставлю значки, вот на их ширину и не отрабатывается появление скрола.. Но в общем это не столь критично, просто разобраться хотелось.. У меня там стоит сплитер, кому надо, может и раздвинуть, да и надобность такая скорее всего нужна будет в очень большой аппроксимации..

Тут более насущные вопросы назрели.. Смысл вот в чем.. Храню в некоем хранилище (не имеет значения где, в базе, в конфигурационном файле) набор статистических запросов.. Их количество заранее известно, скажем 5.. Цель в TdxBarLargeButton сделать выпадающую менюшку с группой радио-бутонов.. Типа выбираем один из них и делаем запрос нажатием кнопки. Казалось бы все прозрачно.. НО.. Запросы могут быть заполнены не все, и мне нужно дизэйблить те ради-бутоны, запросы к которым пустые.. Как задизэйблить отдельный ради буттон в группе, я так и не нашел.. Зато сразу нашел это свойство в чек бутонах, ну думаю, сделаю из чек бутонов радио бутоны (через зад конечно, но все-же) Все прекрасно.. но тут опять вилы - стандартного checked найти не могу.. А самое глюкавое в том, что в справке разделы, касающиеся properties для TcxBarEditItem - отсутствуют..
Автор: afiget
Дата сообщения: 27.05.2009 10:57
Meister Floh
Менюшка как реализована, какими компонентами?
Так может быть и не создавать "радио-бутоны"? Или ты в дизайн-тайм создаешь?

Добавлено:
Кстати, в любом случае можно их прятать. И еще, у наследников TdxBarComponent есть Enabled.
Автор: X11
Дата сообщения: 27.05.2009 11:34

Цитата:
Можно попробовать на событие 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;
Автор: Meister Floh
Дата сообщения: 27.05.2009 11:42
afiget

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

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

Соответственно реализовано:
TdxBarLargeButton, ButtonStyle->bsDropDown, DropDownMenu->TdxRibbonPopupMenu в котором - TcxBarEditItem, Properties->RadioGroup

Хочу, чтобы в зависимости от заполненности строк отвечающих за запросы, можно было енэйблить-дизэйблить элементы радиогруп...
Автор: X11
Дата сообщения: 27.05.2009 11:49
Я не много не в ту степь пошёл. Мну удалось приклеять меню к мемо-колоке.
Дальше не могу сообразить, как получить выделенный текст. Мне нужно обработать выделенный текст. Даж не могу сообразить по каким ключевым словам искать, в какую сторону смотреть? Подозреваю что, нужно смотреть в сторону InplaceEditor, нет?
Автор: vladman
Дата сообщения: 27.05.2009 11:56
MagistrAnatol

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

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

Код:
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;
Автор: jicoff
Дата сообщения: 27.05.2009 12:45
X11

Можно, наверное, воспользоваться GridView.Controller.EditingController.Edit
Автор: X11
Дата сообщения: 27.05.2009 12:58
Немного странно себя ведёт грид.
Вот код, который нормально и правильно выполняется:

Код:
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;
Автор: afiget
Дата сообщения: 27.05.2009 14:27
Meister Floh
У TcxRadioGroupItem свойство Enabled имеет, но оно protected.

Может быть сделать обычное меню с одинаковым GroupIndex?
Автор: jicoff
Дата сообщения: 27.05.2009 14:39
X11

Если соответствует нужной ячейки, то преобразуется.

Добавлено:
Вообще сначала проверяю EditingController.IsEditing, тогда точно есть редактор и он соответствует текущей ячейке.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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