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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тогда как мне на лету запихать шифрованное значение в поле? Не подскажешь?
 
В другом проекте я тоже использую события OnSetText, правда, у компонент Fib+ и в базу попадает шифрованное значение.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 14:25 17-02-2010
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
отпиши подробней, как данные попадают в DataSet через грид или по другому ? что происходит в гриде ?

Всего записей: 1599 | Зарегистр. 01-03-2004 | Отправлено: 14:28 17-02-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пользователь редактирует cxGrid ручками. Всё связано через TDataSource.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 14:46 17-02-2010
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
вообщем при выгрузке данных из memdataset используется событие OnGetText а так как, у тебя там стоит расшифровка, то соответственно и выгружается расшифрованное
Значит перед сохранением делаем так,
  tUpdaterPassword.OnGetText := nil;  
после сохранения  
  tUpdaterPassword.OnGetText := метод который делает расшифровку
 
 

Всего записей: 1599 | Зарегистр. 01-03-2004 | Отправлено: 15:26 17-02-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ок, спасибо за совет, но теперь вопрос, что мне указать в качестве параметров для tUpdaterPasswordGetText(что здесь указать);
 

Код:
 
  tUpdaterPassword.OnGetText := nil;
  tUpdater.SaveToTextFile(ExtractFilePath(ParamStr(0)) +  sFileNameToSavedxMem);
  tUpdaterPassword.OnGetText := tUpdaterPasswordGetText();
 

 
Добавлено:
Можно сделать проще. Ввести глобальную переменную. Перед сохранением выставляем в True, в событии проверяем, нужно ли шифровать. после сохранения опять в False.
просто я не знаю как правильно событие "прикрепить" на место
 
Добавлено:
Мне ещё не понятно, почему событие OnGetText срабатывает 16! раз?
 
Добавлено:
Тем самым 16 раз выполняя шифрацию значеня поля при сохранении. Не баг ли это?
 
Добавлено:
Добавлю, что в таблице 2 записи и 18 полей.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 15:37 17-02-2010
jonikDk



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

Код:
 
  private
    { Private declarations }
    procedure PassGetText(Sender: TField; var Text: string; DisplayText:
        Boolean);
...
 
procedure TForm1.PassGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  Text := Decrypt(VarToStr(sender.Value), kd);
end;
...
 
 tUpdaterPassword.OnGetText := nil;  
 tUpdater.SaveToTextFile(ExtractFilePath(ParamStr(0)) +  sFileNameToSavedxMem);  
 tUpdaterPassword.OnGetText := PassGetText;
 
 

Всего записей: 1599 | Зарегистр. 01-03-2004 | Отправлено: 16:14 17-02-2010 | Исправлено: jonikDk, 16:16 17-02-2010
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, спасибо, надо было без скобок -  tUpdaterPasswordGetText;  
 
Добавлено:
Всё равно проблема. При загрузке файла поставил бряку в событии  
TfmFtpUpdater.tUpdaterPasswordGetText
 
13 раз событие было вызвано. Может это cxGrid так балуется?


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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 16:20 17-02-2010
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11
по моему onGet отрабатывает при перерисовке. Я вообще не пользуюсь этими событиями. В хелпе надо посмотреть про это событие.
Попробуй расшифровку сделать с помощью грида.

Всего записей: 1599 | Зарегистр. 01-03-2004 | Отправлено: 16:42 17-02-2010
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый вечер. Возникла проблема и никак не могу решить ее.
Сегодня обновил все-таки девок с 47 на 48 версию. Вроде все хорошо, но потом заметил глючокс. Не работает popupmenu от tcxspellchecker на edit компонентах. То есть всплывает стандартное окошко с фразами типа вставить, копировать, вырезать и так далее, но не всплывает с данными для замены. Сначала думал, что это глючит вторая версия spellchecker, откомпилил первую версию, глюк остался. Самое интересное, что в демках данная часть работает, а в моем проекте нет.  
отличия моего проекта от демки только в несколько вещах:
1) сам компонент стоит на форме датамодуля
2) словари настраиваются и грузяться в рунттайме
 
Стало быть, что делать и где искать решение проблемы?

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 20:27 17-02-2010
vladman

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

Цитата:
Вопрос по dxMemData. Хочу выполнить шифрование одного из полей. Затем сохранить набор данных в файл.  

Если бы вы просматривали сообщения не только касательно ваших проблем, то вы бы нашли решение вашей проблемы без проблем, каламбурчик получился . Недавно, буквально на прошлой странице, AvGSoft интересовался решением подобного вопроса и, предложенное решение, http://forum.ru-board.com/topic.cgi?forum=33&topic=10884&start=180#12 вроде бы помогло.
 
 
Добавлено:
X11

Цитата:
Вопрос по сохранению состояния формы. В частности по WindowState. Если окно свернуть и потом закрыть приложение, то после запуска приложения его нет на панели задач.  

Попробуйте так

Код:
...
if fmFtpUpdater.WindowState = wsMaximized then
  AStoreComponent.Properties.Add('WindowState')
else
  begin
    AStoreComponent.Properties.Add('top');
    AStoreComponent.Properties.Add('left');
    AStoreComponent.Properties.Add('height');
    AStoreComponent.Properties.Add('width');  
  end;
 cxPropertiesStore1.StoreTo(false);  
...

 
Добавлено:
Cryogen2003

Цитата:
Самое интересное, что в демках данная часть работает, а в моем проекте нет.  
отличия моего проекта от демки только в несколько вещах:  
1) сам компонент стоит на форме датамодуля
2) словари настраиваются и грузяться в рунттайме

Раз отличия только в этих двух пунктах, стало быть в них и проблема.
1-й, скорее всего не может быть причиной, ищите причину исходя из второго.

Цитата:
Стало быть, что делать и где искать решение проблемы?

Можно попробовать дать пример вашего кода где это не работает.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 01:51 18-02-2010 | Исправлено: vladman, 02:32 18-02-2010
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
Да без проблем могу дать. Сейчас только найду это место. Но факт в том, что раньше работало, а сейчас не работает. Но при этом я ничего не менял
 
Пример

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 09:29 18-02-2010
jonikDk



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

Цитата:
Если бы вы просматривали сообщения не только касательно ваших проблем, то вы бы нашли решение вашей проблемы без проблем, каламбурчик получился . Недавно, буквально на прошлой странице, AvGSoft интересовался решением подобного вопроса и, предложенное решение, http://forum.ru-board.com/topic.cgi?forum=33&topic=10884&start=180#12 вроде бы помогло.

ну так у X11 так и было реализовано... или я чего то не то смотрел. При сохранении в файл TdxMemDataSet использует событие Getvalue и расшифровывает поле. А его это не устраивало, ему в файле нужно было зашифрованное поле, так как оно записалось в DataSet, а то что оно записалось зашифрованное он это тоже в примере показал.

Всего записей: 1599 | Зарегистр. 01-03-2004 | Отправлено: 09:45 18-02-2010 | Исправлено: jonikDk, 10:05 18-02-2010
X11



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

Цитата:
Если бы вы просматривали сообщения не только касательно ваших проблем, то вы бы нашли решение вашей проблемы без проблем, каламбурчик получился . Недавно, буквально на прошлой странице, AvGSoft интересовался решением подобного вопроса и, предложенное решение, http://forum.ru-board.com/topic.cgi?forum=33&topic=10884&start=180#12 вроде бы помогло.
 

В моём случае в файл сохраняется РАСШИФРОВАННОЕ значение.
 
(сделал с доп. переменными по Вашему примеру, всё равно)

Код:
 
procedure TfmFtpUpdater.tUpdaterPasswordGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
begin
  if VarIsNull(Sender.Value) then Exit;
 
  Text := VarToStr(Sender.Value);
  Text := Decrypt(Text, kd);
end;
 
procedure TfmFtpUpdater.tUpdaterPasswordSetText(Sender: TField;
  const Text: string);
var
  vText: string;
begin
  vText := Encrypt(Text, ke);
  Sender.Value := vText;
end;
 

 
Пока что решил так: на время сохранения я отключаю событие:

Код:
  tUpdaterPassword.OnGetText := nil;
  tUpdater.SaveToTextFile(ExtractFilePath(ParamStr(0)) +  sFileNameToSavedxMem);
  tUpdaterPassword.OnGetText := tUpdaterPasswordGetText;
 

 
Проблема ещё в том, что cxGrid отображает зашифрованное значение поля. Только я вхожу в режим редактирования ячейки, как сразу я вижу нормально расшифрованное значение.
 
На данный момент мне не нужно видеть значение зашифрованного поля, т.к. это пароль и пользователю всё равно, что там за звёздочками. Но в другом случае это было бы криво.
 
Я просто так же (с шифрованием) подключал и работал с компонентами Fib+. В гриде я вижу нормально значение. В базе данных (firebird) зашифрованное значение. Так и должно быть.
 
Думаю, что у девок это баг. И ещё неуверен, но мне кажется, что баг в том, что событие OnGetText срабатывает не 1 раз (если для одной записи), а много раз. И в этом виноват cxGrid. У меня 1 запись, а событие срабатывает 10-16 раз. Если без грида, то вообще не срабатывает. А если будет 1000-5000 записей. Грид будет 10 минут грузиться?
 
 
 
Добавлено:
А при загрузке файла нужно отключать OnSetText

Код:
 
tUpdaterPassword.OnSetText := nil;
tUpdater.LoadFromTextFile(ExtractFilePath(ParamStr(0)) +  sFileNameToSavedxMem);
tUpdaterPassword.OnSetText := tUpdaterPasswordSetText;
 

 
Иначе при загрузке данные в гриде видно, что зашифрованное значение поля шифруется повторно.
И если события не отключать перед сохранением/восстановлением, то содержание поля шифруется по кругу.

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:03 18-02-2010
vladman

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

Цитата:
Проблема ещё в том, что cxGrid отображает зашифрованное значение поля. Только я вхожу в режим редактирования ячейки, как сразу я вижу нормально расшифрованное значение.
 
На данный момент мне не нужно видеть значение зашифрованного поля, т.к. это пароль и пользователю всё равно, что там за звёздочками. Но в другом случае это было бы криво.
 
Я просто так же (с шифрованием) подключал и работал с компонентами Fib+. В гриде я вижу нормально значение. В базе данных (firebird) зашифрованное значение. Так и должно быть.  

Всетаки тяжело понять что вы конкретно хотите реализовать.
Поправьте если я не прав.  
1. Вы хотите в файл сохранять зашифрованные значения определенного поля.
2. В гриде вы хотите видеть зашифрованные значения этого поля.
3. При начале редактирования этого поля вы хотите видеть его значение расшифрованным.
4. При применений изменений этого поля вы хотите зашифровать измененное значение.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 11:33 18-02-2010
X11



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

Цитата:
Всетаки тяжело понять что вы конкретно хотите реализовать.  

Что ж тяжелого?
Ввод, изменение пароля с сохранением в текстовый файл с помощью связки dxMemData + cxGrid.
 

Цитата:
1. Вы хотите в файл сохранять зашифрованные значения определенного поля.  

Да
 

Цитата:
2. В гриде вы хотите видеть зашифрованные значения этого поля.  

В данном конкретном случае - это пароль и видеть его не обязательно (будут звёздочки)
А вообще хотелось бы иметь возможно нормально отображать значение поля. Сегодня пароль, а завтра ещё что-нить потребуется.
 

Цитата:
3. При начале редактирования этого поля вы хотите видеть его значение расшифрованным.

Вообще в гриде по идее должно быть значение видимо в нормальном расшифрованном виде. А тем более в момент редактирования.
 

Цитата:
4. При применений изменений этого поля вы хотите зашифровать измененное значение.

Да, зашифрованное значение должно хранится в выходном текстовом файле. Пусть даже в самом поле будет незашифрованное значение.

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

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
Нашел взаимосвязь некоторую. У меня в моем проекте нормально работает TcxRichEdit (всплывающее меню появляется), но при этом TcxMemo или TcxTextEdit отказываются правильно работать (текст подчеркивается, но всплывающее меню появляется без возможности проверки).
Вот и никак не пойму, что делать то?

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 12:39 18-02-2010
X11



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

Цитата:
X11
 
Цитата:
Вопрос по сохранению состояния формы. В частности по WindowState. Если окно свернуть и потом закрыть приложение, то после запуска приложения его нет на панели задач.  
 
Попробуйте так
 
Код:
...
if fmFtpUpdater.WindowState = wsMaximized then
  AStoreComponent.Properties.Add('WindowState')
else
  begin
    AStoreComponent.Properties.Add('top');
    AStoreComponent.Properties.Add('left');
    AStoreComponent.Properties.Add('height');
    AStoreComponent.Properties.Add('width');  
  end;
 cxPropertiesStore1.StoreTo(false);  
...  

 
так не получилось из-за того, что у меня одна и та же процедура выполняет и сохранение и восстановление. Отличие лишь в последней строке, которая или сохраняет или восстанавливает настройки.
 
Я просто добавил в OnCreate
if WindowState = wsMinimized then WindowState := wsNormal;
 
Наверное это глюк дельфи

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 16:25 18-02-2010
vladman

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

Цитата:
Да без проблем могу дать. Сейчас только найду это место. Но факт в том, что раньше работало, а сейчас не работает. Но при этом я ничего не менял
Пример
 

Пример у меня ваших проблем не показал. Начал разбираться, и только сейчас вспомнил что не обновился до 48 версии. Сейчас 47. На днях поставлю 48 и попробую найти проблему, если еще актуально.
 
Добавлено:
X11

Цитата:
Что ж тяжелого?  

После вашего предпоследнего поста уже ничего, все намного понятнее и, главное, лаконично ).

Цитата:
Я просто так же (с шифрованием) подключал и работал с компонентами Fib+. В гриде я вижу нормально значение. В базе данных (firebird) зашифрованное значение. Так и должно быть.
Думаю, что у девок это баг.

Нет, не баг, и тем более не девок. Дело в том, что метод TdxCustomMemData.SaveToTextFile содержит следующий код

Код:
while not EOF do
      begin
        St := '';
        for i := 0 to List.Count - 1 do
        begin
          if i <> 0 then
            St := St + FDelimiterChar;
          St := St + TField(List[i]).Text;
        end;
        Sts.Add(St);
        Next;
      end;

в котором свойство TField(List[i]).Text; имеет следующий геттер (модуль DB)

Код:
function TField.GetEditText: string;
begin
  Result := '';
  if Assigned(FOnGetText) then
    FOnGetText(Self, Result, False) else  // -> здесь и вызывается ваша процедура расшифровки
    GetText(Result, False);
end;

Это и объясняет то, что вы получали файл с расшифрованными значениями, а также работоспособность решения предложенного jonikDk
Попробуйте, как эксперимент, выполнить tUpdater.SaveToBinaryFile(..) и значения будут зашифрованы.
 
 
Добавлено:
X11
Попробуйте этот код, который, как мне кажется, удовлетворяет вашим требованиям и решает нижеследующие проблемы.

Цитата:
Проблема ещё в том, что cxGrid отображает зашифрованное значение поля. Только я вхожу в режим редактирования ячейки, как сразу я вижу нормально расшифрованное значение.  


Цитата:
У меня 1 запись, а событие срабатывает 10-16 раз.  


Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 02:52 19-02-2010 | Исправлено: vladman, 03:31 19-02-2010
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
Вообщем интересную зависимость нашел, но как именно лечить не особо. То есть у меня работает только их Richedit (так, как нужно мне), а все остальные компоненты (от класса TcxCustomEdit) не работают - появляется стандартное меню на редактирование, а при неправильном слове должно появляться меню именно spellchecker.  
Заметил еще вот что, что если кидаешь сам компонент spellchecker на свою основную форму, то все работает как надо, но не работает на других формах, которые создаются из основной формы типа так - TMyCustomForm.Create(Nil). И работают как надо, если создавать их так TMyCustomForm.Create(MainForm). Но в любом случае мне так не надо, мне нужно именно через датамодуль. Плюнул я на все это и решил создать компоненты с исправлением этого глюка.  
 
Если вдруг кому интересно будет, то вот тут переписал я уже. Мой модуль
 
Кстати, так они одну глюку не подправили в модуле cxGridCustomTableView и классе TcxCustomGridTableController, процедура MultiSelectMouseDown.
Проблема в том, что когда на гриде стоит CellMultiSelect = true, то нельзя выбирать записи с помощью Ctrl. Честно говоря хотелось бы как-то этот глюк исправить - или пусть разработчики правят, либо подскажите, как можно заменить эту функцию, но не переписывая исходников разработчиков.

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 09:05 19-02-2010
GladeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По поводу компонента TcxSpreadSheet выяснилось следующее:
Ошибка в Builder C++ 2010 но в BuilderC++ 6.0 ошибки нет при стандартных параметрах..
Похоже это очередной баг 2010... на 2009 не проверял за не имением последнего..
Кстати Builder C++ 2010(Update 4)..

Всего записей: 57 | Зарегистр. 07-08-2003 | Отправлено: 10:27 19-02-2010 | Исправлено: GladeX, 10:28 19-02-2010
Открыть новую тему     Написать ответ в эту тему

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