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

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

Автор: delover
Дата сообщения: 11.04.2013 06:38
[more=Код]
Код: [no]procedure TForm1.cxGridDBBandedTableViewKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
var
R: TRect;
begin
if Key = VK_APPS then
begin
Key := 0;
R := cxGridDBBandedTableView.Controller.FocusedRow.ViewInfo.FocusRectBounds;
R.TopLeft := cxGrid.ClientToScreen(R.TopLeft);
popup1.Popup(R.Left + 100, R.Top + 15); //можно и Bottom для любителей
end;
end;[/no]
Автор: mdid
Дата сообщения: 14.04.2013 13:07
можно ли повернуть фигуру в FlowChart? в пакете TMS можно, но что то душа к нему не лежит
Автор: AvGSoft
Дата сообщения: 14.04.2013 13:54
Народ кто реализовывал фильтр для dbtreelist чтобы отображались элементы и все их родители и это все связать с controlfilter
Автор: AvGSoft
Дата сообщения: 15.04.2013 12:31
mdid
Походу никак, в доках ничего про поворот нет и в свойствах тоже.
Автор: marser
Дата сообщения: 16.04.2013 06:53
AvGSoft

Цитата:
Народ кто реализовывал фильтр для dbtreelist чтобы отображались элементы и все их родители и это все связать с controlfilter

Нужно написать потомок TcxDBTreeList, реализующий интерфейс IcxFilterControl.
А вот насчет "все их родители", по моему, утопия, если "родители" не подпадают под условия фильтра.
Автор: mdid
Дата сообщения: 18.04.2013 12:25
подскажите плиз, как у dxBarLargeButton убрать отступ для иконки. Мне нужна просто кнопка с надписью без отступа. Пробовал играть с PaintStyle, но там чет все одинаково.
подошел бы и dxBarButton, но там нельзя контролировать ширину
Автор: LadyOfWood
Дата сообщения: 18.04.2013 18:33

Цитата:
подошел бы и dxBarButton, но там нельзя контролировать ширину

Как вариант создать наследника и перекрыть GetWidth для контрола.
Автор: mdid
Дата сообщения: 18.04.2013 19:39
LadyOfWood
перекрыто то можно, но я боюсь, что ItemLink не съест подмену
Автор: LadyOfWood
Дата сообщения: 18.04.2013 20:35
mdid
Сделайте правильно и будет нормально, пример _http://www.devexpress.com/Support/Center/KB/p/A191.aspx
Автор: mdid
Дата сообщения: 19.04.2013 15:42
LadyOfWood
спасибо, вроде оно

в общем дошли наконец руки попробовать. Но тут косяк образовался. создаю класс

Код: TssBottomButton=class(TdxBarButton)
protected
procedure WidthChanged; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Width default 0;
end;


constructor TssBottomButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
dxBarRegisterItem(TssBottomButton, TdxBarButtonControl, false);
FShowCaption := True;
PaintStyle:=psCaption;
end;

destructor TssBottomButton.Destroy;
begin
dxBarUnregisterItem(TssBottomButton);
inherited;
end;

procedure TssBottomButton.WidthChanged;
begin
UpdateEx;
end;
Автор: LadyOfWood
Дата сообщения: 19.04.2013 20:30

Цитата:
в общем дошли наконец руки попробовать. Но тут косяк образовался. создаю класс

Вы новую кнопку создали, а вот контрол не перегрузили. Плюс регистрация нужна не в конструкторе класса.

Код:
TssBottomButtonControl = class(TdxBarItemControl)
protected
function GetHeight: Integer; override;
function GetWidth: Integer; override;
end;

function TssBottomButtonControl.GetHeight: Integer;
begin
if IsVertical(Parent) then
Result := TssBottomButton(ButtonItem).Width
else
Result := inherited;
end;

function TssBottomButtonControl.GetWidth: Integer;
begin
if IsVertical(Parent) then
Result := inherited
else
Result := TssBottomButton(ButtonItem).Width;
end;

initialization
dxBarRegisterItem(TssBottomButton, TssBottomButtonControl, True);

