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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
mdid

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

Код:
AText:=IntToStr(ARecord.Index + 1);

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 15:02 20-02-2012
sam291074



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста.
 
На главной форме есть cxGrid. Форма порождает поток с вычислениями. Результаты поступают в таблицу вызовом из потока функции, обернутой при вызове в Synchronize потока:

Код:
 
void TMainForm::CreateRecordProcessStat(double U, double I, double T, const Seidman& iS) {
    cxGridProcessStatTableView1->DataController->RecordCount++;
    vector<int> Ind;
    Ind.push_back(cxGridProcessStatTableView1->DataController->RecordCount-1);
    for (int i = 0; i < cxGridProcessStatTableView1->ColumnCount; i++) {
         Ind.push_back(cxGridProcessStatTableView1->Columns[i]->Index);
    }
 
    TcxCustomDataController *dc = cxGridProcessStatTableView1->DataController;
    dc->BeginUpdate();
    try {
        dc->Values[Ind[0]][Ind[1]] = CurrToStrF(U,ffGeneral,5);
        dc->Values[Ind[0]][Ind[2]] = FloatToStrF(I,ffExponent,4,2);
        dc->Values[Ind[0]][Ind[3]] = CurrToStrF(iS.it_ext, ffGeneral, 5);
        dc->Values[Ind[0]][Ind[4]] = FloatToStrF(iS.err_int,ffExponent,4,2);
        dc->Values[Ind[0]][Ind[5]] = FloatToStrF(iS.err_ext_p,ffExponent,4,2);
        dc->Values[Ind[0]][Ind[6]] = FloatToStrF(iS.err_ext_n,ffExponent,4,2);
        dc->Values[Ind[0]][Ind[7]] = FloatToStrF(T,ffFixed,4,2);
    }
    __finally {
        if ( cxCheckBoxScrollTable->Checked )  dc->GotoLast();
        dc->EndUpdate();
    }
}

На "медленной" машине все работает нормально, на быстрой - перестает через некоторое время отрисовываться (серый прямоугольник на всей таблице). Спасает только перезапуск программы. Это проблема синхронизации потоков, или ошибки в приведенном коде? Под синхронизацией еще диаграмма TeeChart вместе с этой таблицей - так с ней проблем нет. Отрисовка чарта идет всегда.

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 20:25 20-02-2012
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sam291074
приведите весь код, где идет синхронизация....
 
еще замечания:  
cxGridProcessStatTableView1->DataController->RecordCount++;  
внести также в  dc->BeginUpdate();  
 
ну и как вариант отрисовывать не сразу, а скажем только каждое 5(10, 100) поступление данных от потока
 
 

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 09:32 21-02-2012 | Исправлено: salexn1, 09:33 21-02-2012
sam291074



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

Цитата:
приведите весь код, где идет синхронизация....

 

Код:
указатель на поток TStatThread объявлен в классе MainForm
 
void __fastcall TStatThread::Execute() {
...
 
     void __fastcall TStatThread::RunCalc() {
           ...
           Synchronize(
               void __fastcall TStatThread::TableUpdate() {
                       void TMainForm::CreateRecordProcessStat (...){
                       }
               }        
           );
           ...
     }
...
}

 
Это схема вызовов. Надеюсь поняно нарисовал.  
 

Цитата:
cxGridProcessStatTableView1->DataController->RecordCount++;  
 внести также в  dc->BeginUpdate();  

 
Не помогло.
 

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 19:40 21-02-2012
mdid

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

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 20:19 21-02-2012
sam291074



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

Цитата:
попробуйте форме репеинт делать

 
А вот и нет, это я пробовал в первую очередь - и тоже мимо кассы
Почитал про потоки, нашел в хэлпах, что синхронизация не может осуществляться с основным потоком приложения. Может в этом все дело.  
 
Буду пробовать создавать еще один поток специально для отрисовки грида и синхронизировать уже их.

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 20:59 21-02-2012
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кстати а зачем вам еще один поток?выполняйте вычисления в главном+processmessages+repaint

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 10:00 22-02-2012
fortezza

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, подскажите, есть ли возможность в выпадающем меню фильтрации заголовка столбца сделать собственное поле и повесить на него обработчик? Или возможно есть какие-то настройки для этого?
 
 
Нужно чтобы при клики выделялись все поля списка, а пользователь снимал галочку с ненужных.
 
 
 
Добавлено:
Добрый день, подскажите, есть ли возможность в выпадающем меню фильтрации заголовка столбца сделать собственное поле и повесить на него обработчик? Или возможно есть какие-то настройки для этого?
 

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

Всего записей: 98 | Зарегистр. 20-10-2009 | Отправлено: 10:36 22-02-2012
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fortezza
cxGrid1DBTableView1data - поле с датами
в событие колонки в которую надо добавить свое значение фильтра OnGetFilterValues
добавить
 
Код:
AValueList.Add(fviUser,'bigger','больше 03.11.2012',false);

//в событие этой же колонки OnUserFiltering

Код:
 
  if AValue='bigger' then
    cxGrid1DBTableView1.DataController.Filter.
                AddItem(nil,cxGrid1DBTableView1data,foGreater,'03.11.2012','');
 

как то так...думаю смысл понятен

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 11:12 22-02-2012 | Исправлено: mdid, 11:16 22-02-2012
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sam291074
Сделайте перерисовку грида только для каждого 10 вычисления...
Ну или для каждого 100... Тут с цифрами поиграть и посмотреть, что происходит.

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 13:23 22-02-2012
Dima335

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

