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

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

Автор: BlackVetal
Дата сообщения: 11.06.2013 05:47
Vadim153
эвант onInitNewRow.
Запрет редактирования - смотри свойства (опции) колонки AllowEdit или ReadOnly.
Автор: Vadim153
Дата сообщения: 11.06.2013 08:31
onInitNewRow - это где?
Как внести программно в нужную ячейку этой строки какое-либо значение?
Автор: BlackVetal
Дата сообщения: 11.06.2013 11:04
Vadim153
Код на C#

Код:
private void GridView1_InitNewRow(object sender, InitNewRowEventArgs e)
{
GridView1.SetRowCellValue(e.RowHandle, column_Уборка_ДатаВремяУборки, _dateEdit_Подача.EditValue);
GridView1.SetRowCellValue(e.RowHandle, column_Уборка_ТипДокумента, 1);
}
Автор: Vadim153
Дата сообщения: 11.06.2013 11:13
У вьюхи не вижу вообще никакого еванта с NewRow
Автор: X11
Дата сообщения: 11.06.2013 11:18
Для редактирования и добавления там есть события. Неужели невидно в списке?
Автор: Vadim153
Дата сообщения: 11.06.2013 11:31

Цитата:
Для редактирования и добавления там есть события.

Их там много разных.
Нужно событие, при котором создается новая строка NewItemRow, но данные еще не сохранены в БД.
Событие onInitNewRow отсутствует.


Цитата:
SetRowCellValue

Тоже не вижу.
Автор: Darl
Дата сообщения: 11.06.2013 12:45
Vadim153

void __fastcall TMainForm::DetailTableFocusedRecordChanged(
TcxCustomGridTableView *Sender,
TcxCustomGridRecord *APrevFocusedRecord,
TcxCustomGridRecord *AFocusedRecord,
bool ANewItemRecordFocusingChanged)
{
if (ANewItemRecordFocusingChanged && !AFocusedRecord)
{
Sender->DataController->SetEditValue(1, "0", evsValue);
Sender->DataController->SetEditValue(2, 1, evsValue);
Sender->DataController->SetEditValue(3, "0", evsValue);
Sender->DataController->SetEditValue(4, "0%", evsValue);
}
}

Оно же
Автор: Vadim153
Дата сообщения: 11.06.2013 13:36
evsValue - это что?

Нашел, надо cxDataUtils подключить в uses

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