finalization
dxBarUnregisterItem(TssBottomButton);

Автор: mdid
Дата сообщения: 20.04.2013 08:49
LadyOfWood
ух ты, пасиба. попробую
Автор: Pint_pot
Дата сообщения: 22.04.2013 15:38
Доброго времени суток.
Имеется TcxDBTreeList c датасетом где-то на 3000 записей. При позиционировании на какую-нибудь ячейку, если SyncMode включен, то в датасете происходит автопереход на соотв-ю запись. Это приводит к тормозам. Я выставил SyncMode в False, но если не делать вручную Locate на соотв-ю запись в датасете перед редактированием, то фокус автоматически перекидывается на ячейку из нужной колонки, но по ноду согласно текущему положению в датасете. Проблема в том, что, естественно, эти ручные Locate также приводят к тормозам. Возможно ли проводить промежуточные работы (вставка, редактирование значений) с этим деревом как чисто с гридом с загруженными значениями, не взаимодействуя постоянно с датасетом?
Автор: LadyOfWood
Дата сообщения: 22.04.2013 15:54

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

В принципе можно но ваша задача создать кэширующий data source наследуемый от TcustomDataSource.
Автор: Cryogen2003
Дата сообщения: 22.04.2013 15:59
Pint_pot
Попробуйте включить SmartRefresh, должно помочь. Без него даже при обычном Locate вызывается FullRefresh из вашего датасета в виртуальный датасет компонента.
Мне в гриде smartrefresh очень помогает
Автор: mdid
Дата сообщения: 22.04.2013 16:06
Pint_pot
что то вы обманываете. Вот только что открыл в своем проекте справочник контрагентов в количестве 3786. Тормозов вообще не наблюдаю. Галка SyncMode=true. Вы явно что то недоговариваете. 100% есть какие то левые обработки
Автор: Pint_pot
Дата сообщения: 22.04.2013 16:34
Cryogen2003

На всякий случай я выставил SmartRefresh как вы посоветовали, но визуальных изменений не заметно

Добавлено:
mdid
Да у меня много обработок при редактировании данных. Но! Тормоза наблюдались при SyncMode=True при простом хождении с помощью кнопок курсора на клаве вверх-вниз по дереву (влево-вправо по одному ноду никаких тормозов), когда никаких левых обработок точно нет. Когда я отключил SyncMode, то простое хождение по дереву вниз-вверх тоже стало летать. Отсюда у меня и возник вопрос о том, как сделать быстрее доступ к нужной записи дерева. Ранее когда датасет был в 6 раз меньше, таких проблем не было заметно при перемещении.


Добавлено:
LadyOfWood
Спасибо за совет. Кэширующий датасорс должен как-то помочь убыстрить переход к нужным записям? Сейчас в качестве датасета используется меморидатасет, порядок id выбранных записей и порядок нодов в визуальном представлении дереве очень сильно различаются. Мои навыки программирования не позволяют мне сделать подобное, ориентируясь лишь на одну вашу фразу. Если бы вы указали, где можно подробнее посмотреть на эту тему, было бы здорово.

Автор: delover
Дата сообщения: 22.04.2013 19:35
Pint_pot
Я предложил бы тут попробовать ClientDataSet с провайдером. На Вашем объёме данных он даёт наилучшие результаты. Я не хотел бы критиковать имеморидатасет, просто не знаком с ним, не знаю фичей. при SyncMode=True тут обработка только через грид - работает великолепно. Ни одного моего отрицательного коммента небыло. И не будет. Только приходится изучать DevExpress, а он разный - подсказать не смогу - 1 раз сделаете открытие за 1 день и больше нигде в программе проблемм.
Автор: LadyOfWood
Дата сообщения: 22.04.2013 22:26

Цитата:
Мои навыки программирования не позволяют мне сделать подобное, ориентируясь лишь на одну вашу фразу. Если бы вы указали, где можно подробнее посмотреть на эту тему, было бы здорово.

