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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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




 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть, третья часть

Полезные утилиты:
DxAutoInstaller v2.1.10 Простой и удобный тул для установки девок из исходников
https://mega.nz/#!aJRQzSqI!N7RgfcG1tfF45Z3OgcmBDHT_ZcWlIgJQ5eHHgQ9VupE

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:48 31-12-2009 | Исправлено: G787, 21:12 29-07-2018
tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GregoryMan
Аналогичные ф-ции должны быть под C#. Посмотрите на их CodeCentral и SupportCenter.

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 14:59 16-12-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по TcxPropertiesStore. Не пойму, что не так я делаю.
На форме есть несколько стандартных компонент типа TEdit, TSpinEdit, TCheckBox.
Свойство Active у cxPropertiesStore установлено в False;
 
В событии FormClose указываю, какие свойства нужно сохранить.
 

Код:
 
  with cxPropertiesStore1 do
  begin
//кроме указанных в коде свойств, ещё есть несколько свойст формы, которые указаны
//непосредственно в самом компоненте TcxPropertiesStore через PropertiesStoreEditor
 
    with TcxPropertiesStoreComponent(Components.Add) do
    begin
      Component := edAddress;
      Properties.Add('Text');
    end;
 
    with TcxPropertiesStoreComponent(Components.Add) do
    begin
      Component := edUser;
      Properties.Add('Text');
    end;
 
    with TcxPropertiesStoreComponent(Components.Add) do
    begin
      Component := spinInterval;
      Properties.Add('Value');
    end;
 
    with TcxPropertiesStoreComponent(Components.Add) do
    begin
      Component := chboxEnableSmsSend;
      Properties.Add('State');
    end;
 
    try
      StoreTo(True);
 
...
...
 
 

 
Файл создается в указанной папке. Есть все свойства, которые я указал сохранять.
 
 
 
В событии FormCreate

Код:
 
  cxPropertiesStore1.StorageName := sNastroyki + 'PluginSmsClub.ini';
  cxPropertiesStore1.RestoreFrom;
 

 
Проблема в том, что при показе формы все остаются данные те, которые были заданы компонентам в DesignTime. Т.е. cxPropertiesStore не восстанавливает значения свойств из файла.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:49 18-12-2011 | Исправлено: X11, 12:59 18-12-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть TdxBar. Подскажите, как пройтись в цикле по всем элементам TdxBarSubItem?
Нужно найти определённый dxBarSubItem и добавить к нему в рантайме другой dxBarSubItem.
 
Есть пример
 

Код:
      for im := 0 to MainMenu.ItemLinks.Count -1 do
        begin
          ItemLink := MainMenu.ItemLinks[im];
          ShowMessage(MainMenu.ItemLinks[im].Caption);
 

 
Но ShowMessage мне говорит о том, что цикл проходи по несколько раз по одним и тем же элементам.
 
Ещё проблема в том, что есть в меню пустой dxBarSubItem и к нему прицепиться не получается, т.к. у него нет ни единого ItemLinks.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 15:18 20-12-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Пытаюсь динамически создавать band в BandedTableView с названием ветки дерева, которую перетаскиваю (drag and drop) с dbTreeView. Не могу сообразить, как это можно сделать. Цепляю ветку мышью, перетаскиваю в область вьюхи, создаю band, он "втыкается" во вьюху, но требуется, чтобы band отображался под курсором мыши так, как это обычно происходит при смене позиции band'а в пределах вьюхи (т.е. перетаскиванием предварительно созданного band'а в новую позицию) и, соответственно, возможностью его вставки в нужную позицию.
Подскажите, как можно реализовать.
 
Добавлено:
X11
 
Если правильно понял, то
 
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
      barItem: TdxBarItem;
    newSubItem: TdxBarSubItem;
begin
  for i := 0 to dxBarManager1.ItemCount - 1 do
  begin
    barItem := dxBarManager1.Items[i];
    if barItem is TdxBarSubItem then
      if barItem.Tag = 1 then
      begin
        newSubItem := dxBarManager1.AddSubItem;
        newSubItem.Caption := 'Новое подменю';
        TdxBarSubItem(barItem).ItemLinks.Add(newSubItem);
      end;
  end;
end;

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 16:38 20-12-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
 
Не пользовался ранее cxPropertiesStore (DesignTime), помучал вчера, вроде получилось что требуется.
Сохраняю все свойства формы, кроме Left  (его сохраняю в RunTime).
 
procedure TForm1.FormCreate(Sender: TObject);
var PSComponent: TcxPropertiesStoreComponent;
begin
  with cxPropertiesStore1 do
  begin
    PSComponent := TcxPropertiesStoreComponent(Components.Add);
    PSComponent.Component := Form1;
    PSComponent.Properties.Add('Left');
    RestoreFrom;
  end;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