procedure TClientForm.cxGridDBClientSaleFocusedRecordChanged(
Sender: TcxCustomGridTableView; APrevFocusedRecord,
AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
begin
if ANewItemRecordFocusingChanged then
if AFocusedRecord = nil then
begin
Sender.DataController.SetEditValue(1,1,evsValue);
// ....

end;
end;
Автор: bolega
Дата сообщения: 15.06.2013 11:09
Подскажите как в cxGrid часть ячейки выделить жирным и со своим цветом, включая фон.
В ячейке изначально memo-text. Отображается с автоподбором высоты ячейки.
В TMS есть возможность отображать Html-текст, в девках как я понял, этой полезной фичи нет. Пришлось делать через richedit:
тип редактора ячейки заменил на richedit, источник данных - memtable, в нее, в поле blob раскрашенные строки помещаются из запроса, раскраска выполняется так: берется строка из запроса (tstringfield), запихивается в невидимый на форме TRichEdit, в нем раскрашивается, и из него уже перетекает в memtable. Все вообщем-то работает, и довольно быстро, но есть недостатки (видимо, баги девок):
- cxGrid часто неправильно рассчитывает высоту ячейки для richedit, в котором часть (и только часть!) текста - bold. В результате часто конец текста не виден в ячейке, как будто не помещается.
- если часть текста имеет фон, то все ячейки типа Richedit во во всех последующих колонках грида имеют текст полностью на таком же фоне, как будто забыли сброс фона сделать при их отрисовке. Эффект забавный: если например перемещать по таблице колонку, в которой впервые встречается цветной фон у части слов, то окраска возникает только у столбцов, следующих за данным. Никаких custom-draw не использую, т.е. в отрисовку не вмешиваюсь и баг явно не мой.
В итоге от нужного функционала пришлось отказаться и сделать так: если есть цветной текст, то жирным делать весь текст ячейки (избегаем глюка в расчете высоты ячейки), и отказаться от расцветки фона вообще.

Может кто сталкивался с такой задачей. Интересно какие есть еще решения.
Автор: X11
Дата сообщения: 15.06.2013 11:21
Так пробовали?
Автор: bolega
Дата сообщения: 15.06.2013 11:30
X11
За дурака меня держите? Все это я читал перед тем как писать.
Все имеющиеся примеры касаются раскраски _однострочного_ текста. Для richedit-подобного текста все намного сложнее, т.к. помимо самой раскраски нужно еще заставить таблицу правильно рассчитывать высоту ячейки (строки) с учетом шрифтов, жирности и т.д. И самое главное, чтобы правильно перенос слов/строк работал. А то у меня часто была ситуация, когда именно подсвеченное слово и не отображалось из-за неверного расчета высоты строки
Автор: X11
Дата сообщения: 15.06.2013 11:53
Я где-то видел или выкладывал пример с ричэдит

Добавлено:
Посмотрите эти примеры, может найдёте: http://ovrload.ru/f/7515_devexpress_-_%D0%BF%D0%BE%D0%B4%D1%81%D0%B2%D0%B5%D1%82%D0%BA%D0%B0_%D1%81%D0%BB%D0%BE%D0%B2_%D0%B2_%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D0%B0%D1%85.rar

И воздержитесь следующий раз от грубостей, здесь Вам не быдлочат.
Автор: bolega
Дата сообщения: 15.06.2013 12:11
X11

Цитата:
Я где-то видел или выкладывал пример с ричэдит


Спасибо. Это все примерно то же, что и я делал. Я только делал это не для подсветки поиска, а для постоянной подсветки определенных слов.
Но эти примеры не решают главных проблем, которые я описал: сxGrid неверно считает высоту строк при наличии Bold-стилей в шрифте и глюк с подсветкой фона. Кстати, для подсветки фона нет нативной поддержки ни в стандартном Richedit, ни в cxRichedit, пришлось использовать winapi.
Видимо, с глюками придется бороться самому. Интересно, где в devex идет расчет высоты строки? Нужно будет там поковыряться.


Цитата:
И воздержитесь следующий раз от грубостей

ОК, извините. Но меня самого сильно обижает, когда меня посылают на ... гугл. Не чайник я, уж там то предварительно бываю
Автор: X11
Дата сообщения: 15.06.2013 12:39
Может можно попробовать встроить в ячейку сторонний компонент?
http://www.sql.ru/forum/996417-24/html-v-komponentah?hl=html

Добавлено:
Второе решение - выводить в ячейках на канву картинки.
Автор: bolega
Дата сообщения: 15.06.2013 13:18
X11
Спасибо, буду думать.
Выводить - не проблема, код вывода (типа htmllabel) можно взять из TMS, но надо понять, как заставить грид давать правильную высоту строки к началу отрисовки, иначе часто подсвеченное не видно и весь смысл ее теряется.
Коммерческий Trichview слишком громоздкий для такой задачи, задачи редактировать у меня нет, только отображение
Автор: neznayka3
Дата сообщения: 15.06.2013 20:22
данные изменяются только в гриде визуально, в DataSet-е ничего не происходит. где подкрутить? настройки TcxGridDBTableView по умолчанию.

Код: var
i: Integer;
FDataController: TcxGridDBDataController;
begin
FDataController := dbtv1_.DataController;

for i := 0 to FDataController.FilteredRecordCount - 1 do
begin
// FDataController.Edit;

FDataController.Values[FDataController.FilteredRecordIndex[i], dbtv1_rate.Index] := -111;

// FDataController.Post();
end;
Автор: X11
Дата сообщения: 16.06.2013 10:05
FDataController.Values[]

Добавлено:

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


Цитата:
// FDataController.Post();


а зачем Post закомментировали?
Автор: neznayka3
Дата сообщения: 16.06.2013 10:13
X11

Цитата:
FDataController.Values[]
// FDataController.Post();

Post или нет, работать не будет. для изменений в датасете только SetEditValue
Автор: Vadim153
Дата сообщения: 16.06.2013 10:53
Пробую включить cxDBLookupComboBox.
DataSource и DataField не заполняю.
Указываю: ListSource, ListField, KeyField.
В результате получаю выпадающий список нужного поля.
Но, не отображается выбранное значение в самом окне cxDBLookupComboBox-а!
Что нужно сделать?
Автор: X11
Дата сообщения: 16.06.2013 11:09
исп. cxLookupCombobox
Автор: Vadim153
Дата сообщения: 16.06.2013 11:22

Цитата:
исп. cxLookupCombobox

Здесь выбирается, но при старте окно пустое. Что сделать?
Нашел: банальный ItemIndex, но курсор в наборе данных при выборе не перемещается, а хотелось бы.

А в чем подвох в cxDBLookupComboBox?
Автор: makz
Дата сообщения: 17.06.2013 07:03
Vadim153
Тогда просто DBcombobox. Lookup это не Locate.
Автор: Vadim153
Дата сообщения: 17.06.2013 07:51
Накопал следующее.
cxDBLookupComboBox и DBLookupComboBox работают по разному при подключении к набору данных.
cxDBLookupComboBox требует заполнения всех полей: ListSource, ListField, KeyField из одного НД, а также DataSource и DataField из другого.
У меня только одна не связанная таблица, поэтому этот компонент не подходит.
Для DBLookupComboBox достаточно заполнить ListSource, ListField, KeyField, и при старте указать:

Код: DBLookupComboBox1.KeyValue := DBLookupComboBox1.KeyValue := DBLookupComboBox1.ListSource.DataSet.FieldByName(DBLookupComboBox1.KeyField).Value;
Автор: exteris
Дата сообщения: 17.06.2013 08:47

Цитата:
Нашел: банальный ItemIndex, но курсор в наборе данных при выборе не перемещается, а хотелось бы.

Properties - ListOptions - SyncMode - True
Автор: X11
Дата сообщения: 17.06.2013 09:00

Цитата:
исп. cxLookupCombobox

Здесь выбирается, но при старте окно пустое. Что сделать?
Нашел: банальный ItemIndex, но курсор в наборе данных при выборе не перемещается, а хотелось бы.



Используй cxLookupCombobox.EditValue := ....
В свойстве EditValue живёт то, что живёт в KeyField.Value, т.е. ключевое значение и курсор списока будет позиционироваться, как нужно
Автор: makz
Дата сообщения: 17.06.2013 09:12
-
Автор: Vadim153
Дата сообщения: 17.06.2013 19:22

Цитата:
Properties - ListOptions - SyncMode - True

Да, работает, но только в одну сторону.
Если сделать выбор позиции в cxDBLookupComboBox, то курсор в НД переместится.
Если каким-либо другим компонентом меняем позицию курсора в НД, то это изменение не отобразится в cxDBLookupComboBox.
Автор: MagistrAnatol
Дата сообщения: 18.06.2013 16:09
подсобите со скинами для девок
Есть главная форма на ней ТилеКонтрол
скин гружу

dxSkinsUserSkinLoadFromFile(ExtractFilePath(Application->ExeName)+"\\MetroBlack.skinres");
dxSkinController1->SkinName="UserSkin";

ТилеКонтрол и фреймы меняют скин, а вот гриды на фреймах почему-то нет ??????
и как сделать чтобы скин менялся и для всех форм проекта(не фреймы)???
Автор: MagistrAnatol
Дата сообщения: 19.06.2013 08:59
С предыдущим вопросом разобрался.
Теперь другая проблема
Есть папка со скинами *.skinres - можно как-то на форме вывести пред-осмотр етих скинов , как ето реализовано для рибона. Нарисовать кучу картинок не прикольно????

Добавлено:
Надо реализовать dxSkinChooserGalleryItem только на форме
Автор: MagistrAnatol
Дата сообщения: 19.06.2013 11:50
или как вариант подсобите перевести код на билдер

Код: cmbVisualStyle.Properties.BeginUpdate;
AddSkinsFromFile(LocalPath + 'Skins.skinres');
cmbVisualStyle.Properties.EndUpdate;

procedure TfrmOptions.AddSkinsFromFile(const AFileName: string);
var
AStream: TStream;
begin
AStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone);
try
AddSkinsFromStream(AStream, AFileName, 0);
finally
AStream.Free;
end;
end;

