Не получается в DBTreeView нормально реализоать контекстное меню, кто с этим сталкивался?
» Использование DevExpress 2
Уважаемые такой вопрос:
Есть ли способы добавить стандартным девовским компонентам cxDBImage поlдержку более шурокого круга форматов? В идеале
хотелось бы JPG (JPEG), GIF, TIFF, PNG.
Вообще какие есть библиотеки для этих целей. Хотелось бы именно интеграции, что бы стандартные компоненты Image больше форматов.
Есть ли способы добавить стандартным девовским компонентам cxDBImage поlдержку более шурокого круга форматов? В идеале
хотелось бы JPG (JPEG), GIF, TIFF, PNG.
Вообще какие есть библиотеки для этих целей. Хотелось бы именно интеграции, что бы стандартные компоненты Image больше форматов.
ArtemiyUO
В ньюсах devexpress проблема обсуждалась.
1. Вопрос:
"How can I display any type Image via cxgrid and cxDBImage?"
Ответ:
"Look in the QG 4 newsgroup for the thread "Stored pictures". Bastian
mentions some sample code he has on his website that illustrates how to do
this.
Here's his website: http://www.aixware.de/samples.html (the 3rd sample from
the top)"
2. Вопрос:
"How can I do to support different image format with cxDBImage linked
to graphic field of a paradox table ?"
Ответ:
"Set cxGraphicEdit.Properties.GraphicClassName before loading the image.
I have tried setting GraphicClassName in the OnAssignPicure event and
TBitMap and TIcon is displayed correctly" ...
Попробуй...
В ньюсах devexpress проблема обсуждалась.
1. Вопрос:
"How can I display any type Image via cxgrid and cxDBImage?"
Ответ:
"Look in the QG 4 newsgroup for the thread "Stored pictures". Bastian
mentions some sample code he has on his website that illustrates how to do
this.
Here's his website: http://www.aixware.de/samples.html (the 3rd sample from
the top)"
2. Вопрос:
"How can I do to support different image format with cxDBImage linked
to graphic field of a paradox table ?"
Ответ:
"Set cxGraphicEdit.Properties.GraphicClassName before loading the image.
I have tried setting GraphicClassName in the OnAssignPicure event and
TBitMap and TIcon is displayed correctly" ...
Попробуй...
Vic
Теперь мне не понятно. Вопрос был, как узнать на какой колонке вызвалось Popup меню. Привел пример. Какое отношение твой первый вопрос имеет ко второму?
В TcxGridDBTableView нет никакого OnClick. Есть OnDblClick, OnCellClick, OnCellDblClick и даже OnColumnHeaderClick.
Еще использую OnMouseDown, так там вообще X и Y приходят параметрами.
Теперь мне не понятно. Вопрос был, как узнать на какой колонке вызвалось Popup меню. Привел пример. Какое отношение твой первый вопрос имеет ко второму?
В TcxGridDBTableView нет никакого OnClick. Есть OnDblClick, OnCellClick, OnCellDblClick и даже OnColumnHeaderClick.
Еще использую OnMouseDown, так там вообще X и Y приходят параметрами.
Не скажет ли кто, уменьшились ли задержки в cxGrid6 по сравнению 5?
Bill_PHO
Присоединяюсь к вопросу и хочу сделать его шире - как вообще в отношении стабильности в работе, можно уже переходить на 6ку?
Присоединяюсь к вопросу и хочу сделать его шире - как вообще в отношении стабильности в работе, можно уже переходить на 6ку?
Bill_PHO
Какие именно задержки?
Т.е. во время чего?
golkanavt
Пробовать можно, особо сырого "дефки" вроде ничего в массы не пускали
Какие именно задержки?
Т.е. во время чего?
golkanavt
Пробовать можно, особо сырого "дефки" вроде ничего в массы не пускали
golkanavt
Мне 6-я пока нравится больше - ряд глюков пятой пропало
Мне 6-я пока нравится больше - ряд глюков пятой пропало
Цитата:
Не получается в DBTreeView нормально реализоать контекстное меню, кто с этим сталкивался?
Ну что так и будем обсуждать задержки Неужели никто помочь не может?
может кому понадобиться - как динамически устанавливать источник данных для грида?
[more]
var
Grid: TcxGrid;
Level: TcxGridLevel;
View: TcxGridDBTableView;
…
// Creates a Grid instance
Grid := TcxGrid.Create(SomeOwner);
Grid.Parent := SomeParent;
// Creates a Level
Level := Grid.Levels.Add;
Level.Name := 'SomeLevelName';
// Creates a View
View := Grid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;
View.Name := 'SomeViewName';
// … and binds it to the Level
Level.GridView := View;
// Hooks up the View to the data
View.DataController.DataSource := SomeDataSource;
// … and creates all columns
View.DataController.CreateAllItems;
end;
[/more]
[more]
var
Grid: TcxGrid;
Level: TcxGridLevel;
View: TcxGridDBTableView;
…
// Creates a Grid instance
Grid := TcxGrid.Create(SomeOwner);
Grid.Parent := SomeParent;
// Creates a Level
Level := Grid.Levels.Add;
Level.Name := 'SomeLevelName';
// Creates a View
View := Grid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;
View.Name := 'SomeViewName';
// … and binds it to the Level
Level.GridView := View;
// Hooks up the View to the data
View.DataController.DataSource := SomeDataSource;
// … and creates all columns
View.DataController.CreateAllItems;
end;
[/more]
Цитата:
Ну что так и будем обсуждать задержки Неужели никто помочь не может?
Хотите получить ответ, пишите конкретней...
Цитата:
Хотите получить ответ, пишите конкретней...
Подробней так:
Не получается полноценно по правой кнопке выделять элемент также как и по левой,т.о. щелкнув правой кнопкой на элементе он выделен только пока отображается меню. Манипуляции с выполнением нужных действий вызванных из этого самого меню с последующим ручным переносом фокуса на этот элемент успехом не увенчались. Также не хотелось бы что бы меню вызывалось при щелчке не на элементе дерева.
RffR255
В DBTreeView используется TreeView. В MSDN есть такая функция или макрос, не помню, TreeView_HitTest, вот тут и копай.
В DBTreeView используется TreeView. В MSDN есть такая функция или макрос, не помню, TreeView_HitTest, вот тут и копай.
Скажите пожалуйста - можно ли с помощю только одного грида менять данные в привязанной к view таблице?
Пробовал следующую конструкцию:
cxGrid.FocusedView.DataController.SetValues(cxGrid.FocusedView.DataController.FocuserRecordIndex , 0 , Null) {Меняем значение в 0 колонке view на Null}
Визуально все срабатывает, но после cxGrid.FocusedView.DataController.Post изменения не фиксируются.
Вообще - можно ли управлять данными из таблиц при помощи одного только DataController, не обращаясь к его привязанной таблице напрямую, т.е. добавлять, удалять, менять данные в выделенной строке грида в нужной колонке и т.д.? Или все это делается через приведение типов к TcxGridDBDataController и потом через DataSet, как с обычной таблицей? (Есть куча таблиц и следить за обработчиками в каждой новой таблице муторно)
Пробовал следующую конструкцию:
cxGrid.FocusedView.DataController.SetValues(cxGrid.FocusedView.DataController.FocuserRecordIndex , 0 , Null) {Меняем значение в 0 колонке view на Null}
Визуально все срабатывает, но после cxGrid.FocusedView.DataController.Post изменения не фиксируются.
Вообще - можно ли управлять данными из таблиц при помощи одного только DataController, не обращаясь к его привязанной таблице напрямую, т.е. добавлять, удалять, менять данные в выделенной строке грида в нужной колонке и т.д.? Или все это делается через приведение типов к TcxGridDBDataController и потом через DataSet, как с обычной таблицей? (Есть куча таблиц и следить за обработчиками в каждой новой таблице муторно)
В догонку - можно ли через View грида (не через DataController) получить доступ к полям привязанной таблицы, которые не содержатся в списке полей самого View?
Alkatraz
Помоему таким образом данные можно менять только в несвязанных с данными въюхах.
В связанных (cxGrid.FocusedView.DataController as TcxDBDataController).DataSet и дальше как обычно все
Помоему таким образом данные можно менять только в несвязанных с данными въюхах.
В связанных (cxGrid.FocusedView.DataController as TcxDBDataController).DataSet и дальше как обычно все
Alkatraz
Что подразумевается под словосочетанием "привязанной к view таблице" ?
Если имеется ввиду что у cxGridDBTableView.DataController.DataSource указан DataSource у котрого в свою очередь DataSet - это TADOTable, TADOQuery .... или кто-то из BDE то при любом изменении в гриде эти данные будут меняться и в базе данных.
Пример изменение значения поля
cxGrid1DBTableView1Column1.EditValue := 0;
cxGrid1DBTableView1.DataController.Post;
Пример удаление записи
cxGrid1DBTableView1.DataController.DeleteFocused
Пример изменение значения поля
cxGrid1DBTableView1.DataController.Insert;
cxGrid1DBTableView1Column1.EditValue := 0;
cxGrid1DBTableView1Column2.EditValue := 22;
cxGrid1DBTableView1Column3.EditValue := 'паспорт';
cxGrid1DBTableView1.DataController.Post;
Все эти действия изменят и таблицу в БД
Что подразумевается под словосочетанием "привязанной к view таблице" ?
Если имеется ввиду что у cxGridDBTableView.DataController.DataSource указан DataSource у котрого в свою очередь DataSet - это TADOTable, TADOQuery .... или кто-то из BDE то при любом изменении в гриде эти данные будут меняться и в базе данных.
Пример изменение значения поля
cxGrid1DBTableView1Column1.EditValue := 0;
cxGrid1DBTableView1.DataController.Post;
Пример удаление записи
cxGrid1DBTableView1.DataController.DeleteFocused
Пример изменение значения поля
cxGrid1DBTableView1.DataController.Insert;
cxGrid1DBTableView1Column1.EditValue := 0;
cxGrid1DBTableView1Column2.EditValue := 22;
cxGrid1DBTableView1Column3.EditValue := 'паспорт';
cxGrid1DBTableView1.DataController.Post;
Все эти действия изменят и таблицу в БД
Цитата:
nfomSB
Спасибо, приведенные вами примеры я понял, но проблемма в другом - при нажатии на удаление мне необходимо проверить в FocusedView значение самого первого поля, объявленного во view (индекс его всегда будет 0) и если там есть некое значение, то это значение заNull'ить, иначе просто удалить запись.
Удаление, добавление, сохранение и отмена работают великолепно, но стоит проблемма изменения значения именно поля с нулевым индексом в текущем сфокусированном View (есть много вложенных Master-Detail). Соответственно обращаться по именам полей в данном случае будет очень геморройно, а в таблицах поля имеют разные наименования и только в каждом своем View они имеют 0 индекс...
Надеюсь, объясним более-менее понятно... %)
Цитата:
Спасибо, приведенные вами примеры я понял, но проблемма в другом - при нажатии на удаление мне необходимо проверить в FocusedView значение самого первого поля, объявленного во view (индекс его всегда будет 0) и если там есть некое значение, то это значение заNull'ить, иначе просто удалить запись.
Обработчик нажатия кнопки удалить
if TcxGridDBTableView(cxGrid1.FocusedView).Columns[0].EditValue = 0 then
begin
TcxGridDBTableView(cxGrid1.FocusedView).Columns[0].EditValue := null;
TcxGridDBTableView(cxGrid1.FocusedView).DataController.Post;
end
else
TcxGridDBTableView(cxGrid1.FocusedView).DataController.DeleteFocused;
Цитата:
Обработчик нажатия кнопки удалить
if TcxGridDBTableView(cxGrid1.FocusedView).Columns[0].EditValue = 0 then
begin
TcxGridDBTableView(cxGrid1.FocusedView).Columns[0].EditValue := null;
TcxGridDBTableView(cxGrid1.FocusedView).DataController.Post;
end
else
TcxGridDBTableView(cxGrid1.FocusedView).DataController.DeleteFocused;
Гм... Это если известен вид View (TableView, BandedView, Cardiew и т.д.) или в любом случае можно применять данное преобразование? В моем случае точный вид View не известен. И еще вопрос - если удалить свой обработчик, то на какое событие вешать код?
И еще один вопрос - необходимо перечеркнуть прорисовываемые ячейки красной чертой. Делаю обработчик на прорисовку контента, пытаюсь рисовать по ACanvas, вычисляя координаты середины прорисовываемой области (там дается область прорисовки), затем рисую с помощью MoveTo и LineTo. В результате ничего не получается - как будто событие не отработало. Аналогичная конструкция в EhLib работала...
Alkatraz
Что за глупый вопрос? Если View разные по типу, как можно "в любом случае можно применять данное преобразование"? Посмотри хелп, учись работать с документацией.
Что за глупый вопрос? Если View разные по типу, как можно "в любом случае можно применять данное преобразование"? Посмотри хелп, учись работать с документацией.
Цитата:
Alkatraz
Цитата:
procedure TfrmCustomDraw.DBPivotGridCustomDrawCell(
Sender: TcxCustomPivotGrid; ACanvas: TcxCanvas;
AViewInfo: TcxPivotGridDataCellViewInfo; var ADone: Boolean);
begin
if AViewInfo.DisplayText = '' then
begin
ACanvas.Brush.Color := clBtnShadow;
ACanvas.FillRect(AViewInfo.Bounds);
with AViewInfo.Bounds do
begin
ACanvas.Pen.Color := clBlack;
ACanvas.Pen.Width := 1;
ACanvas.MoveTo(Left, Top);
ACanvas.LineTo(Right, Bottom);
ACanvas.MoveTo(Right, Top);
ACanvas.LineTo(Left, Bottom);
end;
AViewInfo.Transparent := True;
end
else
if (AViewInfo.RowIndex mod 2 = 0) or (AViewInfo.RowIndex mod 2 = 0) then
begin
FillTubeGradientRect(ACanvas.Handle, AViewInfo.Bounds, clYellow, clRed, True);
AViewInfo.Transparent := True;
end;
end;
Может это поможет...
Shadi
Не знаю правильно ли написан пример, но он не должен сработать, т.к. ADone по-умолчанию равняется false, а в таком случае он поверх этой отрисовки наложит свою.
Не знаю правильно ли написан пример, но он не должен сработать, т.к. ADone по-умолчанию равняется false, а в таком случае он поверх этой отрисовки наложит свою.
jicoff
Цитата:
Пример взят из демо и поэтому работает на ура...
Можешь сам посмотреть ExpressPivotGrid\Demos\Delphi\CustomDrawDemo\
Цитата:
Не знаю правильно ли написан пример, но он не должен сработать, т.к. ADone по-умолчанию равняется false, а в таком случае он поверх этой отрисовки наложит свою.
Пример взят из демо и поэтому работает на ура...
Можешь сам посмотреть ExpressPivotGrid\Demos\Delphi\CustomDrawDemo\
Господа!
может объясните как надо настраивать мастер-детейл, что бы был возможен мультиселект ?
типа vDet.DataController.SelectAll;
сейчас
vDet.DataController.RowCount - 0
vDet.DataController.DataSetRecordCount - 3
может объясните как надо настраивать мастер-детейл, что бы был возможен мультиселект ?
типа vDet.DataController.SelectAll;
сейчас
vDet.DataController.RowCount - 0
vDet.DataController.DataSetRecordCount - 3
kooxymooxy
GridView.OptionSelections.MultiSelect := true
GridView.OptionSelections.MultiSelect := true
jicoff
дело в том, что оно так и установлено и в мастере и в детейле...
но если я по кнопочке делаю для детейла vDet.DataController.SelectAll;
он не выделяет ни одной строки, просто встает на первую...
а vDet.Controller.SelectedRowCount - 0 (((
дело в том, что оно так и установлено и в мастере и в детейле...
но если я по кнопочке делаю для детейла vDet.DataController.SelectAll;
он не выделяет ни одной строки, просто встает на первую...
а vDet.Controller.SelectedRowCount - 0 (((
kooxymooxy
А как ты это делаешь? Что у тебя такое vDet? Если это detail view, который стоит в дизайне как detail, то тогда ничего не получится - это pattern view (см. свойство IsPattern). Detail надо брать у конкретной мастер записи: преобразуешь ее к TcxGridMasterDataRow. а далее есть свойство ActiveDetailGridView, что тебе, скорее всего, и нужно/
А как ты это делаешь? Что у тебя такое vDet? Если это detail view, который стоит в дизайне как detail, то тогда ничего не получится - это pattern view (см. свойство IsPattern). Detail надо брать у конкретной мастер записи: преобразуешь ее к TcxGridMasterDataRow. а далее есть свойство ActiveDetailGridView, что тебе, скорее всего, и нужно/
jicoff
спасибо большое....полгода бы сидел, с девами недавно только пришлось столкнуться )
Добавлено:
jicoff
и всё таки последний вопрос :
как в ActiveDetailGridView сохранять изменения, которые вношу через setvalue... ?
понимаю, что вопросы глупые, не поджимало бы время, покопался бы сам (((
спасибо большое....полгода бы сидел, с девами недавно только пришлось столкнуться )
Добавлено:
jicoff
и всё таки последний вопрос :
как в ActiveDetailGridView сохранять изменения, которые вношу через setvalue... ?
понимаю, что вопросы глупые, не поджимало бы время, покопался бы сам (((
kooxymooxy
Это смотря какой detail view. Если это простой, то он должен сохранять там данные (предположение). Если это DB, то при переходе фокуса на другой detail туда заново считываются данные, т.к. используется один DataSet на все detail view.
Это смотря какой detail view. Если это простой, то он должен сохранять там данные (предположение). Если это DB, то при переходе фокуса на другой detail туда заново считываются данные, т.к. используется один DataSet на все detail view.
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
Предыдущая тема: Язык программирования на русском языке
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.