var PSComponent: TcxPropertiesStoreComponent;
begin
  with cxPropertiesStore1 do
  begin
    PSComponent := TcxPropertiesStoreComponent(Components.Add);
    PSComponent.Component := Form1;
    PSComponent.Properties.Add('Left');
    StoreTo(true);
  end;
end;
 

Цитата:
Проблема в том, что при показе формы все остаются данные те, которые были заданы компонентам в DesignTime. Т.е. cxPropertiesStore не восстанавливает значения свойств из файла.

 
Тоже сначала не мог понять. При восстановлении ваших свойств необходимо сначала добавить их в cxPropertiesStore так же, как и при сохранении.

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 05:39 21-12-2011
X11



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

Цитата:
 При восстановлении ваших свойств необходимо сначала добавить их в cxPropertiesStore так же, как и при сохранении.

 
Спасибо, я подозревал это. Но думал, что cxPropertiesStore немного умнее и прочитает эти данные из файла.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:27 21-12-2011
dimm78

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

Цитата:
X11


Цитата:
Есть TdxBar. Подскажите, как пройтись в цикле по всем элементам TdxBarSubItem?
Нужно найти определённый dxBarSubItem и добавить к нему в рантайме другой dxBarSubItem.
 
Есть пример
 
 
Код:
      for im := 0 to MainMenu.ItemLinks.Count -1 do
        begin
          ItemLink := MainMenu.ItemLinks[im];
          ShowMessage(MainMenu.ItemLinks[im].Caption);
 
 
 
Но ShowMessage мне говорит о том, что цикл проходи по несколько раз по одним и тем же элементам.
 
Ещё проблема в том, что есть в меню пустой dxBarSubItem и к нему прицепиться не получается, т.к. у него нет ни единого ItemLinks.
 

 
Не совсем понял что тебе нужно, но может быть это поможет:
 
var i, j : Integer;
    AItem, ANewItem : TdxBarItem;
begin
  for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do
  begin
    AItem := dxBarManager1Bar1.ItemLinks[i].Item;
 
    if AItem is TdxBarSubItem then
    begin
      for j := 1 to 10 do
      begin
        ANewItem := TdxBarButton.Create(Self);
        ANewItem.Caption := 'SubMenuItem' + IntToStr(j);
        (AItem as TdxBarSubItem).ItemLinks.Add(ANewItem);
      end;
    end;
  end;
end;
 
Простенькая процедура бежит по  TdxBarSubItem главного меню и независимо от наличия у них вложенных элементов добавляет по 10 пунктов главного меню. Вместо TdxBarButton спокойно можно добавить TdxBarSubItem.

Всего записей: 163 | Зарегистр. 07-12-2005 | Отправлено: 11:28 21-12-2011 | Исправлено: dimm78, 11:31 21-12-2011
andreybear

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

Цитата:
var i, j : Integer;
    AItem, ANewItem : TdxBarItem;
begin
  for i := 0 to dx
Цитата:
for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do  

BarManager1Bar1.ItemLinks.Count - 1 do
  begin
    AItem := dxBarManager1Bar1.ItemLinks[i].Item;
 
    if AItem is TdxBarSubItem then
    begin
      for j := 1 to 10 do
      begin
        ANewItem := TdxBarButton.Create(Self);
        ANewItem.Caption := 'SubMenuItem' + IntToStr(j);
        (AItem as TdxBarSubItem).ItemLinks.Add(ANewItem);
      end;
    end;
  end;
end;  

 
Если необходимо пройтись по всем dxBarSubItem, то, насколько я помню, этот пример не подойдет. Например, есть пункты меню "File", "Edit", "Search". В меню "File" подменю "New". При  

Цитата:
for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do  

будет осуществлен проход по "File", "Edit", "Search", но "New" не будет достигнуто, т.к. его нет в dxBarManager1Bar1.ItemLinks.
Поправьте, если ошибаюсь.

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 12:12 21-12-2011
dimm78

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

Цитата:
Если необходимо пройтись по всем dxBarSubItem, то, насколько я помню, этот пример не подойдет. Например, есть пункты меню "File", "Edit", "Search". В меню "File" подменю "New". При  
 
Цитата:
for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do  
 
будет осуществлен проход по "File", "Edit", "Search", но "New" не будет достигнуто, т.к. его нет в dxBarManager1Bar1.ItemLinks.
Поправьте, если ошибаюсь.

 
Да. Вы правы. Но я ведь и не предлагаю готового решения))) А всего лишь пример))) У себя в подобных ситуациях, когда меню строится динамически в зависимости от прав пользователя, использую рекурсивные процедуры, которые перебирают не только верхний уровень но и все уровни вложенности.

Всего записей: 163 | Зарегистр. 07-12-2005 | Отправлено: 13:27 21-12-2011
andreybear

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

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 13:44 21-12-2011
IronMan182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А не подскажите как сделать  а-ля  phpAdmin
Удалить , Добавить ,  Изменить  ,  рядом с каждой записью ???
 
 

Всего записей: 479 | Зарегистр. 14-07-2011 | Отправлено: 17:23 21-12-2011 | Исправлено: IronMan182, 17:23 21-12-2011
dimm78

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

Цитата:
А не подскажите как сделать  а-ля  phpAdmin
Удалить , Добавить ,  Изменить  ,  рядом с каждой записью ???

 
если имеется в виду TcxGridView, то как вариант можно создать колонку с Properies TcxButtonEdit, настроить количество и отображение кнопок (Options.ShowEditButtons := isebAlways; Properties.ViewStyle := vsButtonsOnly), ну и соответственно обработчики событий

Всего записей: 163 | Зарегистр. 07-12-2005 | Отправлено: 18:22 21-12-2011 | Исправлено: dimm78, 18:36 21-12-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как узнать координаты произвольного band'a в BandedTableView?

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 08:17 22-12-2011
marser

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

Цитата:
Подскажите, как узнать координаты произвольного band'a в BandedTableView?


Код:
cxGrid1BandedTableView1.ViewInfo.HeaderViewInfo.BandsViewInfo.Items[I].Bounds


Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 10:29 22-12-2011 | Исправлено: marser, 10:31 22-12-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
marser
 
Спасибо за подсказку - координаты получил.
Однако все равно не могу сообразить, как инициировать перетаскивание band'a с помощью кода и вообще, какое событие происходит при "перетаскивании". Несколько дней уже убил на это.

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 04:52 23-12-2011
marser

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

Цитата:
как инициировать перетаскивание band'a с помощью кода


Код:
with cxGrid1BandedTableView1.Bands[I].Position do
begin
   BandIndex := ???;
   ColIndex := ???;
end

В DesignTime потаскайте мышкой Band и посмотрите в инспекторе объектов как изменяется BandIndex и ColIndex.  

Цитата:
какое событие происходит при "перетаскивании"

cxGrid1BandedTableView1.OnBandPosChanged

Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 07:49 23-12-2011 | Исправлено: marser, 08:08 23-12-2011
andreybear

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

Цитата:
cxGrid1BandedTableView1.OnBandPosChanged  

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

Цитата:
with cxGrid1BandedTableView1.Bands[I].Position do
begin
   BandIndex := ???;
   ColIndex := ???;
end  

 
Во время перестакивания ничего не изменяется. Мне как раз и нужно, чтоб при
procedure TForm1.ViewBandDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if State = dsDragEnter then
  // создается бэнд
  // в позиции мыши инициируется его перетаскивание (будто пользователь захватил мышью существующий бэнд и начал его перемещать не отпуская левой кнопки)
 
Даже не представляю, как это можно сделать (начать перетаскивание). Такое впечатление, что при перетаскивании band'a не возникает события ViewBand.onDragOver.

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 08:24 23-12-2011
marser

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

Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 09:59 23-12-2011 | Исправлено: marser, 10:46 23-12-2011
andreybear

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

Цитата:
cxGrid1BandedTableView1.Controller.StartDragAndDrop(P: TPoint)  

 
Пробовал - не работает.
 

Цитата:
Только зачем? Зная X, Y и зная Bounds уже существующих бэндов, можно вычислить BandIndex и ColIndex  для нового бэнда.  

 
Пользователь сам решает, куда поместить бэнд (создается сложная шапка таблицы из существующего набора объектов, их показателей и единиц измерения).
 

Цитата:
В StartDragAndDrop(P: TPoint) точка Р должна принадлежать созданному бэнду, а не X, У из события.  

 
Насколько я понял, перетаскиваются не сами бэнды (band), а их заголовки (bandheader), поэтому координаты получаю так:

Код:
    band := View.Bands.Add;
    band.Index := 0;
    headerViewInfo := View.ViewInfo.HeaderViewInfo.BandsViewInfo.Items[band.Index].HeaderViewInfo;  
    rect := headerViewInfo.Bounds;
    p.X := rect.Right - Round((rect.Right - rect.Left)/2);
    p.Y := rect.Bottom - Round((rect.Bottom - rect.Top)/2);

По крайней мере

Код:
    headerViewInfo.State := gcsPressed;

приводит к "зажатию" добавленного бэнда.
Мозг уже себе сломал.

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 10:51 23-12-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь знает, какое событие генерируется при перетаскивании band'a (в начале этого процесса)?

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 08:03 26-12-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru