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

» Использование DevExpress

Автор: mln141
Дата сообщения: 23.06.2006 23:36
Alex47
Да (стройка 6, с 4-м апдейтом). Загрузил новые (июньские) тоже все работает. Сделал так: запустил Инсталл, затем поправил как учили выше на -1, потом в Инсталле нажал кнопку "Компилить". И все заработало. Так что спасибо reenoip.
Автор: reenoip
Дата сообщения: 24.06.2006 06:44
mln141, да моего участия тут, собственно, самый мизер ))) все благодарности к местным же, сам полгода назад напоролся, паниковал тут - не дай небо кому-нибудь такое пережить )))
Странно просто, что глюк этот из версии к версии кочует. Но, думаю, это всё не просто так
Автор: russko
Дата сообщения: 24.06.2006 13:20
Есть такой вопрос, существует ли возможность к cxGrid прикрутить диалог поиска, аналогичный диалогу DBGridEh из набора EhLib, вызываемый по "CTRL+F". Просто инкрементальный поиск в cxGrid не ищет по частичному сопадению, а фильтрами некоторым пользователям тяжеловато пользоваться (((( А руками свой диалог писать лениво )))
Спасибо.
Автор: Alex47
Дата сообщения: 25.06.2006 11:01
russko

В конференциях этот вопрос обсуждался. Есть, по крайней мере, три варианта решения.

1. Предлагается сделать так, как сделано в Firefox или Thunderbird (используется авто фильтр):
"Sinan Demir - DX Squad wrote:
I like the "Firefox" (TM) way:
OnKeyDown, show a filterpanel at the bottom and send the key to the
editor there.
Build the whole search logic into this filterpanel / class.
> I would like to implement a search feature similar to Firefox or
> Thunderbird also. Where a user can type a word and the grid display
> all records where that word appears in any column.
> Any ideas on the easiest way to achieve this?
this could work:
sFilterString := '%' + edSearch.Text + '%';
with cxGridTableView.DataController.Filter.Root do
begin
Clear;
BoolOperatorKind := fboOr;
For i := 0 to cxGridTableView.ItemCount - 1 do
AddItem(cxGridTableView.Items[i], foLike,
sFilterString, sFilterString);
end;
cxGridTableView.DataController.Filter.Active := True;"

2. Можно использовать компонент xcxGridQuickSearch6 (в свободном доступе http://www.oratool.de/components/index.html)
Там, если в панели фильтрации перед текстом набирать "%" - PercentWildcard, то идет
фильтрация по символам внутри слов. Можно, слегка изменив исходник, PercentWildcard добавлять в текст программно.

3. Радикальный вариант, связанный с правкой реализации Incremental Search:
"Hi Mark,
Yes, your conclusion is correct, you need to alter some sections that
make use of the CompareText() function. In addition, you will want to
modify the text selection display code used by the incremental search
feature, since it only supports selecting from the first char.
Here are the changes I implemented to have the incremental search
feature fully support searching inside words:
- in cxDataUtils.pas, I added a new global text comparison function:
function PosSubstring(const Str, SubStr: string): integer;
begin
Result := -1;
try
Result := Pos(AnsiUpperCase(SubStr), AnsiUpperCase(Str)) - 1;
except
end;
end;
- then in cxCustomData.pas, function TcxDataControllerSearch.DoSearch, I
made the following change:
commented out this line: if DataCompareText(S, ASubText, True) then
added this line instead: if PosSubstring(S, ASubText) <> -1 then
- then in cxGridCustomTableView.pas, procedure
TcxGridTableDataCellViewInfo.InitTextSelection, I made the following change:
commented out this line: SelStart := 0;
added this line instead: SelStart := PosSubstring(GetText,
Controller.IncSearchingText);"
Автор: makz
Дата сообщения: 25.06.2006 13:56
Добавляю дополнительную кнопку в cxMRUEdit, а как событие к ней привязать не понятно. Может делал уже кто-нибуть?
Автор: baraka
Дата сообщения: 25.06.2006 14:18
makz
А как это ты добавляешь кнопку к cxMRUEdit. Там есть только одна (на ней многоточие изначально). В закладке Events есть подкатегория Propreties, там увидишь OnButtonClick.
Возможность добавлять много кнопок есть у TcxButtonEdit.
Автор: makz
Дата сообщения: 26.06.2006 08:12
baraka
Ну, во первых сразу их там две, одна дропдаун, а вторая с троеточием, и работает с OnButtonClick. А добавляю примерно так:
with TcxMRUEditProperties(AProperties).Buttons do
if Count<3 then begin
Add;
Items[2].Kind:=bkText;
Items[2].Caption:='-';
end;//if
end;
Добавить можно сколько захочешь, только вот они чисто декоративные получаются, без фунционала .
Автор: Alex47
Дата сообщения: 26.06.2006 08:14
23.06.06 в devexpress.public.vcl.editors4 появилось сообщение:
"ExpressEditors Library 5": cxCurrencyEdit.pas
version: 5.17.0.0
Fixes:
1)
function TcxCustomCurrencyEditProperties.IsDisplayValueValid(
var DisplayValue: TcxEditValue; AEditFocused: Boolean): Boolean;
var
C, AIsOnGetTextAssigned: Boolean;
D: Double;
begin
Result := not AEditFocused or
(InternalGetEditFormat(C, AIsOnGetTextAssigned) <> '') or
AIsOnGetTextAssigned or
{+}
(Nullable and (DisplayValue = NullString)) or
{+.}
StrToFloatEx(VarToStr(DisplayValue), D);
end;
2)
procedure TcxCustomCurrencyEditProperties.ValidateDisplayValue(
var ADisplayValue: TcxEditValue; var AErrorText: TCaption;
var AError: Boolean; AEdit: TcxCustomEdit);
var
AValue: Double;
begin
{+}
if Nullable and (VarToStr(ADisplayValue) = NullString) then
AError := False
else
{+.}
AError := not StrToFloatEx(VarToStr(ADisplayValue), AValue);
inherited ValidateDisplayValue(ADisplayValue, AErrorText, AError, AEdit
);
end;
Сам не проверял, с этой версией не работаю
Автор: russko
Дата сообщения: 26.06.2006 08:30
Alex47

