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

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

Автор: gyani
Дата сообщения: 29.08.2009 23:50
vladman не работает, всмысле текст продолжает смещатся, может там нужны какието дополнителеые элементы на форме или настройки?

подскажите по fib, если poRefreshAfterPost=True должны ли обновлятся данные в гриде после добавления записи? (autocomit=true)
Автор: DreamKHV
Дата сообщения: 30.08.2009 00:06
gyani, не должны - по умоланию фибы кешируют записи. Если у записи заполнено ключевое поле, то можно использовать DataSet.Refresh. Если записи пофетчены, то DataSet.CloseOpen(false), но метод весьма не практичный.

Т.к. автоинкремент заполняется на сервере, а в приложении поле пустует, то обновляющий запрос не выполняется.
Автор: vladman
Дата сообщения: 30.08.2009 12:15
gyani

Цитата:
не работает, всмысле текст продолжает смещатся,

Тогда давайте ваш пример поглядим чего не так.
Т
Цитата:
подскажите по fib...должны ли обновлятся данные в гриде

Смотря что вы понимаете под обновлением данных.
Добавленная запись в гриде появится, а вот обновление остальных записей не произойдет.
Для обновления всей выборки используйте метод FullRefresh.
Но, такого рода вопросы нужно спрашивать в другой ветке, так как вопрос не относится к DevExpress.
Автор: gyani
Дата сообщения: 30.08.2009 21:55

настроил AutoUpdateOption теперь поле само обновляется(поле autoinc).

подскажите как выровнять текст в ячейке по центру?

Добавлено:
разобрался, оказывается нужно полю присвоить значение наприме TextEdit а там уже появится выранивание
Автор: Martian2
Дата сообщения: 31.08.2009 08:11
Народ, подскажите.
Наблюдаются дикие тормоза при пользовании компонентами DevExpress на стадии разработки.
Инструмент VS 2008. OC Win Vista 64. ОЗУ 4Гб. Проц Core2 Duo.
Долгий отклик на простейшие действия в дизайнере, перелистывании вкладок и т. д. Пожирается вся память. VS – 1.5Гб, Кэш 2Гб. Все равно все тормозит по страшному, испробовано на других системах c ОЗУ 8Гб, Win ХР, Win 7 с более мощными 4х ядерным процессорами, мощнейшем видео - все по последнему слову техники. Результат тот же.
Как с этим бороться? Что за хрень? Ваши советы.
Автор: korobovmax
Дата сообщения: 31.08.2009 11:16
Martian2, для начала попробуйте выяснить на какие компоненты наблюдается такая реакция. Начните новый проект, положите на форму, например, TreeList, посмотрите скорость работы.
Автор: X11
Дата сообщения: 31.08.2009 13:17
Такой вот неприятный момент обнаружил в dxBarManager. Есть панель типа главное меню. Создал там структуру пунктов, включая разделители. Но я создал один разделитель и "растыкал" его по всем пунктам меню дабы не создавать десяток разделителей. Иначе все эти 10 разделителей видны на закладке Commands в dxBarManager. Решил удалить из меню один разделитесь. Получается так, что, выделяя один разделитель в меню... выделяются и все. Нажимаю Delete - удаляются все разделители из всех пунктов меню. Можно что-то придумать, чтобы и не дублировать десяток разделителей, и нормально манипулировать (удалять в частности) только выделенный разделитель?
Автор: korobovmax
Дата сообщения: 31.08.2009 13:27
X11, в dxBarManager'е разделители между меню не являются отдельными элементами, а скорее, свойствами существующих. То есть аналогии с MainMen, PopupMenu нет.

Добавляются разделители с помощью контекстного меню на выбранном элементе, пункт "Begin a group".
Автор: X11
Дата сообщения: 31.08.2009 13:27
А ещё вопрос по dxBarManager. На закладке Commans есть 2 категории. Можно ли как-то перемещать не по одной команде, а выделенные?

И ещё 2 замечания по dxBarManager.
1. Жаль, что dxBarManager не может запоминать своё расположение и размеры в дизайне (в IDE).
2. Жаль, что dxBarManager нельзя растягивать по ширине.
Такие функциональные компоненты, а такие банальные ограничения.

Добавлено:
korobovmax, может ты меня не понял, вот на снимке я подчеркнул:



Я имел ввиду Seperetor (разделитель) не в dxBarManager, а в самой панели (в главном меню)
Автор: korobovmax
Дата сообщения: 31.08.2009 13:31
X11, перемещать нельзя. Они сделали также, как сделано в том месте откуда слизывали (мс офис)

По 1 и 2 поясните. Имеется ввиду панели, а не сам менеджер?
Автор: X11
Дата сообщения: 31.08.2009 13:46

Цитата:
По 1 и 2 поясните. Имеется ввиду панели, а не сам менеджер?

Нет, я писал именно о dxBarManager в режиме дизайна (в IDE).
Автор: korobovmax
Дата сообщения: 31.08.2009 13:46
X11, если создать один TdxSeparator и переносить в нужные места меню с помощью CTRL его копии не создаются. Можно так.

Тем не менее, рекомендую использовать Begin a group.
По ссылке пример как начинать группы программно: http://www.devexpress.com/Support/Center/KB/p/A1274.aspx

Добавлено:
X11, о каких размерах и расположении идет речь, если TdxBarManager - не визуальный компонент?
Автор: X11
Дата сообщения: 31.08.2009 14:22

Цитата:
X11, если создать один TdxSeparator и переносить в нужные места меню с помощью CTRL его копии не создаются. Можно так.

Вначале речь шла об удалении. Попробуй удалить из меню разделитеЛь. У меня удалились все разделители из всех пунктов.


Цитата:
X11, о каких размерах и расположении идет речь, если TdxBarManager - не визуальный компонент?

Речь идёт об обычных размерах и расположении. На форме лежит dxBarManager1. Щёлкни по нему дважды. Появится редактор с заголовком Customize


Вот это редактор жаль, что не запоминает своё расположение и размеры. А также нет возможности изменять ширину этого редактора.

Добавлено:
Забыл добавить:
D2007, Dev43.

Добавлено:

Цитата:
Тем не менее, рекомендую использовать Begin a group.
По ссылке пример как начинать группы программно:

Как правило, главное меню окна проектируется в дизайне, а не в рантайме.

Добавлено:

Цитата:
X11, перемещать нельзя. Они сделали также, как сделано в том месте откуда слизывали (мс офис)

эх... в стареньком стандартном ActionList`е и то можно было ещё за царя Панька.

Добавлено:
А ещё на панели, созданной в TdxBarManager`е (НЕ в режиме главного меню) нет возможности добавить в дизайне разделитель кнопок.
Но решил эту проблему - может ещё компу пригодиться: создаём кнопку, Caption`у присваиваем вертикальную черту |, получается неплохо
Автор: korobovmax
Дата сообщения: 31.08.2009 14:29
Про удаление: можно хватать разделитель и перетаскивать его на пустое от панелей место. Тогда он будет исчезать только из одного места. Программно - удалять у него из массива Links нужный элемент.

Про остальное: увы, не умеет.




Цитата:
Как правило, главное меню окна проектируется в дизайне, а не в рантайме.


Никто не мещает "начинать группы" в дизайне
Автор: X11
Дата сообщения: 31.08.2009 14:31

Цитата:
Никто не мещает "начинать группы" в дизайне

Имеется ввиду закладка Groups?
Добавил туда группу, к группе команды... что дальше делать... ума не приложу
Автор: korobovmax
Дата сообщения: 31.08.2009 14:35
Просто вызвать контекстное меню у элемента, перед которым нужен разделитель. Внизу будет пункт Begin a Group. Добавится разделитель, которым, при этом, не будет доступен в списке элементов.
Автор: X11
Дата сообщения: 31.08.2009 14:38
Вопрос по барам.
Есть TdxBarManager, создана одна панель (dxBar). На панели кроме кнопок лежит TcxBarEditItem, у которого в properties установлено LookupComboBox.

Процедуру передаётся:
cxLookupCombobox: TcxLookupComboboxProperties;

Как можно в этой процедуре заставить этот LookupComboBox выпасть принудительно?

Добавлено:

Цитата:
Просто вызвать контекстное меню у элемента, перед которым нужен разделитель. Внизу будет пункт Begin a Group. Добавится разделитель, которым, при этом, не будет доступен в списке элементов.

Получилось. Но теперь не могу выделить этот разделитель в меню. Соответственно не могу переместить или удалить.

Уже даже открыл TdxBarManager, удалил оттуда все группы, а в меню разделитеЛь остался... удалить или переместить не могу, т.к. не получается его выделить мышкой.
Автор: korobovmax
Дата сообщения: 31.08.2009 14:43
Правильно.
Я же сказал, что он не является элементов меню, а скорее, свойством следующего за ним элемента.
Убирается разделитель также как и добавляется.
Автор: X11
Дата сообщения: 31.08.2009 14:50

Цитата:
Вопрос по барам.
Есть TdxBarManager, создана одна панель (dxBar). На панели кроме кнопок лежит TcxBarEditItem, у которого в properties установлено LookupComboBox.

Процедуру передаётся:
cxLookupCombobox: TcxLookupComboboxProperties;

Как можно в этой процедуре заставить этот LookupComboBox выпасть принудительно?


А ещё лучше, если бы в процедуру можно было передать этот cxLookupCombobox именно, как cxLookupCombobox, а не как TcxBarEditItem или TcxLookupComboboxProperties

Т.к. в процедуре нужно добраться и до EditValue тоже

Добавлено:
Не пойму, я чего-то нахимичил или так оно и есть.
На dxBar лежит TcxBarEditItem, у которого в properties установлено LookupComboBox.
Фоку имеет cxGrid, находящийся на той же форме. Так вот, чтобы открыть LookupComboBox на панели, нужно дважды по нему щёлннуть.
ImmadiateDropDown установлено в True. D2007. Dev43
Автор: vladman
Дата сообщения: 31.08.2009 23:28
X11

Цитата:
А ещё на панели, созданной в TdxBarManager`е (НЕ в режиме главного меню) нет возможности добавить в дизайне разделитель кнопок.
Но решил эту проблему - может ещё компу пригодиться: создаём кнопку, Caption`у присваиваем вертикальную черту |, получается неплох...
Но теперь не могу выделить этот разделитель в меню. Соответственно не могу переместить или удалить. Уже даже открыл TdxBarManager, удалил оттуда все группы, а в меню разделитеЛь остался... удалить или переместить не могу, т.к. не получается его выделить мышкой

Ну вы даете, ну видно же что функционал *старенького стандартного ActionList'а* не работает с dxBarManager'ом. Думаю, беглый просмотр раздела Customization Capabilities в справке по ExpresBars 6 потребовал бы меньше времени на эксперименты. А лучше же конечно начать с Fundamentals, Concept. А по поводу *вертикальную черту |, получается неплох* - намного лучшее решение вам уже предлагали - правый клик на элементе тулбара и выбираем Begin a Group, либо слегка потянуть нужный элемент после предполагаемого разделителя вправо и отпустить.

Добавлено:
X11

Цитата:
Как можно в этой процедуре заставить этот LookupComboBox выпасть принудительно?..
Т.к. в процедуре нужно добраться и до EditValue тоже

См. пример, в нем можно обратить внимание и на сепараторы и на разделители, кому как больше нравится .
_http://rapidshare.com/files/274018344/Unit76.rar.html
Автор: JohnSilver182
Дата сообщения: 01.09.2009 06:45

Цитата:
Я же сказал, что он не является элементов меню, а скорее, свойством следующего за ним элемента.
Убирается разделитель также как и добавляется.


Я тоже на разделителях чуть не рехнулся !!!
Автор: JohnSilver182
Дата сообщения: 02.09.2009 12:31
Кстати если FLoatDock активен то у формы вырубается KEYPRIVIEW
и ЭТО плавает даже если форму свернуть ((
Автор: svs123456789
Дата сообщения: 03.09.2009 11:19
как проще всего русифицировать DevExpr_v45_09_07_2009 ?
ini или pas ?
Автор: DroN_S
Дата сообщения: 03.09.2009 11:52
Привет всем!!!
народ, подскажите, как отобразить иконку в cxGrid???
понятно что в событии OnCustomDrawCell... но как
есть ли у кого пример?
Автор: X11
Дата сообщения: 03.09.2009 13:20
Есть же заветная кнопочка "Версия для печати". А затем поиск....
Вот недавно обсуждали.
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123&start=1240#20

Кстати в гугле есть примеры, как нарисовать в ячейке изображение....
Автор: JohnSilver182
Дата сообщения: 03.09.2009 14:17

Цитата:
как отобразить иконку в cxGrid???



Код:
ADone := true;
ACanvas.FillRect(AViewInfo.Bounds);
ACanvas.Brush.Color := clWhite;

if AViewInfo.GridRecord.DisplayTexts[cxGrid1DBTableView1Column_CFI.Index]<>'0' then
dm.cxImageListGrid.Draw(ACanvas.Canvas,AViewInfo.Bounds.Left+0,AViewInfo.Bounds.Top+0,0)
else
dm.cxImageListGrid.Draw(ACanvas.Canvas,AViewInfo.Bounds.Left+0,AViewInfo.Bounds.Top+0,1);
Автор: vladman
Дата сообщения: 03.09.2009 17:59
svs123456789

Цитата:
как проще всего русифицировать DevExpr_v45_09_07_2009 ? ini или pas ?

Смотря что вы понимаете под словом *проще*. Оба способа, как по мне, равнозначны по сложности.


Добавлено:
DroN_S

Цитата:
народ, подскажите, как отобразить иконку в cxGrid??? понятно что в событии OnCustomDrawCell... но как

Скорее всего, вы имели ввиду отображение иконки в одном из View грида, а не в самом cxGrid. Во-первых, у cxGrid нет такого обработчика, во-вторых, тяжело себе представить необходимость отображения иконки именно в cxGrid.
Для отображения иконки не обязательно обрабатывать событие OnCustomDrawCell.
Если речь идет о cxGridTableView, например, то достаточно свойству Properties необходимого cxGridColumn присвоить значение *ImageComboBox*, настроить его необходимые свойства
(*Images*, *Items*) и у вас, в зависимости от значения будет отображаться соответствующая иконка из ImageComboBox.items.

Добавлено:
DroN_S
Но если есть необходимостьименно в onCustomDrawCell, то можно отобразить и в обработчике onCustomDrawCell.
JohnSilver182
Я бы немного подправил ваш код.
procedure <YourForm>.<YourcxGridTableView>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo:
TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if AViewInfo.Item = <YourcxGridTableView>ColumnForImage then
begin
ACanvas.Brush.Color := clWhite;
ACanvas.FillRect(AViewInfo.Bounds);
<YourcxImageList>.Draw(ACanvas.Canvas, AViewInfo.Bounds, 0, False, True, True);
ADone := True;
end;
end;
За ототбражение конкретной иконки отвечает третий параметр (0) - это индекс иконки в <YourcxImageList>.

Изменения:
- Отрисовывать иконку только для определенного столбца (<YourcxGridTableView>ColumnForImage)
- Не изменять размеры иконки при изменении размеров колонки и строки

Добавлено:
JohnSilver182

Цитата:
2 ALL Кстати для чего нужны три первые команды ?????

ADone := true; - Признак того, что вы полностью отвечаете за прорисовку конкретной ячейки и не хотите чтобы грид перерисовывал/дорисовывал ее своими стандартными средствами.
ACanvas.Brush.Color := clWhite - Установить цвет кисти в белый для заполнения этим цветом всей ячейки командой ACanvas.FillRect(AViewInfo.Bounds);
Автор: JohnSilver182
Дата сообщения: 03.09.2009 20:08
vladman Код действительно правильнее

Код:
ACanvas.Brush.Color := clWhite;
ACanvas.FillRect(AViewInfo.Bounds);
Автор: xokc
Дата сообщения: 03.09.2009 21:34
JohnSilver182

Цитата:
Если Canvas это как бы текущий холст , почему нельзя писать
ACanvas.Закрасить(clWhite) ??

Ну тогда уж
ACanvas.Закрасить(clWhite, Rect(....))?
А потом захочется
ACanvas.Закрасить(clWhite, clRed, Rect(....)) для рамки?
А потом
ACanvas.Закрасить(clWhite, clRed, ltDot, Rect(....)) для типа штриховки и т.д.?
Пусть уж лучше так, как есть.
Автор: vladman
Дата сообщения: 03.09.2009 22:00
JohnSilver182

Цитата:
Хотя я так и не пойму зачем такие конструкции ??

А *Закрасить* это какой метод TcxCanvas? Только постарайтесь его название написать именно так как он объявлен в cxGraphics, а не по-русски. А потом посмотреть список параметров этого метода. Уверен, после этого все станет понятно.

Добавлено:
На DevExpress Channel - три новых видео:

VCL Spell Checker - Automatic Correction
VCL Spell Checker - Checking Multiple Editors
VCL Spell Checker - Custom Dictionaries

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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