function TfrmOptions.GetIsInternalSkin(ASkinDetails: TdxSkinDetails): Boolean;
begin
result := ASkinDetails.GroupName = '';
end;

procedure TfrmOptions.AddSkinsFromStream(AStream: TStream; const ASkinResName: string; ASkinResInstance: HINST);
var
AReader: TdxSkinBinaryReader;
I: integer;
begin

try
AReader := TdxSkinBinaryReader.Create(AStream);
try
for I := 0 to AReader.Count - 1 do
begin
if not GetIsInternalSkin(AReader.SkinDetails[I]) then
begin
AddSkin(AReader.SkinDetails[I]);
end;
end;
finally
AReader.Free;
end;
finally

end;
end;


procedure TfrmOptions.AddSkin(ASkinDetails: TdxSkinDetails);
var
ABitmap, ABitmapInDropDown: TBitmap;
FSkinIconSize, FSkinIconSizeInDropDown: TdxSkinIconSize;
begin
FSkinIconSize := sis16;
FSkinIconSizeInDropDown := sis48;
// ASkinDetails.GroupName
ABitmap := ASkinDetails.Icons[FSkinIconSize].GetAsBitmap;
ABitmapInDropDown := ASkinDetails.Icons[FSkinIconSizeInDropDown].GetAsBitmap;
try
imglSkinSmall.Add(ABitmap, nil);
imglSkinLarge.Add(ABitmapInDropDown, nil);
with cmbVisualStyle.Properties.Items.Add do
begin
Value := ASkinDetails.Name;
Description := ASkinDetails.DisplayName;
ImageIndex := Index + 1;
end;

finally
ABitmapInDropDown.Free;
ABitmap.Free;
end;
end;

object cmbVisualStyle: TcxImageComboBox
Left = 28
Top = 220
Properties.Images = imglSkinSmall
Properties.Items = <>
Properties.LargeImages = imglSkinLarge
TabOrder = 5
Width = 407
end

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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