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

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

Автор: Alex47
Дата сообщения: 03.01.2006 10:38
vcrank

Цитата:
3. При редактировании данных выделяется вся строка, а надо только текущую ячейку

В Design редакторе выставить
cxGridDBTableView1.OptionsSelection.InvertSelect = False

gpi
А ведь обработчик View1EditKeyDown срабатывает только при активном редакторе в какой - либо
(параметр AEdit: TcxCustomEdit) колонке, не так ли?
Перехватить нажатие ТAB в общем случае можно, но стоит ли? Ведь по TAB переключаются
в Delphi активные контролы. И не очень понятно - чем же плоха стандартная клавиша Ins?
Автор: vcrank
Дата сообщения: 03.01.2006 11:06
Alex47
спасибо

Цитата:
В Design редакторе выставить
cxGridDBTableView1.OptionsSelection.InvertSelect = False

Ну в стандартном гриде это реализовано нормально
Автор: Alex47
Дата сообщения: 03.01.2006 11:10
vcrank

Цитата:
Ну в стандартном гриде это реализовано нормально


Мы чаще пользуемся вариантом InvertSelect = True. Он удобен, когда надо
поле редактировать - вводимые символы лучше видно. Думаю, поэтому
этот вариант и поставлен по умолчанию.
Автор: vcrank
Дата сообщения: 03.01.2006 11:15
Понятно.
Я правда, имел ввиду клавишу Tab.) Но и за это спасибо
Автор: Alex47
Дата сообщения: 03.01.2006 11:29
vcrank

Переход по строкам через Enter можно сделать в обработчике

TMyForm.cxGrid1DBTableView1KeyDown(Sender: TObject; var Key: Word;
begin
if (Key = VK_RETURN) then Key := VK_DOWN;
end;
Автор: gpi
Дата сообщения: 03.01.2006 12:12
Alex47

Цитата:
А ведь обработчик View1EditKeyDown срабатывает только при активном редакторе в какой - либо
(параметр AEdit: TcxCustomEdit) колонке, не так ли?

Согласен, нужно ещё добавить обработку нажатий клавиш в cxGridDBTableViewKeyDown

Цитата:
Перехватить нажатие ТAB в общем случае можно, но стоит ли? Ведь по TAB переключаются
в Delphi активные контролы. И не очень понятно - чем же плоха стандартная клавиша Ins?

Насколько я понял, vcrank хочет по Tab добавлять (Append) запись, а не вставлять (Insert) её.


Автор: Alex47
Дата сообщения: 03.01.2006 12:29
gpi

Цитата:
Насколько я понял, vcrank хочет по Tab добавлять (Append) запись, а не вставлять (Insert) её.

Тогда стандартное поведение QGrid совпадает с DBGrid. А именно, при нажатии TAB
двигаемся по полям, а при достижении последнего поля последней записи внизу появится пустая новая запись. Настройки для этого:

cxGridDBTableView.OptionsBehavior.FocusCellOnTab = True
cxGridDBTableView.OptionsBehavior.GoToNextCellOnEnter = False
cxGridDBTableView.OptionsData.Appending = True
cxGridDBTableView.OptionsView.NewItemRow = False

К тому же, почти всегда - при наличии ключей в таблице, Append и Insert совпадают по действию:
новая запись занимает место в таблице в соответствии со значением ее ключа.
Автор: korobovmax
Дата сообщения: 03.01.2006 12:52
Подскажите, как у текущего дня в Scheduler'е нарисовать, например, просто синий прямоугольник вместо дефолтного градиента?

Scheduler.Styles.DayHeader (разумеется) распространяется на все дни, а
если писать в OnCustomDrawDayHeader
if Trunc(AViewInfo.DateTime) = Trunc(Now) then begin
ACanvas.Brush.Color := clYellow;
SchedulerToDo.Styles.DayHeader
ACanvas.FillRect(AViewInfo.Bounds);
end;

то градиент рисуется "совместно" с желтым прямоугольником. Если писать в конце события
"ADone := True;", то надо ещё руками выводить текст заголовка. Откуда его взять?


Спасибо.
Автор: Alex47
Дата сообщения: 03.01.2006 14:41
korobovmax
Я с ним не работал, поэтому может невпопад...
Не получится ли использовать обработчик

procedure TMainForm.SchedulerStylesGetDayHeaderStyle(
Sender: TObject; const ADate: TDateTime; var AStyle: TcxStyle);

в котором в зависимости от ADate подставлять нужный AStyle?
Автор: korobovmax
Дата сообщения: 03.01.2006 14:51
Alex47, это самое разумное решение.

Ещё бы только отучить Шедулер рисовать градиент

Добавлено:
В демке CustomDraw DevExpress'овцы вручную текст выводят в DayHeader'ы
Автор: korobovmax
Дата сообщения: 07.01.2006 14:26
В шедулере создаю событие, о котором должно напомниться через 1 минуту. Как нужно "пнуть" шедулер, чтобы он напомнил о событии вовремя, а не когда он в штатном режиме обновляет записи?

А ещё в силе остаётся вопрос: "как отучить Шедулер рисовать градиент над сегодняшним днём?"
Автор: vcrank
Дата сообщения: 07.01.2006 15:10
Совсем дурацкий вопрос:
1. Как узнать какая запись активна? Через Grid
2. Что пользователь набрал, но не применил

Или это только через базу (Table) можно смотреть?
Автор: korobovmax
Дата сообщения: 07.01.2006 15:19
По вопросу №1:
GridTableView.Controller.SelectedRows[n] - массив выделенных записей. Если SelectedCount = 1, то то, что нужно.
Дальше можно вызвать GridTableView.ViewData.GetRecordIndexByRecord() и получить ID записи.
Автор: vcrank
Дата сообщения: 07.01.2006 16:01
Попробую.
Хотя
Цитата:
Дальше можно вызвать GridTableView.ViewData.GetRecordIndexByRecord() и получить ID записи
маленько не подходит, т.к. у меня всего два поля (ключевых нет в принципе). Т.к. для базы я использую csv-файл (из JEDI VCL)

Добавлено:
У меня следующая цель: Пользователь выбирает запись в базе, нажимае кнопку, происходят вычисления. Может быть есть способ лучше?

Добавлено:
Что-то не найду свойство, чтобы можно было выделять строку, но не переходить в режм редактирования
Автор: Alex47
Дата сообщения: 07.01.2006 20:49
vcrank

Цитата:
1. Как узнать какая запись активна? Через Grid

Есть понятие FocusedRecord - посмотри Help или этот топик, ниже одна
из возможных цитат из него по этому поводу:

"Предположим, что нам надо будет потом найти строку на которой сейчас стоит фокус.
Код, примерно, такой:
1. Находим индекс строки на которой стоит фокус:
RecordIndex := TcxGridDBTableView
(cxGrid1.FocusedView).DataController.FocusedRecordIndex;
2. По индексу находим идентификатор строки и запоминаем его:
RecordId := TcxGridDBTableView(cxGrid1.FocusedView).DataController.GetRecordId
(RecordIndex);
3. В нужный момент в нужном обработчике используем запомненный идентификатор
строки для LocateByKey:
TcxGridDBTableView(cxGrid1.FocusedView).DataController.LocateByKey(RecordId);
4. Для DetailView надо всегда использовать конструкцию
TcxGridDBTableView(cxGrid1.FocusedView) - чтобы обратиться к созданному клону
DetailView."


Добавлено:
korobovmax

Цитата:
А ещё в силе остаётся вопрос: "как отучить Шедулер рисовать градиент над сегодняшним днём?"


1. Градиент - это последствие применения Style = Office11, или нечто другое?
2. Чем он (градиент) плох?
Автор: korobovmax
Дата сообщения: 08.01.2006 00:12
Alex47, насчёт вопроса, который задал vcrank - GetRecordId возращает значение идентификатора, который записан в таблице. А в описанном случае с csv - "ключевых нет в принципе".

Насчёт градиента:
1. Этот градиент есть во всех стилях, кроме Office11. В 11 он рисуется по-другому.
2. Свои видом
Ну, кто сказал DevExpress'овцам, что градиент от некого цвета ($00B19388, он же - #8893B1, он же - 136,147,177) к серому устраивает всех пользователей?
Автор: Alex47
Дата сообщения: 08.01.2006 01:39
korobovmax

1. Цитату я дал на всякий случай полностью, но думал, что полезной из нее будет
строка кода:
RecordIndex := TcxGridDBTableView(cxGrid1.FocusedView).DataController.FocusedRecordIndex;
или
TcxGridDBTableView(cxGrid1.FocusedView).DataController.FocusedRowIndex;
Зная индекс строки, на которой стоит фокус, можно добраться до данных в ее полях:
cxGrid1.FocusedView.ViewData.Records[RecordIndex].DisplayTexts[IndexColumn]
или
cxGrid1.FocusedView.ViewData.Rows[RecordIndex].Values[IndexColumn];

2. А Style Office11 - не подходит? Мы сейчас его, в основном, используем.
Автор: vcrank
Дата сообщения: 08.01.2006 06:32
Разобрался со всем, кроме последнего

Добавлено:
И с последним разобрался
Автор: korobovmax
Дата сообщения: 08.01.2006 09:44
Alex47, надо избавиться от градиента. Office11 - это красиво, но в нашем проекте есть стиль "классический".
Автор: Alex47
Дата сообщения: 08.01.2006 13:11
korobovmax

Цитата:
надо избавиться от градиента


Но ведь если в CustomDrawDemo в обработчике TCustomDrawDemoMainForm.SchedulerCustomDrawDayHeader
убрать строку:
//FillGradientRect(ACanvas, AViewInfo.Bounds, $A0A0A0, $707070, False),
то градиент убирается. В чем проблема?
Автор: korobovmax
Дата сообщения: 08.01.2006 14:07
В примере CustomDraw текст выводится вручную и, если вы заметили, границы рисуются простейшим ACanvas.FrameRect, что явно контрастирует с не сегодняшним днём.
Тогда, чтобы границы рисовались как они должны рисоваться по умолчанию, надо комментировать ADone := True, а тогда появляется градиент
Автор: Vitus_Bering
Дата сообщения: 08.01.2006 15:15
Подскажите, пож-та, как при клике на ячейки с текстом таблицы cxGridDBTableView программно поставить курсор в конец текста. Спасибо.
Автор: Alex47
Дата сообщения: 08.01.2006 20:45
korobovmax
Для CustomDrawDemo со следующим кодом в обработчике CustomDrawDayHeader
у меня вроде все отлично: и границы, и градиента нет.
procedure TCustomDrawDemoMainForm.SchedulerCustomDrawDayHeader(
Sender: TObject; ACanvas: TcxCanvas;
AViewInfo: TcxSchedulerDayHeaderCellViewInfo; var ADone: Boolean);
var
Rec: TRect;
begin
if not miHeaders.Checked then Exit;
AViewInfo.Transparent := True;
//FillGradientRect(ACanvas, AViewInfo.Bounds, $A0A0A0, $707070, False);
//ACanvas.FrameRect(AViewInfo.Bounds, clGray);
ACanvas.Brush.Style := bsClear;
if AViewInfo.DateTime = Date then
ACanvas.Brush.Color := clSkyBlue
else
ACanvas.Brush.Color := clYellow;
Rec := AViewInfo.Bounds;
Rec.TopLeft.X := Rec.TopLeft.X - 1; // Было несовпадение границ на пиксель
ACanvas.FillRect(Rec);
ACanvas.Font := csItalic.Font;
ACanvas.DrawText(AViewInfo.DisplayText, AViewInfo.Bounds, cxAlignCenter);
ACanvas.Brush.Style := bsSolid;
ACanvas.FrameRect(Rec, clBlack);
ADone := True;
end;


Добавлено:
Vitus_Bering
Какой тип редактора в ячейке?
Автор: korobovmax
Дата сообщения: 08.01.2006 20:55
Alex47, поймите, у меня другая задача - не нарисовать своими руками DayHeader, а сделать вид всех заголовков одинаковым, чтобы впоследствии просто сделать шрифт надписи текущего дня жирным. То есть дорога одна - убрать градиент.

В конце 29 страницы я ещё был расстроен, что DevExpress не показали как это делать, а, вместо этого, показали как рисовать DayHeader самому.
Автор: Alex47
Дата сообщения: 08.01.2006 21:13
korobovmax

Цитата:
поймите, у меня другая задача - не нарисовать своими руками DayHeader, а сделать вид всех заголовков одинаковым

Но ведь с тем кодом в CustomDrawDayHeader вид всех заголовков получился абсолютно
одинаковым, только заголовок текущего дня отличается цветом - я так сделал, а можно сделать, чтобы отличался не цветом, а шрифтом.
Автор: korobovmax
Дата сообщения: 08.01.2006 21:51
Мммм. Ок, я сказал неправильно. Надо не "одинаковый", а "стандартный".
"Системный" вид.
Автор: Alex47
Дата сообщения: 08.01.2006 22:09
korobovmax
Я часто использую механизм CustomDraw для прорисовки футеров, заголовков(для Grid5). Пока не было случаев, чтобы рисовалось как-то не так, отличаясь от остального. У DevExpress - это стандартный механизм прорисовки чего-либо с нужными изменениями. Поэтому они и описали его в Help. В нашем случае надо говорить конкретно:
1. Что данный мной код в CustomDrawDayHeader рисует отлично от
"Системного" вида?
2. Что такое в Вашем понимании "Системный" вид?
Автор: korobovmax
Дата сообщения: 09.01.2006 00:01
1. Границами. Цвета ведь легко заменить на "системные" (привязанные к системным). Но вот границы.. Они не такие, какие можно наблюдать в проводнике, например.

2. Вы видели заголовки столбцов в проводнике с отображением папок и файлов в виде "таблица". Вот такой вид понимается как системный/стандартный. "Вырисовывать" руками (граница сверху и слева - белая, справа и снизу - цвет 128,128,128, всё - в обрамлении прямоугольников с цветом 64,64,64) для каждого столбца возможно.

Однако, есть дополнительная проблема - необходимость рисовать руками (если мы выбираем этот путь) заголовки при включенных стиля Windows.

Не проще ли найти место, где рисуется градиент и чуть-чуть его подправить?
Собственно, я этим и занимаюсь (ищу место).

Спасибо.
Автор: golkanavt
Дата сообщения: 09.01.2006 10:38

Цитата:
Вы видели заголовки столбцов в проводнике с отображением папок и файлов в виде "таблица". Вот такой вид понимается как системный/стандартный.


ЕМНИП, этот вид настраиваемый а не "системный" и при желании может быть изменен на другой
Автор: Vitus_Bering
Дата сообщения: 09.01.2006 11:22
Alex47

Цитата:
Какой тип редактора в ячейке?

Не понял вопрос.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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