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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BlackVetal
Нет GridColumn1.Index не меняется.
 
После группировки среди ARecord-ов есть строчки где все value типа string (строка по которой идет группировка).
 
marser
Соглашусь - решил с помощью проверки VarType и игнорорования стринговых значений.
 
Всем спс за ответы.

Всего записей: 2 | Зарегистр. 08-08-2011 | Отправлено: 16:07 09-08-2011
X11



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

Код:
procedure TfrmMain.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to GetExtendedStylePainters.Count - 1 do
    bcSkin.Items.Add(GetExtendedStylePainters.Names);
 
  bcSkin.ItemIndex := 0;
end;

 
Но в новых версиях девок заменили GetExtendedStylePainters на cxLookAndFeels.RootLookAndFeel.
 
Как теперь можно получить список скинов у DevExpress во время исполнения программы?
 
Добавлено:
Нашёл.
Я, оказывается, не первый.
http://community.devexpress.com/forums/p/98706/337685.aspx
 

Код:
uses dxSkinsLookAndFeelPainter;
 
procedure TForm2.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to cxLookAndFeelPaintersManager.Count - 1 do
    if cxLookAndFeelPaintersManager.Items[I] is TdxSkinLookAndFeelPainter then
      cxComboBox1.Properties.Items.Add(cxLookAndFeelPaintersManager.Items[I].LookAndFeelName);
end;


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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:43 10-08-2011
Bill_PHO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Буду признателен, если кто покажет, как правильно обрабатывать несколько выделенных строк в cxGrid (например, удалить их).

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 13:32 10-08-2011
tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bill_PHO
 
cxGridView.Controller.SelectedRowCount
cxGridView.Controller.SelectedRows
cxGridView.Controller.SelectedRecordCount
cxGridView.Controller.SelectedRecords
Обрабатываешь массивы.
 
Удалять или из DataSet если DBView или через cxGrid.DataController.DeleteRecord

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 13:41 10-08-2011
Bill_PHO

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

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 13:44 10-08-2011 | Исправлено: Bill_PHO, 13:45 10-08-2011
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Могут быть подводные камни, если пользователь сгруппировал записи, этот код должен отработать корректно.
 

Код:
 
Var
 i: integer;
 ARowIndex: Integer;
 ARowInfo:  TcxRowInfo;
begin
  with dbgAnnotations.DataController do
    if DataSet.RecordCount <= 0 then exit;
 
  with dbgAnnotations.DataController do
  begin
    beginupdate;
    Screen.Cursor := crHourGlass;
    try
      for I := 0 to GetSelectedCount - 1 do
        begin
          ARowIndex := GetSelectedRowIndex(I);
          ARowInfo  := GetRowInfo(ARowIndex);
          if ARowInfo.Level < Groups.GroupingItemCount then
            Continue
          else
            begin
 
 
//что-то делаем с выделенными записями
              if Values[ARowInfo.RecordIndex, dbgAnnotationsID_USER.Index] = UserData.UserID then
                DM.fibDB.Execute('delete from TAnnotations where ID = ' + VarToStr(Values[ARowInfo.RecordIndex, dbgAnnotationsID.Index]));
 
            end;//else
        end;//for
    finally
      endupdate;
      Screen.Cursor := crDefault;
    end;//try
  end;//with
 


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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 14:16 10-08-2011
Bill_PHO

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

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 14:47 10-08-2011 | Исправлено: Bill_PHO, 17:03 10-08-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Столкнулся с такой проблемой.  
В коде закрашиваю ячейки в gride на событии OnCustomDrawCell. Корректно закрашиваются только отображаемые в начале данные, т.е. если данных в таблице много, то просле прокрутки scrollbar'ом закраска ячеек не соответствует той, которая должна быть.
 
Вот код закрашивания по условию.

Код:
procedure TFormReadings.CustDrawCell(Sender: TcxCustomGridTableView;
  ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
  var ADone: Boolean);
var itemI, recI: integer;
begin
  try
  recI := AViewInfo.RecordViewInfo.Index;
  itemI := AViewInfo.Item.Index;
  // Если массив инициализирован
  if Assigned(FColor) then
    // Если индекс текущей записи меньше количества записей и >= 0
    // без проверки возникает ошибка при создании новой записи
    if ((recI < (Length(FColor)))
      and (recI >= 0)) then
      case FColor[recI, itemI] of
        1: // Желтый - запись об объекте есть в табл. норм, но не попадает
           // во временной интервал действия нормы
          begin
            ACanvas.FillRect(AViewInfo.Bounds,$0083C6CB);
          end;
        2: // Голубой - показатель ниже нормы
          begin
            ACanvas.FillRect(AViewInfo.Bounds,$00FBA8A4);
          end;
        3: // Зеленый - показатель в норме
          begin
            ACanvas.FillRect(AViewInfo.Bounds,$00A8FBA4);
          end;
        4: // Красный - показатель выше нормы
          begin
            ACanvas.FillRect(AViewInfo.Bounds,$00B5A4FB);
          end;
        5: // Серый - нет записи об объекте в табл. норм
          begin
            ACanvas.FillRect(AViewInfo.Bounds,$00C1C1C1);
          end;
      end;
  except
    on E: Exception do
      MessageBox(handle, PChar('Ошибка при отрисовке ячейки! ')
        + E.Message, PChar('Ошибка!'), MB_OK + MB_ICONERROR);
  end;
end;

 
Вот вид таблицы при загрузке:
http://imageshack.us/photo/my-images/803/scrin1.jpg/
 
Вид таблицы после прокрутки:
http://imageshack.us/photo/my-images/835/scrin2.jpg/
 
Обратите внимание на колонку "Старая ..." При значении меньше 100 должно окрашиваться в синий цвет, при значении больше 200 - в красный. На первом скриншоте(сразу же после загрузки данных в таблицу) все отрисовывается как надо. После прокрутки закраска ячеек не работает.
Пробовал справится с проблемой путем процедуры Invalidate на событии OnScroll, однако в этом случае цвета ячеек просто отображаются как при первоначальной загрузке (что-то вроде накладывания снимка первоначально закрашенных ячеек в отображение таблицы после прокрутки), т.е. условия отрисовки игнорируются.
 
Может кто-нибудь сталкивался с подобной проблемой? Как корректно закрасить ячейки после прокрутки данных?

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andreybear
проверь индексы, по которым выбирается цвет - возможно у тебя индексы некорректные. еще IMXO нужно поставить отрисовку баграунда ячейки "по умолчанию", то есть перед тем как закрашивать в какой-то конкретный цвет - нужно ставить какой-то цвет по умолчанию (белый, серый или еще какой)

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 07:05 11-08-2011
marser

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andreybear
А зачем Вы сами пытаетесь раскрашивать? Я имею ввиду ACanvas.FillRect(...). Не надо мешать гриду самому раскрашивать. Достаточно просто указать ACanvas цвет фона и шрифта. Например

Код:
ACanvas.Brush.Color := clYellow;
ACanvas.Font.Color := clRed;

Добавлено:
Если параметр АDone = False (по умолчанию), то после события OnCustomDrawCell запускается встроенный метод "рисования". А если АDone = True, то встроенный метод "рисования" игнорируется. Так что, решайте: рисовать самому или задать только свойства канвы.

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BlackVetal
Проверял индексы неоднократно. После построения таблицы массив с "цветами" не изменяется, размер массива соответствует размеру таблицы, т.е. каждой ячейке таблицы соответствует ячейка массива.

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

Что вы имеете ввиду? Например, ACanvas.Brush.Color := clWhite в начале процедуры CustDrawCell (см. фрагмент кода ниже).
Прикрепляю еще 3 скриншота таблицы: 1 - состояние сразу после загрузки; 2 - состояние после прокрутки вниз; 3 - возвращение в исходное состояние (прокрутка вверх).
1. http://imageshack.us/photo/my-images/59/scrin3.jpg/
2. http://imageshack.us/photo/my-images/405/scrin4.jpg/
3. http://imageshack.us/photo/my-images/62/scrin5s.jpg/
На скриншотах 1 и 3 одно отображаются одни и те же ячейки, однако после прокрутки вниз и возвращения в исходное положение закрашены они по-разному! Массив, в зависимости от содержимого которого окрашиваются ячейки во время прокрутки вниз-вверх не менялся, никаких изменений, кроме собственно прокрутки не производилось.
 
marser
Пробовал по-разному, в том числе как вы предложили - не работает!

Код:
 
procedure TFormReadings.CustDrawCell(Sender: TcxCustomGridTableView;
  ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
  var ADone: Boolean);
var itemI, recI: integer;
begin
  try  
  ACanvas.Brush.Color := clWhite; // Цвет по умолчанию  
  recI := AViewInfo.RecordViewInfo.Index;
  itemI := AViewInfo.Item.Index;
  // Если массив инициализирован
  if Assigned(FColor) then
    // Если индекс текущей записи меньше количества записей и >= 0
    // без проверки возникает ошибка при создании новой записи
    if ((recI < (Length(FColor)))
      and (recI >= 0)) then
    begin
      ACanvas.Font.Color := clBlack; // Цвет шрифта - черный
      case FColor[recI, itemI] of
        1: // Желтый - запись об объекте есть в табл. норм, но не попадает
           // во временной интервал действия нормы
          begin
            //ACanvas.FillRect(AViewInfo.Bounds,$0083C6CB);
            ACanvas.Brush.Color := $0083C6CB;
          end;
        2: // Голубой - показатель ниже нормы
          begin
            //ACanvas.FillRect(AViewInfo.Bounds,$00FBA8A4);
            ACanvas.Brush.Color := $00FBA8A4;
          end;
        3: // Зеленый - показатель в норме
          begin
            //ACanvas.FillRect(AViewInfo.Bounds,$00A8FBA4);
            ACanvas.Brush.Color := $00A8FBA4;
          end;
        4: // Красный - показатель выше нормы
          begin
            //ACanvas.FillRect(AViewInfo.Bounds,$00B5A4FB);
            ACanvas.Brush.Color := $00B5A4FB;
          end;
        5: // Серый - нет записи об объекте в табл. норм
          begin
            //ACanvas.FillRect(AViewInfo.Bounds,$00C1C1C1);
            ACanvas.Brush.Color := $00C1C1C1;
          end;
      end;
    end;
  except
    on E: Exception do
      MessageBox(handle, PChar('Ошибка при отрисовке ячейки! ')
        + E.Message, PChar('Ошибка!'), MB_OK + MB_ICONERROR);
  end;
end;  
 

 
Очень хочется разобраться в этом, т.к. ничего вразумительного в инете не нашел, в том числе на сайте devexpress.com. Думается, что рано или поздно кто-нибудь также столкнется с подобной проблемой.
 
Добавлено:
marser
Это весь код события CustomDrawCell и из него видно, что ADone в нем так и остается по умолчанию, т.к. вообще не упоминается.

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



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

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 09:59 11-08-2011
marser

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

Цитата:
Думается, что рано или поздно кто-нибудь также столкнется с подобной проблемой

Да нет там никакой проблемы. Попробуйте написать простой пример

Код:
procedure TFormReadings.CustDrawCell(Sender: TcxCustomGridTableView;  
  ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;  
  var ADone: Boolean);  
begin
  if (AViewInfo.GridRecord.Index = 2) and  (AViewInfo.Item.Index = 2) then
      ACanvas.Brush.Color := clRed;
end;

Если нормально работает, то скорее всего, перемудрили с индексами и с массивом

Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 10:13 11-08-2011
vladman

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

Цитата:
Проверял индексы неоднократно.  

Попробуйте заменить recI := AViewInfo.RecordViewInfo.Index;  на recI := AViewInfo.GridRecord.RecordIndex;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 10:26 11-08-2011
andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это двумерный массив, содержащий значения от 0 до 5. 1..5 - соответствуют цветам, которые описаны в коде. 0 - не соответствует никакому цвету.
Есть некоторые показатели для конкретных объектов (например, объекты: Всас, Д 400 мм, Д 500 мм; показатели: уровень, давление, расход), для каждого показателия объекта определена норма. При загрузке значений конкретного показателя объекта в таблицу производится сверка с нормами для этого показателя.  
Если норма задана, то в зависимости от результатов сравнения в массив проставляются цифры 2..4 (2 - ниже нормы, 3 - норма, 4 - выше нормы). 1 - норма для показателя объекта есть, но либо кончился срок действия, либо показание не попадает во временной интервал. 5 - вообще нет записи в таблице норм. 0 используется в данном случае для указания на то, что не требуется закрашивание (колонка "Дата" в таблице).
Индексы первого измерения соответствуют индексам записей таблицы(Records), индексы второго измерения соответствуют индексам колонок таблицы(Items).
Данные хранятся в СУБД Oracle.
Я могу скинуть куда-нибудь немалый исходный код, однако дело тут не в массиве, о чем свидетельствуют скриншоты 3-5.
Заметил такую особенность - если изначально загрузить не много данных(столько, чтоб данные умещались таблице при развернутой на весь экран форме), уменьшить размер формы(у таблицы Align = Client), чтоб появились скролбары в таблице, затем поскролить вверх/вниз(соответственно закраска ячеек станет неправильной) (скрин 6), затем растянуть форму так, чтоб все данные уместились в таблице и исчезли скролбары, то в этом случае закраска становится корректной прям на глазах!(скрин 7)
Уже давненько пытаюсь найти решение этой проблемы или причину, которая к привела к ее возникновению, но что-то пока не получается. Хотел было отказаться от этой затеи, однако эта функция одно из обязательных требований заказчика.
Скрин 6 http://imageshack.us/photo/my-images/696/scrin6.jpg/
Скрин 7 http://imageshack.us/photo/my-images/580/scrin7.jpg/
 
Добавлено:
marser
Действительно, простой пример работает!
vladman

Цитата:
Попробуйте заменить recI := AViewInfo.RecordViewInfo.Index;  на recI := AViewInfo.GridRecord.RecordIndex;

Точно в цель! Вы случайно не экстрасенс? Сразу же увидели причину!
vladman, marser, BlackVetal
Огромное человеческое спасибо! Несколько дней убил на поиск ошибки, уже и не знал, что делать, а вы прям махом помогли разобраться!

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день, у меня возникла такая проблема:
Во время работы программы при нажатии на кнопку, TcxGrid должен заполняться из ini файла(их может быть несколько, а может быть и ни одного, соответственно количество строк = количеству ini файлов), заполнение происходит нормально, но при повторном нажатии на кнопку, если файлы остались те же, или их стало больше, всё нормально, т.е. TcxGrid обновляет окно, но если например файла было 2, а после повторного нажатия кнопки их нет вообще, то в окне TcxGrid продолжают висеть те же 2 файла, хотя должно быть просто чистое окно.
Может кто сталкивался с таким, подскажите, в чём может быть проблема?
Заранее благодарен

Всего записей: 7 | Зарегистр. 11-08-2011 | Отправлено: 11:59 11-08-2011 | Исправлено: Alien92, 12:45 11-08-2011
X11



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

Цитата:
Может кто сталкивался с таким, подскажите, в чём может быть проблема?  

Конечно. Проблема в 17ой строке.

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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alien92
что такое TcxGrig?у меня просто нет такого это TcxGrid?

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 12:24 11-08-2011 | Исправлено: mdid, 12:31 11-08-2011
Alien92

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mdid
Да, так оно и есть, опечатался.
X11
Собственно, вот код, но тут только заполнение, а меня интересует процесс очистки...
    TcxCustomDataController *dc = NULL;
    dc = cxGrid1->Levels->Items[0]->GridView->DataController;
    dc->RecordCount = 0;
 
    ++dc->RecordCount;
    dc->Values[i][0] = inifile->ReadString("***","***","***");
    dc->Values[i][1] = inifile->ReadString("***","***","***");
    dc->Values[i][2] = inifile->ReadString("***","***","***");
    dc->Values[i][3] = inifile->ReadString("***","***","***");
    dc->Values[i][4] = inifile->ReadString("***","***","***");
    dc->Values[i][5] = inifile->ReadString("***","***","***");
    dc->Values[i][6] = sFileName;
 
    TcxCustomDataController *dc1 = dc->GetDetailDataController(i,0);
 
    ++dc1->RecordCount;
    dc1->Values[i][0] = inifile->ReadString("***","***","***");
    dc1->Values[i][1] = inifile->ReadString("***","***","***");
    dc1->Values[i][2] = inifile->ReadString("***","***","***");
    dc1->Values[i][3] = inifile->ReadString("***","***","***");
    dc1->Values[i][4] = inifile->ReadString("***","***","***");
    dc1->Values[i][5] = inifile->ReadString("***","***","***");
    i++;

Всего записей: 7 | Зарегистр. 11-08-2011 | Отправлено: 12:44 11-08-2011
marser

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

Код:
а меня интересует процесс очистки

Удаляйте строку с индексом 0 до тех пор, пока RecordCount не станет равен 0.
На Delphi это выглядит так

Код:
while DataController.RecordCount > 0 do
  DataController.DeleteRecord(0);

Всего записей: 398 | Зарегистр. 29-03-2007 | Отправлено: 13:09 11-08-2011 | Исправлено: marser, 13:11 11-08-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