На эту тему только на сайте и в исходных кодах DevExpress.
Автор: makz
Дата сообщения: 23.04.2013 02:21
Pint_pot
А вообще проиндексировано ли parent поле в датасете? Кстати, SQLmonitor может помочь совершить немало открытий в собственной программе.
Автор: mdid
Дата сообщения: 23.04.2013 07:49
вот вы народ странный какой то. Говорю, что этот компонент отлично работает с большим количеством записей и не в нем проблема, а вы советуете офигенно обходные пути, вместо того, что бы советовать разобраться в своем коде.
Pint_pot
создайте пустой проект, киньте на форму TcxDBTreeList, и не вешая на него каких любо обработок, выведите свои данные. И вы увидите, что вы где то наговнокодили, ибо 3000 записей это не та цифра, что бы компонент слег. И второй вариант, вы не наговнокодили, а просто неправильно настроили сам компонент.
Автор: MagistrAnatol
Дата сообщения: 23.04.2013 09:20
Народ, а 12.2.4 можно как-то поменять скорость перелистывания фреймов в dxTileControl - вроде говорили что должны ввести ету функцию - но в упор не нахожу

Добавлено:
Уточню,- меня интересует скорость перехода между фреймами при клике на плитке или возврате на на главный екран
Автор: mdid
Дата сообщения: 23.04.2013 10:53
черт, после перехода на 12.2.4 приложение через раз сыпется с AV.
сначала дет до OnCreate основной формы, теперь на второй строке


Код: cxLocalizer1.FileName:=hint+'\RusDev.ini';
cxLocalizer1.Active:=true;
cxLocalizer1.Locale:=1049;
Автор: jonikDk
Дата сообщения: 23.04.2013 12:50
mdid
В дебаге?
попробуй добавить пути в Debug Source Path и выставить Use Debug DCU
Автор: mdid
Дата сообщения: 23.04.2013 13:27
jonikDk
не мне не такая галка нужна была. Уже разобрался, я просто по ошибке в спешке не тот путь добавил
Автор: Man_Without_Face
Дата сообщения: 26.04.2013 10:28
Добрый день, в dll (Delphi 2009) использую DevExpress v52. На 32 битной системе все ок, поставили на 64 битную (win 7, server 2008) - вылетает av при создании формы с компонентами. Делал тестовый exe с компонентами - запускал на 64 битной - все нормально.
Кто с таким сталкивался и как лечить?
Автор: LadyOfWood
Дата сообщения: 26.04.2013 11:50

Цитата:
Добрый день, в dll (Delphi 2009) использую DevExpress v52.

Может обновить.

Цитата:
На 32 битной системе все ок, поставили на 64 битную (win 7, server 2008) - вылетает av при создании формы с компонентами.

Тут stack вызовов надо. Постав EurekaLog или madExcept.

Автор: Man_Without_Face
Дата сообщения: 26.04.2013 12:23

Цитата:
Тут stack вызовов надо. Постав EurekaLog или madExcept.

Поставил madExcept, только не совсем понимаю как он мне поможет в dll:

"Например, чтобы madExcept отлавливал исключения в вашем TThread необходимо заключить код вот в такую конструкцию:

try
// тут ваш код
except HandleException end;"

Может я не так выразился, но у меня криейт и форм шоу отрабатывают, потом показывается форма с компонентами и сразу av. Нажимаеш ок - за ней след. av и т.д.

Добавлено:
Проблему решил: перевел на XE (в 2009 по другому, но тоже можно), в uses прописал dxCore, при инициализации dll - dxInitialize, при финализации - dxFinalize.
Автор: X11
Дата сообщения: 26.04.2013 13:21

Цитата:
в uses прописал dxCore, при инициализации dll - dxInitialize, при финализации - dxFinalize.


Точно!
Как я мог забыть. Я сам год или два назад с этим сталкивался.
Автор: Man_Without_Face
Дата сообщения: 26.04.2013 14:07
А я с вашего поста и передрал. Самое интересное решилась проблема и с гридом на xe2 (пару месяцев назад писал, так и не решил тогда), там более новые компоненты. Так что проект оставлю на XE2.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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