Цитата:
1. Предлагается сделать так, как сделано в Firefox или Thunderbird (используется авто фильтр):
"Sinan Demir - DX Squad wrote:
I like the "Firefox" (TM) way:
OnKeyDown, show a filterpanel at the bottom and send the key to the
editor there.
Build the whole search logic into this filterpanel / class.
> I would like to implement a search feature similar to Firefox or
> Thunderbird also. Where a user can type a word and the grid display
> all records where that word appears in any column.
> Any ideas on the easiest way to achieve this?
this could work:
sFilterString := '%' + edSearch.Text + '%';
with cxGridTableView.DataController.Filter.Root do
begin
Clear;
BoolOperatorKind := fboOr;
For i := 0 to cxGridTableView.ItemCount - 1 do
AddItem(cxGridTableView.Items[i], foLike,
sFilterString, sFilterString);
end;
cxGridTableView.DataController.Filter.Active := True;"

Этот вариант очень интересный, его уже реализовал, но вот вопрос, какой код вешать на обработчик кнопки "Следующая запись", т.е. находит следующую запись, удовлетворяющую фильтру.
Автор: Alex47
Дата сообщения: 26.06.2006 11:27
russko
Возможно я не понял вопроса, но не сгодится ли
TcxGridDBTableView(cxGrid1.FocusedView).DataController.GotoNext;
Автор: makz
Дата сообщения: 26.06.2006 11:37
baraka
Хех. Победил - вырезал кой-чего лишнего из исходника.
Автор: jicoff
Дата сообщения: 26.06.2006 12:42
makz

Из своего исходника или DevExpress?
Автор: Alex47
Дата сообщения: 26.06.2006 12:52
makz
Похоже надо переопределить процедуру:
procedure TcxCustomMRUEdit.DoButtonClick(AButtonVisibleIndex: Integer);
begin
if AButtonVisibleIndex = 1 then
begin
with Properties do
if Assigned(OnButtonClick) then
OnButtonClick(Self);
if RepositoryItem <> nil then
with ActiveProperties do
if Assigned(OnButtonClick) then
OnButtonClick(Self);
end;
end;
Тогда исходники можно не трогать.
Автор: russko
Дата сообщения: 26.06.2006 17:26
Alex47
Спасибо помогло ))
Автор: makz
Дата сообщения: 27.06.2006 05:50
Alex47
Проще оказалось удалить, тогда наследуется процедура с индексом кнопки в параметре. Меня в принципе устроило. А после опубликования свойства buttons, вообще все стало как мечталось.
Автор: harmony man
Дата сообщения: 27.06.2006 15:57
Есть вопросец по Quantum Grid.
Предположим, что я отоображаю список компьютеров и связанных с ними функциями. Компьютер характеризуется двумя столбцами (Name, IP Address). Оба эти столбца сгруппированы в Band. Возможно ли сделать так, чтобы эти столбцы вытаскивались в область группировки вместе и на одном уровне?
Сливать их в один столбец не хочется.
Автор: VadimLou
Дата сообщения: 28.06.2006 16:31
Alex47

Цитата:
23.06.06 в devexpress.public.vcl.editors4 появилось сообщение:
"ExpressEditors Library 5": cxCurrencyEdit.pas

Это исправление нужно тем кто уже перешёл на новую версию (05_june_2006) от feandy.

+ ещё исправления на том же devexpress.public.vcl.editors4

ExpressLibrary:cxContainer.pas

Исправление при совместном использовании с ReportBuilder. Ввиду того что последний постоянно плюётся Application.ProcessMessages возможны проблемы с сх контейнером.

Fixes:

...
procedure TcxCustomPopupWindow.Popup(...)
...
procedure ShowPopupWindow;
...
if FFocusedControl = nil then
SetFocus
else {+} if FFocusedControl.CanFocus then {+.}
FFocusedControl.SetFocus;
SetWindowPos(...
...
ExpressQuantumGrid 5: Cyclic exceptions

При использованиии 3-х компонент совместно с ExpressQuantumGrid 5 (InfoPower, 1stClass) возникают зацикленные исключения. Побороть их удалось только после добавок проверки на nil следуюих полей:

cxGridTableView.pas:
RecordsViewInfo
IndicatorViewInfo
HeaderViewInfo
GroupByBoxViewInfo
FooterViewInfo

cxGridCustomTableView.pas:
RecordsViewInfo
FRecordsViewInfo
NavigatorSiteViewInfo
FNavigatorSiteViewInfo
FilterViewIn

Developer Express Library: define conditions
Для тех кто постоянно компилит сорцы в проектах следует обратить внимание , что в некоторых сырцах есть анализ определений типа
{$IFDEF DEBUGPAINT}
{$IFDEF DEBUG}
В общем если ваши определения совпадут - вы можете получить неожидаемый эффект (вывод отлад-й инфы , или тормоза или чё ещё ).

Предлагается поотключать все эти определения в заголовах соот-х файлов ...
Автор: Daeron
Дата сообщения: 28.06.2006 19:17
Как отследить изменение данных в гриде ДО прехода на следующую строку?
Пример:
Редактируем одну колонку, ну например убираем символ и нажимаем кнопку вверх (на клавиатуре и желательно, что бы запись не была первой).
В событие OnCanFocusRecordChanged
проверяем
dbMainView.DataController.IsEditing = false
dbMainView.Controller.EditingController.IsEditing = false
dbMainView.DataController.DataSource.DataSet.Modified = false
Тем не менее запись прилежно постится в модифицированном варианте.

При этом переходы мышкой - отлично ловятся.
Девки июньские.

Ну и заодно можно ли как-то отловить момент поста при фильтрации, сортировке?
Пример: берем, добавляем в грид запись, и пытаемся ну например отсортировать, при этом происходит пост

Событие BeforePost датасета плохо тем, что пользователь уже может уйти с записи, которую редактирует.
Автор: Alex47
Дата сообщения: 29.06.2006 08:05
VadimLou

Цитата:
Побороть их удалось только после добавок проверки на nil следуюих полей:

А где, конкретно, эти проверки?
Желательно бы видеть код, или фрагмент кода.

Добавлено:
Daeron

Цитата:
Редактируем одну колонку, ну например убираем символ и нажимаем кнопку вверх


В этом случае отработают обработчики колоночных редакторов
OnEditValueChanged
OnValidate
Они не помогут?
Автор: jicoff
Дата сообщения: 29.06.2006 12:11
Daeron

Если данные были изменены и происходит событие BeforePost, то в этом случае текущая запись еще не изменилась. Это очевидно, и не важно каким способом теряется фокус. Если в этом событии сделать raise, то текущая запись не изменится.
Автор: Vudr
Дата сообщения: 29.06.2006 15:18
Ктонибудь пробовал програмнно менять положение колонки?
У мнея есть несколько лукап колонок и мне надо их сортировать.
После того как присваваю нужный VisibleIndex слетает внешний вид грида (описать сложно, это надо видить), и только после того как в работающем приложении мышкой передвину какуюто колонку все начинает работать. Догадываюсь что надо что еще вызвать после проставления интексов, но что не нашел пока. BeginUpdate и EndUpdate не помогают.
Автор: Alex47
Дата сообщения: 30.06.2006 08:10
Vudr
Попробуй так:
"Try changing the Index property of the column. That seems to be working for
me. It doesn't have the paint problems associated with changing the
VisibleIndex property."
Автор: Vudr
Дата сообщения: 30.06.2006 11:17
Ага, спасиба!
Сам уже дотумкал, что надо Index менять, а не VisibleIndex. Нахрена они его вооще на запись открыли?! тока путает....
Автор: ZealotUa
Дата сообщения: 02.07.2006 11:57
Скачал архивчик, но стоит пароль
Автор: VadimLou
Дата сообщения: 03.07.2006 20:07
Alex47


Цитата:

>Побороть их удалось только после добавок проверки на nil следуюих полей:
>> А где, конкретно, эти проверки?
>> Желательно бы видеть код, или фрагмент кода.



Пара примеров (таких проверок порядочно получилось):

procedure TcxGridTablePainter.DrawFooter;
begin
{+}
if ViewInfo.FooterViewInfo <> nil then
ViewInfo.FooterViewInfo.Paint;
{+.}
end;

procedure TcxGridTableViewInfo.AfterCalculating;
begin
if Visible {+} and (RecordsViewInfo <> nil) {+.} and (RecordsViewInfo.DataRowHeight <> FPrevDataRowHeight) then
Controller.PostGridModeBufferCountUpdate;
inherited;
end;

function TcxGridTableViewInfo.CalculateDataWidth: Integer;
begin
{+}
if HeaderViewInfo <> nil then
Result := HeaderViewInfo.Width
else
Result := 0;
{+.}
if (Result = 0) and GridView.OptionsView.ColumnAutoWidth then
Result := ClientWidth;
end;
Автор: goshavt
Дата сообщения: 03.07.2006 21:04
Вопрос по dxBar.
Кинул меню главной формы на dxBar. Все бы ничего, но при первом после запуска клике на пункте меню дикие тормоза, где-то на 10-15 с, а потом все работает без проблем. Как это обойти? Оно не критично, но у пользователей будут вопросы.
Автор: Vic
Дата сообщения: 04.07.2006 15:18
Ошибка найдена сорри
Автор: korobovmax
Дата сообщения: 04.07.2006 15:54
В зависимости о значения одного столбца, выбираю Repository итем для другого. Выбор только из TcxButtonEdit'ов. Почему после присваения столбцу нужного итема, сво-ва итема ему не передаются?
Автор: makz
Дата сообщения: 05.07.2006 03:48
korobovmax
Возможно путаница с Properties и ActiveProperties?
Автор: korobovmax
Дата сообщения: 05.07.2006 10:01
Про ActiveProperties не знал вообще.

Добавлено:
ActiveProperties есть только у TcxCustomExtLookupComboBox

Добавлено:
Всё оказалось просто - у столбца есть событие OnGetProperties, в котором в качестве передаваемых параметров есть достаточно информации, чтобы реализовать задумку.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Kylix


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