Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress 2

Модерирует : ShIvADeSt

ShIvADeSt (07-02-2009 14:53): Продолжаем тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123#1
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, начало тут
 

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:16 29-01-2007 | Исправлено: VitaliM, 15:47 24-11-2008
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по FlexGraphics library v1.5
Может кто подскажет?
Нужно при двойном клике на элементе (бусть будет BOX) он изменил цвет. В принципе любого элемента (текст, линия, надпись ...).
Делаю так
Pn1->MouseControl->Props[Brush->Color] = clRed;
получаю ошибку
[C++ Error] main.cpp(1244): E2285 Could not find a match for 'TPropList::operator =(const TColor)'
 
И хелпа никакого нет.
 
СПАСИБО!

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 13:19 29-10-2007
zver

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по cxGrid-у:
Есть колонка cxMemo. Как до неё достучаться? Получилось достучаться только до свойств:

Код:
 TableView1ot_rem->PropertiesClass=__classid(TcxMemoProperties);
  TcxMemoProperties *properties = (TcxMemoProperties *)TableView1ot_rem->Properties;
  ShowMessage(properties->MaxLength);
 

 
А небоходимо TcxMemo->Text.
Кто знает как?

Всего записей: 66 | Зарегистр. 07-06-2004 | Отправлено: 14:24 01-11-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zver
Попробуй так (синтаксис Delphi):
TableView1.DataController.Values[ri, TableView1ot_rem.Index]
где ri - record index

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 15:03 01-11-2007
zver

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, это понятно. Но на момент редактирования ячейки данных в DataController-e ещё нет, а динамически расширять контрол Memo надо. Вот в этом то и косяк.
 
Добавлено:
Или вопрос подругому:  
Как изменить высоту отдельной строки в cxGrid-e?
 
Добавлено:
Вариант OnGetCellHeight тоже вроде не подходит. Надо менять ширину именно текущей ячейки в произвольный момент времени.

Всего записей: 66 | Зарегистр. 07-06-2004 | Отправлено: 15:32 01-11-2007
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Как изменить высоту отдельной строки в cxGrid-e?  

CellAutoHeight
 
Добавлено:
но при печати всё равно текст в одну строку будет

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 17:51 01-11-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zver
Правильно сформулированный вопрос содержит в себе половину ответа.
У тебя сформулировано 3 разных вопроса:

Цитата:
на момент редактирования ячейки данных в DataController-e ещё нет, а динамически расширять контрол Memo надо
Встречный вопрос: Чего нет в датаконтроле  на момент редактирования? Не сразу понял вопрос, наверное, пропущена запятая после слова "ячейки". Посмотри свойство EditValue. Может быть поможет InplaceEditor?

Цитата:
Как изменить высоту отдельной строки в cxGrid-e?
ответил X11

Цитата:
Надо менять ширину именно текущей ячейки в произвольный момент времени
Можно поменять только ширину колонки. У колонки есть свойство Width, его значение и меняй. ("В произвольный момент времени" - слишком широко сформулировано. Некоторые вещи в разные моменты времени можно поменять разными способами).
 
 

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 10:04 02-11-2007 | Исправлено: Dronton2, 10:07 02-11-2007
zver

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Надо менять ширину

Извиняюсь имел ввиду высоту.
 

Цитата:
Может быть поможет InplaceEditor?

Где находится это волшебное свойство?
 

Всего записей: 66 | Зарегистр. 07-06-2004 | Отправлено: 10:40 02-11-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zver
В verticalGrid и TreeList это свойство называется InplaceEditor.
В cxGrid это делается с помощью Controller.EditingController.Edit, например, так:

Код:
  with TcxCustomGridTableView(Grid.FocusedView).Controller.EditingController do
    if IsEditing then
      if Edit is TcxCustomDropDownEdit then
        TcxCustomDropDownEdit(Edit).DroppedDown := True;
 

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 13:41 02-11-2007
IgorXI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите, никак не пойму как  на TdxBar поставить сепаратор?

Всего записей: 126 | Зарегистр. 16-09-2003 | Отправлено: 11:39 05-11-2007
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
IgorXI, правой кнопкой по кнопке, перед которой хочешь сеператор поставить. В контекстном меню пункт "Add Group бла-бла-бла" (точно название не помню)

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 15:35 05-11-2007
shulum



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IgorXI - да просто кнопочку мышкой вниз немного ...

Всего записей: 121 | Зарегистр. 11-06-2006 | Отправлено: 10:26 06-11-2007
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hi!
Скажите, что не так делаю. Компонент TdxMemData. Заношу значение по полям. В гриде все отображается. Пишу фильтр
 
tmp->ProgrammedFilter = true;
tmp->Filter   = "NOM_S=1 AND NOM_U=1";
tmp->Filtered = true;
tmp->First();
 
И ничего нет. Что я не так делаю?
 
СПАСИБО!

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 13:11 06-11-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clear2121
Насколько я помню, если используешь ProgrammedFilter, то нужно использовать FilterList, причём, всю работу делать вручную: очистка, заполнение и т.д.
Могу привести кусок кода на Delphi:

Код:
  var fC, fTC, fL, fA: TdxMemField;
      i, beg, fin: integer;
