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

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

Автор: vladman
Дата сообщения: 10.12.2009 12:03
X11

Цитата:
Хм.. хватило только этого. Спасибо.

так имелось ввиду либо cxLocalizer1.Language := 'Русский (Россия)', либо cxLocalizer1.LanguageIndex := 1049;

Цитата:
'Русский (Россия)' компонента тянет из ОС?

Скорее всего, поэтому и советовал использовать 1049.


Добавлено:
xRay

Цитата:
Пробую сделать вот так:

Вроде бы все верно делаете.

Цитата:
В итоге получаю общую фильтрацию по всем колонкам, а не независимую по каждой колонке отдельно т.е. что должен дать OR

Не совсем понятно что вы подразумеваете под "общую фильтрацию по всем колонкам" и "не независимую по каждой колонке отдельно".
Автор: X11
Дата сообщения: 10.12.2009 12:14

Цитата:
'Русский (Россия)

Я так понял, что это зависит от ОС. Т.к. проблема возникали при компиляции на win7
Автор: xRay
Дата сообщения: 10.12.2009 13:33
vladman

Цитата:
Не совсем понятно что вы подразумеваете под "общую фильтрацию по всем колонкам" и "не независимую по каждой колонке отдельно".


Если мы выполним этот sql-запрос "SELECT * FROM Table1 WHERE (col1 like '%a%') OR (col2 like '%a%') OR (col3 like '%a%')" [далее по тексту sql-запрос A1] мы получим в результате суммарный набор записей включающий в себя те строки где найдена наша строка.

В случае использования OR в Filter по колонками cxGrid (как в моем примере который вот тут: http://forum.ru-board.com/topic.cgi?forum=33&topic=10123&start=2140#21 )
мы получаем не ожидаемый результат как в случае sql-запрос A1.

Покажу при помощи картинок что получается если использую OR по нескольким колонкам в Filter. (В качестве примера я использовал FilterByCodeDemo)

рис 1. это исходный набор данных:


рис 2. это отфильровали по одной букве:


рис 3. это отфильровали по двум буквам:


Как видно из скриншотов в результате наложения (между отфильтрованными колонками по LIKE) фильтра OR получаем совсем не то же что он нам даст sql-запрос A1.

Конечная цель показать все строки где есть искомая строчка.
Автор: f3ka
Дата сообщения: 10.12.2009 14:08
xRay
на мой взгляд фильтр правильно показывает последний скрин... но второй почему то не корректный (мне так кажется), в фильтре нет фильтрации по колонке Product, а там подсвечены буквы...
интересует все таки какой результат ожидали увидеть вы...
Автор: JohnSilver182
Дата сообщения: 10.12.2009 14:09

Цитата:
А вы случаем не сохраняете настройки грида в реестр или ini файл, а затем при старте приложения их восстанавливаете? Если да, то сохраненные настройки, скорее всего, и убирают ваш футер. Попробуйте удалить настройки этого грида из реестра (ini).

А ведь точно !!!!


Добавлено:

Цитата:
Попробуйте удалить настройки этого грида из реестра (ini)

Я сейчас на этапе разработки это сделаю . А когда софт пойдет в дело , у всех юзеров пропишется на ОСТАЛЬНЫХ cxGrid .
[БЛА БЛА БЛА]
=
Footer="False"

Если я через пол года сделаю Footer у какого либо cxGrid , придется в коде разрешать ????



Автор: f3ka
Дата сообщения: 10.12.2009 14:21
JohnSilver182
а тогда возникает вопрос, когда у вас записываются настройки в ini ? если каждый раз при закрытии окна, то придется либо делать пимпу для юзверя которая будет включать итоги, тогда оно при закрытии запишется, либо изобретать велосипед...
Автор: JohnSilver182
Дата сообщения: 10.12.2009 14:23
О великий All !
Подскажите почему меню barManager следы на окнах оставляет ??


Добавлено:

Цитата:
а тогда возникает вопрос, когда у вас записываются настройки в ini

МЕГА вопрос . Я делаю на каждом окне кнопку Сохранить размер (
Автор: vladman
Дата сообщения: 10.12.2009 15:26
xRay

Цитата:
Конечная цель показать все строки где есть искомая строчка.

Так вроде бы так и есть.
Присоединяюсь к f3ka
Цитата:
все таки какой результат ожидали увидеть вы...


f3ka

Цитата:
но второй почему то не корректный (мне так кажется), в фильтре нет фильтрации по колонке Product, а там подсвечены буквы...

Скорее всего буквы подсвечиваются вне зависимости от того, участвует поле в фильтрации или нет.


Добавлено:
JohnSilver182

Цитата:

Если я через пол года сделаю Footer у какого либо cxGrid , придется в коде разрешать ????

придется удалить в реестре (ini) соответствующую веточку для соответствующего грида перед восстановлением сохраненных свойств.
Автор: xokc
Дата сообщения: 10.12.2009 19:33
JohnSilver182


Цитата:
Подскажите почему меню barManager следы на окнах оставляет ??


Скины в топку. Ну зачем вам в аптечном справочнике скины???!!!!
Автор: f3ka
Дата сообщения: 11.12.2009 08:18
xokc
ну так рождество и новый год надвигаются надо поднять настроение этим лабораторным крысам
Автор: X11
Дата сообщения: 11.12.2009 08:56
Возможно дело не в скинах, вообще в девках в целом или в самой IDE (у меня D2007). Тоже замечал не раз, что на экране следы остаются иногда (вертикальные полосы). Закономерность пока не выяснил.
Автор: SIgor33
Дата сообщения: 11.12.2009 09:54
Подскажите пожалуйста: кладу на форму TcxVerticalGrid, там добавляю TcxEditorRow где в TditProperties вывираю combobox. Мне туда нужно в выпадающий список данные динамически забить, а вот где не знаю. properties.items.add('') там нет
Автор: X11
Дата сообщения: 11.12.2009 10:01
SIgor33, уже не один раз обсуждали этот вопрос, поиск уже отменили?
vgOptionsProfiles - это строка вертикальной сетки

Код: TcxComboBoxProperties(vgOptionsProfiles.Properties.EditProperties).Items.Add(s);
Автор: Andrey128
Дата сообщения: 11.12.2009 10:12
JohnSilver182
Можно в реестре (ini) хранить версию программы и после восстановления:

Код: if RestoredVersion < 10 then
Footer := True;
Автор: f3ka
Дата сообщения: 11.12.2009 10:19
Andrey128
у меня тоже была такая мысль, но не стал ее озвучивать...
или например использовать значения (или существования значения) какого либо другого параметра в реестре (ini)...

Код: if <Storage>.ReadInteger('section', 'ident', -1) = -1 then Footer := true;
Автор: SIgor33
Дата сообщения: 11.12.2009 12:07
X11
Извените пожалуйста, что с поиском тормазнул. И спасибо за ответ
Автор: zzz78
Дата сообщения: 11.12.2009 13:40
TdxGridReportLink есть ReportTitle, а вот футера нету. Как таки приделать отчету футер. PageFooter не подходит, он используется для нумерации. Нужно нечто типа SummaryFooter из FastRepota.

Отчет такого вида:

Таблица с данными

Подписи

Вот как раз подписи никак не получается вывести.
Автор: Chukotka
Дата сообщения: 11.12.2009 15:51
cxTreeList, колонка с Properties = ProgressBar (ShowTextStyle = cxtsPercent)
При печати с помощью dxComponentPrinter выводится число - можно ли заставить печатать именно прогресс-бар?
Автор: Graach
Дата сообщения: 13.12.2009 11:15
Доброго времени суток всем.

Есть такой вопросик (облазила уже всю поддержку ДевЕкспресса): используется cxDBVerticalGrid и в нем длинные кэпшены строк. У них есть описание как сделать так, чтобы работал wrap, но он применяется только для значений строк, а не для заголовков. И что я с ним не делала, не переносит он на следующую строку заголовки. А текст для заголовков так же как и данные берутся из БД, поэтому особой возможности поставить ручное разбитие на строки отсутствует. Может можно как-нибудь сделать враппинг для кэпшена так же автоматически, как для велью?
Автор: X11
Дата сообщения: 13.12.2009 22:09
То ли лыжи не едут...
На форме есть dxBarManager (dev47)
Создана панель, на которой несколько кнопок и TcxBarEditItem, у которого в свойстве Properties установлено LookupComboBox. Заполнены все свойства корректно
Вот снимок:
http://ipicture.ru/uploads/091213/6R3xf49387.png

Связь есть TDataSource->TpFibDataset.
В ListOptions стоит SyncMode установлено в True.

В выпадающем списке без проблем выбираю нужную строку.
Далее нажимаю кнопку, в которой код:


Код: ShowMessage(TcxLookupComboboxProperties(lcboxProfiles).ListSource.ClassName);
Автор: vladman
Дата сообщения: 13.12.2009 22:57
Graach

Цитата:
Может можно как-нибудь сделать враппинг для кэпшена так же автоматически, как для велью?

Можно. Обработайте событие onDrawRowHeader, в котором воспользуйтесь функцией ACanvas.DrawText в которой, в свою очередь, укажите в качестве параметра Flags значение cxWordBreak or cxShowEndEllipsis. Не забудьте указать Done := True;. Правда при этом, вам придется самим полностью перерисовать весь Header. Если будут трудности обращайтесь, попробую набросать готовый обработчик.
Автор: neznayka3
Дата сообщения: 14.12.2009 09:59
На главной форме только cxPageControl и dxBarManager1. Динамически в коде
Код: dxBarManager1.BeginUpdate;
...
dxBarManager1.EndUpdate();
Автор: Graach
Дата сообщения: 14.12.2009 11:52

Цитата:
Если будут трудности обращайтесь, попробую набросать готовый обработчик.

Обращаюсь Вот так у меня выглядит обработчик onDrawRowHeader:

ACanvas.Brush.Color := AHeaderViewInfo.viewparams.color;
ACanvas.FillRect(AHeaderViewInfo.HeaderRect);
ACanvas.drawtext(AHeaderViewInfo.captioninfo.items[0].cation, AHeaderViewInfo.headerrect, cxWordBreak or cxShowEndEllipsis, true);
done:= true;

Причем троеточие в конце строки он ставит (в принципе он и при выборе этого свойства в гриде ставил), а вот переносить не переносит.
Автор: vladman
Дата сообщения: 14.12.2009 14:47
Graach

Цитата:
Вот так у меня выглядит обработчик onDrawRowHeader:

Вроде бы все у вас верно. Но все-таки попробуйте этот код, должно работать.

Код: procedure <YourTForm>.<YourcxVerticalGrid>DrawRowHeader(Sender: TObject; ACanvas: TcxCanvas; APainter: TcxvgPainter;
AHeaderViewInfo: TcxCustomRowHeaderInfo; var Done: Boolean);
var
vCaptionTextRect: TRect;
begin
vCaptionTextRect := AHeaderViewInfo.CaptionsInfo[0].CaptionTextRect;
ACanvas.Brush.Color := AHeaderViewInfo.ViewParams.Color;
ACanvas.FillRect(AHeaderViewInfo.HeaderRect);
ACanvas.DrawText(AHeaderViewInfo.CaptionsInfo[0].Caption, vCaptionTextRect, cxWordBreak or cxShowEndEllipsis);
Done := True;
end;
Автор: afiget
Дата сообщения: 14.12.2009 14:48

Цитата:
укажите в качестве параметра Flags значение cxWordBreak or cxShowEndEllipsis

Может быть только первое?

Цитата:
создаются cxTabSheet и на них с других форм переносятся dxDockSite со всеми компонентами. Прорисовка идет не мгновенно, заметно для глаз. Как ускорить прорисовку?

Посмотрите: Ссылка 1

Цитата:
Как сделать активный таб зная его имя?

У таба есть имя? Откуда? Или вы имели ввиду Caption. Если так, то в цикле найдите нужный таб и сделайте ему TabVisible:=true
Посмотрите также в сторону SelectNextPage и ActivePage.

И еще, PageIndex как раз подойдет, в отличие от TabIndex.
Автор: vladman
Дата сообщения: 14.12.2009 14:51
neznayka3

Цитата:
Как сделать активный таб зная его имя?

<YourcxPageControl>.ActivePage := <YourcxTabSheet>;
Автор: jicoff
Дата сообщения: 14.12.2009 14:56
neznayka3

А установить свойство ActivePage в нужное значение не помогает?
Автор: Graach
Дата сообщения: 14.12.2009 17:30

Цитата:
Вроде бы все у вас верно. Но все-таки попробуйте этот код, должно работать.

Не работает

Цитата:
Может быть только первое?

Уже перепробовала все комбинации всех возможных параметров.
Эффект один и тот же (из тех что более ли менее похожи на то, что должно быть) - делает wordbreak, но не переносит на следующую строку. Причем даже если вручную в ран тайме увеличить высоту строки, все равно ничего под перво строкой не выводится...
Автор: vladman
Дата сообщения: 15.12.2009 02:19
Graach

Цитата:
Не работает

Сделайте простой пример где не работает, посмотрим. Может мы о разном говорим.
Автор: Graach
Дата сообщения: 15.12.2009 08:26

Цитата:
Сделайте простой пример где не работает, посмотрим. Может мы о разном говорим.

Что-то я не поняла вопрос? я ввела код из вашего предыдущего поста и в результате в конце строки появилось троеточие.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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