Цитата:
Можно ли у SpreadSheet закрепить крайнюю левую колонку, чтобы она отображалась всегда при перемещении по горизонтали? Т.е. как со свойством fixed kind у колонки грида

Цитата:
 
Dima335, можно.  
Здесь есть пример.
 

 

Получилось, но размер 1 колонки у меня отличается от всех остальных. Это тогда на лету size колонки менять при перемещении scrollbar? А предыдущий size хранить во временной переменной? А если будет резкое перемещение, то не собьется ничего?

Всего записей: 27 | Зарегистр. 30-08-2011 | Отправлено: 00:02 23-02-2012 | Исправлено: Dima335, 00:06 23-02-2012
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть dxBarManager и несколько dxBar. На dxBar лежат разные компоненты ввода для даты, для текста, комбобоксы и т.д.
 
Как сделать цикл по всем этим элементам ввода типа cxBarEditItem, чтобы присвоить значению EditValue значение NULL.
По нажатию на кнопку нужно очистить разом все введенные и выбранные значения.
 
Добавлено:
Всё оказалось весьма просто

Код:
Var
  i: integer;
begin
  for I := 0 to dxBarManager1.ItemCount do
    if dxBarManager1.Items[i] is TcxBarEditItem then
      TcxBarEditItem(dxBarManager1.Items[i]).EditValue := null;


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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 13:00 23-02-2012
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
копните в сторону ItemLinks
упс..опоздал..я обращался через линки...зато узнал что можно и напрямую

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 13:07 23-02-2012 | Исправлено: mdid, 13:08 23-02-2012
fortezza

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

Всего записей: 98 | Зарегистр. 20-10-2009 | Отправлено: 08:29 24-02-2012
Man_Without_Face



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В cxGrid вывожу данные в связке dxMemData - DataSource -cxGrid. В основном потоке все нормально. Но, как только пытаюсь вывести через критическую секцию - AV. Самое интересное - в отладчике все отрабатывает. Так же если грид не видно (в cxPageControl  переключиться на др. вкладку). Кто с таким сталкивался и как это лечиться?

Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:04 24-02-2012
marser

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Man_Without_Face
Если DataSet заполняется в другом потоке, то DataSet нужно отключать от DataSource

Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 22:35 24-02-2012
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем.
Есть на панели TcxBarEditItem в виде комбобокса.
Как сохранить и восстановить Properties).Items с помощью TcxPropertiesStore?
TcxComboBoxProperties(comboProxy.Properties).Items? Не получается.
 
Сама процедура выглядит так:

Код:
procedure PropertiesStore(DoStore: boolean; form: TForm; AComponent: TComponent; const AProps: TStrArray);
Var
 i:integer;
 cxPropertiesStore1: TcxPropertiesStore;
begin
  cxPropertiesStore1 := TcxPropertiesStore.Create(Application);
  try
    cxPropertiesStore1.StorageName := sPathOptions + form.name + '_' + AComponent.Name + '.ini';
    cxPropertiesStore1.StorageType := stIniFile;
 
    with TcxPropertiesStoreComponent(cxPropertiesStore1.Components.Add) do
      begin
        Component := AComponent;
        for I := 0 to Length(AProps) - 1 do
          Properties.Add(AProps[i]);
      end;//with
 
   if DoStore then
     cxPropertiesStore1.StoreTo(true)
   else
     cxPropertiesStore1.RestoreFrom;
 
  finally
    FreeAndNil(cxPropertiesStore1);
  end;
end;
 
 
//сохраняем
PropertiesStore(True, fmMain, comboProxy, VarArrayOf(['TcxComboBoxProperties(comboProxy.Properties).Items']));
 

 
Добавлено:
На панели лежит TcxBarEditItem в виде комбобокса.
Хочу реализовать так, что когда нажимаешь Enter, то введенное значение попадает в список Items. Но получается, так, что по нажатию на Enter фокус перемещается вообще на cxGrid, который лежит на форме?
 
 

Код:
procedure TfmMain.comboProxyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = vk_return) and (not VarIsNull(comboProxy.EditValue)) then
    TcxComboBoxProperties(comboProxy.Properties).Items.Add(comboProxy.EditValue)
end;
 

 
Добавлено:
Ещё одна проблема с тем же комбобоксом (TcxBarEdirItem)
ImmediatePost включено, но в событии OnKeyDown значение свойства EditValue всегда пустое, null.
Как по нажатию на enter в событии OnKeyDown получение значение EditValue?

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 10:20 25-02-2012
LadyOfWood

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sam291074
Synchronize вообще штука не очень хорошая, но учитывая что VCL не tread-safe, может лучше заполнить структуру и отсылать PostMessage.

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 17:50 25-02-2012
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо чтобы у TdxBarLargeButton было такое же поведение как у TdxBarSubItem. те при нажатии на кнопку вываливалось меню.  bsDropDown дает только лишнюю кнопку, по которой еще попасть надо.

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 21:05 25-02-2012
LadyOfWood

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

Цитата:
Надо чтобы у TdxBarLargeButton было такое же поведение как у TdxBarSubItem. те при нажатии на кнопку вываливалось меню.

Руками, по нажатию (onclick) делать Popup.

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 21:52 25-02-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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