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

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

Автор: uranic2
Дата сообщения: 06.09.2006 08:23
JayDi

Цитата:
Дело в том, что эту фичу (вывод таблицы с несколькими разнородными ячейками) нужно реализовать с помощью Дерева -- включение Грида утяжеляет и без того большой exe'шник, поэтому все таблички сделаны с помощью одного контрола


М-да, такого извращения я еще не слашал: чтобы использовать TreeList вместо грида, ради уменьшения размера exe! Ну бедет твой exe на 1Мбайт больше, Ну что с того? 1Мбайт на диске сейчас стоит меньше 2 копеек - сравни со своим дневным заработком, стоит ли так напрягаться?

Хочеться красивого интерфейса- используй Devexpress, хочеться маленькго exe возьми например библиотеку KOL.

Добавлено:
Имеется TcxDateNavigator под названием dtNav
Пытаюсь прогрммно выделить период:

dtNav.SelectedDays.Clear;

DaySel := Trunc(FFinish) - Trunc(FStart);
for I := 0 to DaySel do // Iterate
dtNav.SelectedDays.Add(IncDay(FStart,I));

dtNav.Repaint; //это пробы всякие
dtNav.Refresh;

Ничего не выделяет (вернее выделяет только одну дату)! Но стоит провести над ним мышкой и в момент когда мышь теряет пределы навигатора, он нормально отрисовывает период. Пробовал принудительно dtNav.SetFocus тоже не помагает. Как быть?



Добавлено:
Вопрос снят, после вовряния справки

LayoutChanged;

Description
Use the LayoutChanged method to indicate that the cxDateNavigator control’s layout has been changed and it needs to be repainted.

Автор: JackOff
Дата сообщения: 06.09.2006 13:49
X11
vadson6666

Цитата:
Внимание, ответ: ставишь у поля в Пропертиес ЧекБокс, потом в пропериесах есть Валуе Чекед, Грейед, Анчекед, там выставляешь требуемые значения.


Еще удобно добавить чекбокс в ЕдитРепозиторий один раз настроить значение полей и юзать потом в разных местах как шаблон. Например, в основном гриде и отдельной форме редактирования/добавления записи.
Автор: X11
Дата сообщения: 06.09.2006 14:24

Цитата:
Еще удобно добавить чекбокс в ЕдитРепозиторий один раз настроить значение полей и юзать потом в разных местах как шаблон. Например, в основном гриде и отдельной форме редактирования/добавления записи.

а подробнее про "ЕдитРепозиторий" можно?
Автор: JackOff
Дата сообщения: 06.09.2006 23:35
Все очень просто и удобно кидаешь на форму cxEditRepository. В него добавляешь те едит контролы которые тебе нужны, например тот же CheckBox. Задаешь проперти прописываешь эвенты если надо. Потом в гриде задаешь филд или на форму кидаешь едитконтрол у них будет проперти RepositoryItem выбираешь уже готовый из списка и все уже настроено! Очень удобно, например, когда у тебя есть основная форма с гридом и форма отдельная для ввода данных.
Автор: golkanavt
Дата сообщения: 07.09.2006 15:19
Возникала ли у кого необходимость в сохранении настроек сортировки грида (порядок колонок в сортировке) с последующей возможностью загрузки их пользователем? Также интересна возможность в отображении этих настроек а-ля настройки фильтрации.
Автор: Alex47
Дата сообщения: 08.09.2006 10:19
golkanavt
Для сохранения настроек есть функции: View.StoreToIniFile / View.RestoreFromIniFile,
Store/RestoreToRegistry - смотри Help.

В Knowledge Base на офф. сайте есть статья "How to store View settings in a database".

У Bastian Bauwens на http://www.aixware.de/samples.html есть пример:
"How to save view settings to database and use them for printing"

По поводу отображения порядка сортировки колонок: может заинтересует подход, который был доведен до работающего кода с помощью техподдержки DevExpress в 2004г. В заголовках колонок рисуются номера для визуализации порядка сортировки.
Используется обработчик OnCustomDrawColumnHeader [more]

Hello all,

If you like to have numbers drawn into the header in which order the
cxGridDBTableView is sorted in case of multisorting this is an example how
to do it.
Many thanks to Plato,who is working hard for the great support of DevExpress
!

Thought I want to share it with you all, but if somebody can improve it, I
will be glad to hear it from you.
Have fun

Peter van den Acker.

type
TcxGridColumnHeaderViewInfoAccess = class(TcxGridColumnHeaderViewInfo);

procedure TForm1.cxGrid1DBTableView1CustomDrawColumnHeader(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
const
States: array[TcxGridCellState] of TcxButtonState = (cxbsNormal, cxbsHot,
cxbsPressed);
var
AFilterRect: TRect;
ASortRect: TRect;
ASortOrderRect, aTextRect: TRect;
I: Integer;
AFilterButtonState: TcxButtonState;
DC: HDC;
lf: LOGFONT;
hf: HFONT;
AText: string;
AAlignmentHorz : TAlignment;
begin
if (AViewInfo.Column.SortOrder = soNone) then
Exit;
with TcxGridColumnHeaderViewInfoAccess(AviewInfo) do
begin
for I := 0 to AreaViewInfoCount - 1 do
begin
if AreaViewInfos[I] is TcxGridColumnHeaderFilterButtonViewInfo then
begin
AFilterRect :=
TcxGridColumnHeaderFilterButtonViewInfo(AreaViewInfos[I]).Bounds;
if
TcxGridColumnHeaderFilterButtonViewInfo(AreaViewInfos[I]).DropDownWindow.Vis
ible then
AFilterButtonState := cxbsPressed
else
AFilterButtonState := cxbsNormal;
end;
if AreaViewInfos[I] is TcxGridColumnHeaderSortingMarkViewInfo then
begin

AText := IntToStr(Column.SortIndex + 1);
ASortRect := AreaViewInfos[I].Bounds;
ASortOrderRect := ASortRect;
ASortOrderRect.Top := ASortOrderRect.Top + Ord(IsPressed) - 1;
ASortOrderRect.Right := ASortRect.Left + 4; // - 1; {= original}
ASortOrderRect.Left := ASortOrderRect.Right -
ACanvas.TextWidth(AText);
ASortRect.Bottom := ASortRect.Bottom + Ord(IsPressed);
end;
end;
// {Original}
// Sender.Painter.LookAndFeelPainter.DrawHeader(ACanvas, Bounds,
aTextRect,
// Neighbors, Borders, States[State], taLeftJustify, vaCenter, False,
False, AViewInfo.Text, ACanvas.Font, clNone, Params.Color);

AAlignmentHorz := AViewInfo.AlignmentHorz;
aTextRect := Bounds;
aTextRect.Left := aTextRect.Left + 3;
if CanFilter and (AAlignmentHorz <> taLeftJustify) then
aTextRect.Right := aTextRect.Right - 40
else
aTextRect.Right := aTextRect.Right -30;

Sender.Painter.LookAndFeelPainter.DrawHeader(ACanvas, Bounds, aTextRect,
Neighbors, Borders, States[State], AAlignmentHorz, vaCenter, False,
False, AViewInfo.Text, ACanvas.Font, clNone, Params.Color);
Sender.Painter.LookAndFeelPainter.DrawSortingMark(ACanvas, ASortRect,
Column.SortOrder = soAscending);
ACanvas.Brush.Color := Params.Color;
DC := ACanvas.Handle;
GetObject(ACanvas.Font.Handle, SizeOf(lf), @lf);
lf.lfFaceName := 'Arial';
lf.lfHeight := -MulDiv(6, GetDeviceCaps(DC, LOGPIXELSY), 72);
hf := SelectObject(DC, CreateFontIndirect(lf));
try
ExtTextOut(DC, ASortOrderRect.Left, ASortOrderRect.Top, ETO_CLIPPED,
@Bounds, PChar(AText), Length(AText), nil);
finally
DeleteObject(SelectObject(DC, hf));
end;
Sender.Painter.LookAndFeelPainter.DrawFilterDropDownButton(ACanvas,
AFilterRect, AFilterButtonState, AViewInfo.Column.Filtered);
ADone := True;
end;
end;
[/more]
Автор: UrfinJuse
Дата сообщения: 08.09.2006 11:28
Доброе время суток всем!
У меня следующая проблема(возможно это даже и пионерство, но я уже упарился):
TcxGrid кинул на форму, заполнил данными, есть не только строки, но и другие типы отображения.
При установке курсора в какое-либо поле значение пропадает и на попытки внести данные ничего не происходит. В столбцах выставлено значение Options->Editing = true, Properties->ReadOnly = false. Данные заполняются программой вручную без привязки к рекордсету.
QuantumGrid4

Суть вопроса: как можно сделать возможность ручного редактирования данных?
Автор: golkanavt
Дата сообщения: 08.09.2006 11:41
Alex47

Цитата:
Для сохранения настроек есть функции: View.StoreToIniFile / View.RestoreFromIniFile,
Store/RestoreToRegistry - смотри Help.

В Knowledge Base на офф. сайте есть статья "How to store View settings in a database".

У Bastian Bauwens на http://www.aixware.de/samples.html есть пример:
"How to save view settings to database and use them for printing"

Я в курсе всего этого и давно этим пользуюсь. В моем вопросе имелась ввиду возможность сохранения/загрузки ТОЛЬКО настроек сортировки, ибо у юзеров есть несколько паттернов сортировок, которыми они периодически пользуются, и если случайно сбивается паттерн - по памяти восстановить нереально.


Цитата:
По поводу отображения порядка сортировки колонок: может заинтересует подход, который был доведен до работающего кода с помощью техподдержки DevExpress в 2004г. В заголовках колонок рисуются номера для визуализации порядка сортировки.

Спасибо за наводку
Автор: SkySi
Дата сообщения: 08.09.2006 12:55
Здравствуйте. Возникла следующая проблема. Есть грид с двумя уровнями и, соответственно, с двумя вложенными View (TableView, не DB!). Данные во view заносятся через Tv1->DataController->AppendRecord() и Tv1->DataController->SetValue(). Для первого (Master) вью все ок, а вот для detail - не могу понять, каким образом указать связь с записью из MasterView. Добавление во второй вью происходит таким же образом, как и в первый:

int RecNo2 = Tv2->DataController->AppendRecord();
Tv2->DataController->SetValue(RecNo2, 0, Tv1->DataController->GetValue(RecNo, 0));
Tv2->DataController->SetValue(RecNo2, 1, ProductId);
и т.д.

Но строки нет, как будто ее и не добавляли. Как решить эту проблему? Может быть я вообще не с той стороны подошла к задаче?

И еще, прочитала всю ветку, несколько раз натыкалась на упоминание о клонах и о том, что необходимо их использовать, но так и не поняла, в чем их смысл.


Автор: golkanavt
Дата сообщения: 08.09.2006 13:22
SkySi
Cвязь дочерних View с родительским View настраивается с помощью свойств KeyFieldNames, MasterKeyFieldNames, DetailKeyFieldNames.
Добро пожаловать, приятно видеть представительницу женского пола в этой ветке
Автор: Alex47
Дата сообщения: 08.09.2006 13:27
golkanavt

Предлагаю в шапку топа включить ссылки на:

http://www.dragonsoftru.com/?go=devx
http://www.freedevexpressaddons.com
http://www.aixware.de/samples.html
Автор: SkySi
Дата сообщения: 08.09.2006 13:31
golkanavt
Еще раз подчеркиваю, что View - не DB, соответственно данные свойства просто не доступны. Точно также, как не срабатывают обработчики событий DataController->OnAfterInsert и т.п. Во всяком случае, у меня происходит именно так в том случае, если View не имеет привязки к Dataset-у. Именно в этом и проблема, поскольку когда идет работа с Master-Details DataSets, то все понятно.
Автор: X11
Дата сообщения: 08.09.2006 13:36

Цитата:
Доброе время суток всем! У меня следующая проблема(возможно это даже и пионерство, но я уже упарился): TcxGrid кинул на форму, заполнил данными, есть не только строки, но и другие типы отображения. При установке курсора в какое-либо поле значение пропадает и на попытки внести данные ничего не происходит. В столбцах выставлено значение Options->Editing = true, Properties->ReadOnly = false. Данные заполняются программой вручную без привязки к рекордсету. QuantumGrid4   Суть вопроса: как можно сделать возможность ручного редактирования данных?


какя понял, ты используешь грид не для работы с БД, а как простой TStringGrid
я так использую

На закладке View нажимаю кнопку AddView->Table
затем
Grid1.DataController.append;
Grid1.Columns[1].EditValue := tlf2;
Grid1.Columns[4].EditValue := re1.lines[i];
Grid1.DataController.post;
Автор: jicoff
Дата сообщения: 08.09.2006 14:26
SkySi

По поводу клонов. Предположим у нас есть мастер вью и детейл вью. В дизайнере они показываются один под другим со смещением. Так вот, мастер вью - это реально отображаемый объект. А вот детейл вью, который мы видим в дизайнере - это паттерн, не визуальный объект и никогда им не может быть. Он нужен для создания по своему подобию визуальных клонов, т.е. когда первый раз раскрываем для мастер записи детейл вью (нажимаем на + или программно), создается вью (клон) по образу паттерна с такими же свойствами, который и появляется на экране. Поэтому запись данных в паттерн не имеет смылса делать раз он не визуальный, а записывать надо в соответствующий клон.
Автор: SkySi
Дата сообщения: 08.09.2006 14:34
jicoff
А как тогда определить, в какой именно клон необходимо добавлять записи?
Автор: jicoff
Дата сообщения: 08.09.2006 14:42
SkySi

Каждая мастер запись может быть преобразована к TcxGridMasterDataRow, а вот тут помогут свойства:
ActiveDetailGridView
ActiveDetailGridViewExists
ActiveDetailIndex
ActiveDetailLevel

Хочу обратить внимание! Раскрытие какого-либо детейла, не означает, что соответствующая мастер запись получает фокус.
Автор: golkanavt
Дата сообщения: 08.09.2006 14:43
Alex47

Цитата:
Предлагаю в шапку топа включить ссылки на:

Ok
Автор: UrfinJuse
Дата сообщения: 08.09.2006 14:52

Цитата:
какя понял, ты используешь грид не для работы с БД, а как простой TStringGrid

Да, я использую вручную заполненный TcxGrid. Заполняю я его следующим образом:

ColumnIndex := cxColumn1.Index;
cxColumn1.DataBinding.ValueTypeClass := TcxStringValueType;
for I := 0 to Length(Banks) - 1 do
begin
RecordIndex := cxGrdBanks.Views[0].DataController.InsertRecord(I);
cxGrdBanks.Views[0].DataController.Values[RecordIndex, ColumnIndex] := Banks.Name;
end;

Только он не редактируется из пользовательского интерфейса.
У Column1 следующие параметры поменял на такие:
Options->Editing = true
Properties->ReadOnly = false

При установке курсора в какое-либо поле значение пропадает и на попытки внести данные ничего не происходит.

Помогите плз, очень срочно нужно, а найти информацию по этому вопросу мне не удалось. Хотя параллельно я еще продолжаю поиск.
Автор: SkySi
Дата сообщения: 08.09.2006 14:54
jicoff
О, похоже теперь поняла, вроде бы все получилось! Огромное спасибо!
Автор: X11
Дата сообщения: 08.09.2006 14:59
UrfinJuse, давай мыло, я тебе пришлю свой небольшой, но реально рабочий проект.
выложилбы сюда, но наверпное не получиться

Добавлено:
UrfinJuse
а колонки в дизайнере созданы?
Автор: UrfinJuse
Дата сообщения: 08.09.2006 15:19
urfinjuse@nm.ru

Колонки созданы. Все данные нормально заполняются. Только редактировать их не могу
Автор: X11
Дата сообщения: 08.09.2006 16:09
ну давай мыло же, пришлю, глянешь как я сделал
Автор: UrfinJuse
Дата сообщения: 08.09.2006 16:46
Мыло я как раз написал. Только newmail опять на профилактике
Пиши на mooduck@mail.ru. Там вроде все в порядке.
Автор: cryptonium
Дата сообщения: 08.09.2006 18:45
Есть ли в QuantumGrid готовые методы для сохранения/загрузки параметров грида (расположения столбцов, фильтры и пр.) - в файл - для хранения инвидуальных пользовательских настроек? при беглом осмотре help'а не нашел.
Исторически так сложилось что используем InfoPower в качестве rich ctrls - давно очевидно что пора переходит на DevExpress (при том что InfoPower хорошо и устраивает, но уже далеко не так удачен как раньше), вот думаю начать его применять в новых проектах - и думаю над тем что придется дописывать..
Автор: jicoff
Дата сообщения: 08.09.2006 18:58
cryptonium

Есть компонент в DevExpress TcxPropertiesStore.
Автор: xokc
Дата сообщения: 08.09.2006 20:20
cryptonium
View.StoreToStream/View.RestoreFromStream
Автор: zeroandruxa
Дата сообщения: 08.09.2006 23:11
Добавлено:
Какой тип View используешь?
Я попробовал у меня все работает.
Автор: cryptonium
Дата сообщения: 09.09.2006 13:36
jicoff
xokc
спасибо
Автор: Alex47
Дата сообщения: 12.09.2006 08:11
Появились сообщения, что в 5.19 перестали работать рабочие проекты:
"I get a "Control '' has no parent window" in col.Properties.OnButtonClick
since I updated to 5.19."
А как у нас? Кто-нибудь уже пробовал?
Автор: JayDi
Дата сообщения: 12.09.2006 11:28
Можно ли каким-то образом сохранить изображение, построенное при помощи FlowChart'а, в графический файл?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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