begin
    with mdControlVal do
    begin
      DisableControls;
      FilterList.Clear;
  //    ProgrammedFilter := False;
  //    Filtered := False;
      ProgrammedFilter := True;
 
      iAttrID := aRecord.Values[tvItemsAttrID.Index];
      fC  := Data.IndexOf(FieldByName('CHILDS'));
      fTC := Data.IndexOf(FieldByName('TRUE_CHILDS'));
      fL  := Data.IndexOf(FieldByName('LEVEL'));
 
      fA  := attrMap.Data.IndexOf(attrMap.FieldByName('ATTR'));
      for i := 0 to attrMap.Data.RecordCount - 1 do
        if PInteger(fA.Values[i])^ = iAttrID then
          begin
          beg := PInteger(attrMap.Data.IndexOf(attrMap.FieldByName('BEG')).Values[i])^;
          fin := PInteger(attrMap.Data.IndexOf(attrMap.FieldByName('FIN')).Values[i])^;
          break;
          end;
 
      for i := beg to fin do //Data.RecordCount - 1 do
        if (PDouble(fL.Values[i])^ = 1) and
           (PDouble(fC.Values[i])^ = PDouble(fTC.Values[i])^)
          then FilterList.Add(Pointer(i + 1));
      Filtered := True;
      EnableControls;
    end;
end;
 

mdControlVal и attrMap - две таблицы типа TdxMemData. Фильтр создаётся для mdControlVal.
Написано было давно. В приведённом примере много мусора, я не стал упрощать для примера код - дольше было бы объяснять, как заполнять список.
Смысл в том, что FilterList содержит список отфильтрованных записей.
Преимущества:
- работает быстрее, чем обычное фильтрование
- может потребоваться при извращённом фильтровании, когда обычный фильтр создать сложно.
Когда я этот код писал, пришлось покопаться в исходниках для TdxMemData - они несложные.
 
Добавлено:
Да, ещё:
aRecord - запись в каком-то другом TableView.

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 17:00 06-11-2007 | Исправлено: Dronton2, 17:10 06-11-2007
IgorXI



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
korobovmax
shulum
Спасибо, действительно просто.

Всего записей: 126 | Зарегистр. 16-09-2003 | Отправлено: 10:26 07-11-2007
shulum



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А не подскажете - кто чем пользуется для создания/изменения cxGrid в готовом проекте (runtime) ?

Всего записей: 121 | Зарегистр. 11-06-2006 | Отправлено: 12:23 07-11-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shulum
Всё зависит от конкретной задачи.
У меня, например, есть реестр отчётов, хранящийся в таблице БД.
Если упростить, то есть два поля:
1. название отчёта - строка
2. BLOB, в котором хранится TableView
Юзер выбирает отчёт, нажимает на кнопку, и из блоба в грид выгружается tableView.

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 16:32 07-11-2007
shulum



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dronton2
не ... ну с этим все понятно (в смысле как хранить), но я так понимаю, что к редактированию (созданию) того что хранить каждый подходит своим путем, т.е. типовое решение отсутствует.
Сам бьюсь в этом направлении и навеялась мысль, а вдруг уже есть решение и я занимаюсь изобретением велосипеда ... больно там всего много - желание охватить весь спектр возможностей с неумолимой силой преследует меня ...
Просмотрел аддоны, но они стары как мир

Всего записей: 121 | Зарегистр. 11-06-2006 | Отправлено: 17:03 07-11-2007
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет ли примера у кого перетаскивания данных из одного cxGrid`а в другой. Буду весьма признателен.
 
Добавлено:
2 таблицы: главная и детальная
 
нужно из одной записи главной таблицы скопировать детальные записи в другую запись главной таблицы

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 21:49 07-11-2007
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shulum
Редактирую в DesignTime, затем, нужный кусок из .dxf сохраняю в отдельном файле, запускаю самописную утилиту, которая этот файл сохраняет в блоб-поле БД. Другой автоматизации не имею.
Если подумать, то кажется странным, что нет какой-то коммерческой утилиты на эту тему. На мой взгляд, она пользовалась бы спросом.
 
X11
Я для таких целей вызываю процедуру сервера БД и передаю ей ID родительских записей - в случае изменения параметров таблицы не нужно менять клиентское приложение.
Копирование средствами девэкспресс: 2 цикла, внешний по записям, внутренний - по колонкам. Какие проблемы? Быстрее написать самостоятельно, чем ждать ответа на форуме.

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 10:18 08-11-2007
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да, я вызываю процедуру сервера, но хотелось знать, на какую мастер-запись пользователь бросил выделенные дочерние записи
 
 

Код:
 
procedure TForm1.cxGrid2DBTableView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ((Button = mbLeft) and (ssAlt in Shift)) or (ssRight in Shift) then
    if (TcxGridSite(Sender).ViewInfo.GetHitTest(X, Y).HitTestCode in [htCell, htRecord])
      then TcxGridSite(Sender).BeginDrag(False);
end;
 
procedure TForm1.cxGrid2DBTableView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TcxDragControlObject;
end;
 
procedure TForm1.cxGrid2DBTableView1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  self.Caption := TcxGridRecordCellHitTest(TcxGridSite(Sender).ViewInfo.GetHitTest(X, Y)).GridRecord.Values[cxGrid1DBTableView1FULLNAME.Index];
end;
 


----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 20:33 08-11-2007 | Исправлено: X11, 20:36 08-11-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress 2
ShIvADeSt (07-02-2009 14:53): Продолжаем тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=10123#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru