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

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

Автор: X11
Дата сообщения: 23.11.2012 10:04
marser, было бы здорово, если бы Вы смогли вспомнить или ещё раз выложить пример кода. Спасибо.

Кстати, есть ещё ExtLookupCombobox. Может с ним можно?
Автор: marser
Дата сообщения: 23.11.2012 10:58
X11

Цитата:
было бы здорово, если бы Вы смогли вспомнить или ещё раз выложить пример кода

http://rghost.ru/41752354
Автор: X11
Дата сообщения: 23.11.2012 11:50
файл удалён
Автор: marser
Дата сообщения: 23.11.2012 11:57
X11 Вы откуда по ссылке щелкаете? Из почты наверное? Я после того, как выложил, через минуту заменил ссылку.
Автор: topdon
Дата сообщения: 23.11.2012 13:21
Уважаемые коллеги!
Прошу помощи!
Как корректно закрыть форму с dxDBTreeview и ADOQuery?
при обычном закрытии у меня возникает ошибка- то Accsess Violation,
то выход за пределы индекса.
Нигде не могу найти, как нужно.

И еще- если надо динамически перестроить запрос на дерево, и перенастроить дерево-
тоже не дает- Нельзя выполнять операцию над закрытом датасете-

With ADOQuery1 do begin
Active := False;
SQL.Clear;
SQL.Add('select * from themes');

Active := True;
end;
далее настройка дерева

Что я не так делаю?
Автор: mdid
Дата сообщения: 23.11.2012 14:51
topdon
где то у вас какахи в коде. Даже если не закрывать кверину, то AV быть не должно. Ищите, что у вас в OnClose через f7, так же в обработки событий. На лицо обращение к несуществующему объекту
Автор: X11
Дата сообщения: 23.11.2012 14:53
cxGrid привязан к датасету.
В цикле нужно изменить значение у выделенных записей.

Так раньше работало. Теперь ничего не меняется.


Код:
procedure TfmRegionsRelevant.UpdateRegionAtSelectedRecords();
Var
i: integer;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
fmSelRegionImp := TfmSelRegionImp.Create(self);

if fmSelRegionImp.ShowModal = mrOk then
with TcxGridTableView(cxGrid1.ActiveView).dataController do
begin
beginupdate;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
edit;
Values[ARowInfo.RecordIndex, dbgRegionsRelevantID_REGION.Index] := TcxDBTreeListNode(fmSelRegionImp.dbTreeRegionsReplace.FocusedNode).KeyValue;
post(True);
end;//else
end;//for
finally
EndUpdate;
FreeAndNil(fmSelRegionImp);
end;
end;//with
end;

Автор: marser
Дата сообщения: 23.11.2012 15:10
X11
Можно изменить записи в DataSet не меняя указатель на запись (т.е. не перемещаясь по записям)? Ответ: нет.

Добавлено:
X11
Проверте в цикле какой dataset.recno
Автор: X11
Дата сообщения: 23.11.2012 15:22

Код:

edit;
Values[ARowInfo.RecordIndex, dbgRegionsRelevantID_REGION.Index] := TcxDBTreeListNode(fmSelRegionImp.dbTreeRegionsReplace.FocusedNode).KeyValue;
a := DataSource.dataset.recno;
post;

Автор: marser
Дата сообщения: 23.11.2012 15:29
X11
Вы перемещаетесь по записям грида, но не перемещаетесь по записям DataSet, т.е. FocusedRecordIndex один и тот же. С обычным бы гридом - сработало, но с DB - нет.
Автор: X11
Дата сообщения: 23.11.2012 15:33
А как же в цикле отредактировать выделенные записи в cxGrid?

Добавлено:
ладно, сделаю SQL запросом
Автор: marser
Дата сообщения: 23.11.2012 15:38
X11

Цитата:
сделаю SQL запросом

Если количество записей небольшое, то это самое лучшее решение.
Автор: X11
Дата сообщения: 23.11.2012 15:59
Наоборот, записей пользователь выделяет немного - 2-5. И было бы лучше редактировать напрямую.
А запросом правильнее редактировать большое количество записей.
СтартТранзакции
Редактирование 10 тыс. записей
Подтверждение.

Так будет быстрее, нежели подтверждать каждую запись. Но это уже не касается данной темы

Добавлено:
Сделал так:


Код:

procedure TfmRegionsRelevant.UpdateRegionAtSelectedRecords();
Var
i, a: integer;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
fmSelRegionImp := TfmSelRegionImp.Create(self);
qUpdateIdRegion.Transaction.Rollback;
qUpdateIdRegion.Transaction.StartTransaction;
if fmSelRegionImp.ShowModal = mrOk then
with TcxGridDBTableView(cxGrid1.ActiveView).dataController do
begin
beginupdate;
try
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
qUpdateIdRegion.Close;
qUpdateIdRegion.ParamByName('id').AsInteger := Values[ARowInfo.RecordIndex, dbgRegionsRelevantID.Index];
qUpdateIdRegion.ParamByName('id_region').AsInteger := TcxDBTreeListNode(fmSelRegionImp.dbTreeRegionsReplace.FocusedNode).KeyValue;
qUpdateIdRegion.ExecQuery;
end;//else
end;//for
if qUpdateIdRegion.Transaction.InTransaction then qUpdateIdRegion.Transaction.Commit;
qUpdateIdRegion.Close;

except
qUpdateIdRegion.Transaction.Rollback;
end;//try except
finally
EndUpdate;
FreeAndNil(fmSelRegionImp);
btnOpenUpdateClick(nil);
end;
end;//with
end;


Автор: G787
Дата сообщения: 23.11.2012 20:27
Нужен пример загрузки скина из файла с применением его по отношению ко всем контролам и форме.

Я додумался только до такого но это не работает

Цитата:
var s: string;
begin
dxSkinsDefaultPainters.dxSkinsUserSkinLoadFromFile('D:\DelphiLab\Components\DevExpress\ExpressSkins Library\Binary Skin Files\Black.skinres', s);
dxSkinController1.SkinName := s;
Автор: marser
Дата сообщения: 25.11.2012 07:49
G787

Код: dxSkinController1.SkinName := 'UserSkin';
dxSkinsUserSkinLoadFromFile(<Имя файла>, <Имя скина>);
Автор: G787
Дата сообщения: 25.11.2012 18:02
marser спасибо буду ждать )
Автор: marser
Дата сообщения: 26.11.2012 06:10
G787
http://rghost.ru/41815582
Автор: neznayka3
Дата сообщения: 26.11.2012 06:43
подскажите, как сделать, чтобы форма подгоняла размеры под Layout. <form>.AutoSize=true, <LayoutControl>.AutoSize=true, не работает.
исходник

Добавлено:
как автоматически показывать/скрывать ScrollBars у cxMemo в зависимости от текста?
Автор: mdid
Дата сообщения: 26.11.2012 08:02
neznayka3
<LayoutControl>.Align:=alClient?

вопрос. как заставить навигатор появиться не внизу cxGrig'а, а вверху? Просто при видимом футере навигатор выглядит как инородное тело, которое не имеет отношение к гриду.
Автор: neznayka3
Дата сообщения: 26.11.2012 08:11
mdid
Align установлено.
Автор: mdid
Дата сообщения: 26.11.2012 08:23
neznayka3
только что создал пустой проект с dxLayoutControl. Установил dxLayoutControl1.Align:=alClient и dxLayoutControl1 растянулся на всю форму.
версия 2011.2.6
Автор: MagistrAnatol
Дата сообщения: 26.11.2012 09:45
С фильтрами разобрался, надо было на оффсайте немного полазить, но по следующему вопросу ничего не нашел, или плохо искал, - как реализовать подсветку найденных слов в фильтре в гриде??
Автор: G787
Дата сообщения: 26.11.2012 10:21
marser благодарчик

MagistrAnatol
У TableView есть ивент OnCustomDrawCell, подойдёт ?
Автор: salexn1
Дата сообщения: 26.11.2012 11:13
MagistrAnatol
Кроме как самому писать обработчик OnCustomDraw, т.е. фильтры это даже не поиск.
Просто когда фильтры сложные - очень трудно отрисовывать их.
Автор: mdid
Дата сообщения: 26.11.2012 11:35
MagistrAnatol

мой обработчик OnCustomDrawCell

Код: var
rect : Trect;
begin
if cxGrid1Level1.GridView.DataController.RecordCount=0 then
exit;

if (not AViewInfo.Visible) or (FindEdit.EditValue=null) then
exit;
// ps:=pos(AnsiLowerCase(vartostr(FindEdit.EditValue)),AnsiLowerCase(vartostr(AViewInfo.Value)));
if pos(AnsiLowerCase(vartostr(FindEdit.EditValue)),AnsiLowerCase(vartostr(AViewInfo.Value)))>0 then begin
rect:=ACanvas.Canvas.ClipRect;
rect.Left:=20;
rect.Right:=-20;
rect.Top:=0;
rect.Bottom:=0;
ACanvas.FillRect(rect,65535);//clYellow
end
else
ACanvas.RestoreClipRegion;
Автор: MagistrAnatol
Дата сообщения: 27.11.2012 08:12
G787
salexn1

Цитата:
Кроме как самому писать обработчик OnCustomDraw
ето понятно,
только по етому событию я знаю как подсветить всю строку, а вот как только слово или пару букв - ето без понятия???



Добавлено:
mdid
У меня по фильтру и так останутся только нужные значения,хотелось бы подсветить че там юзер наберет
Автор: mdid
Дата сообщения: 27.11.2012 09:05
MagistrAnatol
выше гляньте, я там по ошибке адресовал сообщение G787, а на самом деле оно было для вас. В примере подсвечивается не строка, а ячейка.
Автор: MagistrAnatol
Дата сообщения: 27.11.2012 09:14
mdid
я смотрел етот код - я повторюсь - у меня в гриде и так одна колонка, и мне надо подсветить не всю ячейку(нужные и так отфильтруются) а именно те символы, которые наберет пользователь
Автор: miwa
Дата сообщения: 27.11.2012 09:25
MagistrAnatol

TextWidth + DrawText + F1
Автор: MagistrAnatol
Дата сообщения: 27.11.2012 09:57
на офсайте нашел код, осталось переделаб на билдер

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
I, FoundPos, StartPosition: integer;
AColumn : TcxGridDBColumn;
ATextToFind : String;
AEdit : TcxRichEdit;
AFind : Boolean;
begin
ATextToFind := 'Limited';
with cxGrid1DBTableView1 do
begin
AColumn := GetColumnByFieldName('Event_Description');
for I := 0 to ViewData.RecordCount - 1 do
if ViewData.Rows[I].IsData then
begin
ViewData.Rows[I].Focused := True;
with Controller.EditingController do
begin
ShowEdit(AColumn);
AEdit := TcxRichEdit(Edit); - не пойму что такое Edit???
StartPosition := 0;
AFind := True;
while AFind do
begin
FoundPos := AEdit.FindText(ATextToFind, StartPosition, Length(AEdit.Text), [stWholeWord]);
if (FoundPos >= 0) then
begin
AEdit.SelStart := FoundPos;
AEdit.SelLength := Length( ATextToFind);
AEdit.SelAttributes.Color:=clRed;
AEdit.SelLength:=0;
StartPosition := FoundPos + 1;
end
else
AFind := False;
end;
end;
end;
end;
end;
end.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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