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

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



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

Всего записей: 176 | Зарегистр. 20-07-2005 | Отправлено: 13:49 05-02-2015
Mic777

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
russko
Боюсь вразумить не получится, а вот спросить как вы хотите чтобы было посчитано можно.
 
Потому как: "Поэтому бухгалтеры нередко берут расчетную ведомость, и, как сказал классик, "ейною мордою начинают мне в харю тыкать". А проблема не касается ни машинной арифметики, ни алгоритма округления. Сформулировать ее можно так: если трое договорились делить доход поровну, а заработали 10 копеек, то как быть с лишней копейкой?
Правильный ответ — решить этот вопрос должна сама бухгалтерия."
 

Всего записей: 90 | Зарегистр. 15-12-2005 | Отправлено: 14:01 05-02-2015
G787



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
64, битную не ставил
 
судя по тому, что пишут на офф сайте девок, RichEditControl ещё очень сырой, а более менее внятная версия ожидается в пакете девок v2015

Всего записей: 1035 | Зарегистр. 04-12-2005 | Отправлено: 05:35 06-02-2015
bigrunner1

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

Всего записей: 4 | Зарегистр. 09-02-2015 | Отправлено: 13:02 09-02-2015
Mic777

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bigrunner1
а данные экселя можно глянуть?
 
Добавлено:
bigrunner1
и тут:
"Values[iRowIndex, iColIndex] := Sheet.Cells[iRowIndex+1,iColIndex+1];  
  ViewList.Columns[0].DataBinding.ValueType := 'String';  
ViewList.Columns[1].DataBinding.ValueTypeClass := TcxStringValueType;  
ViewList.Columns[2].DataBinding.ValueTypeClass := TcxIntegerValueType;  
ViewList.Columns[3].DataBinding.ValueTypeClass := TcxFloatValueType;  
ViewList.Columns[4].DataBinding.ValueTypeClass := TcxFloatValueType;  
 ViewList.Columns[5].DataBinding.ValueTypeClass := TcxStringValueType;  
ViewList.Columns[6].DataBinding.ValueTypeClass := TcxStringValueType;  
"
зачем в цикле каждый раз определять тип данных, почему это не сделать один раз
к тому же получается сначала присваиваешь Value, а потом только задаешь тип
а что будет если колонка вообще не заполнена = null, а тип уже задан в Integer?

Всего записей: 90 | Зарегистр. 15-12-2005 | Отправлено: 13:37 09-02-2015
bigrunner1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Липецкая область    Обьект1    150    0   0            Мелкий опт
Ростовская область    Обьект2    0    0   0        Розница
 
 
Добавлено:
Тут конечно согласен, не учел. Проверка на null нужна.
 
Добавлено:
Убрал задание типов,до цикла, результат тотже. Ругается на тип Dispatch

Всего записей: 4 | Зарегистр. 09-02-2015 | Отправлено: 13:42 09-02-2015
Mic777

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bigrunner1
я б делал не проверкой, а функцией конвертации - если тебе нужны для какой-то колонки только числовые данные то и получай их уже через функцию
 
ну к примеру типа такой:
 
function VarToInt(const AValue: Variant): Integer;
begin
  Result := StrToIntDef(VarToStrDef(AValue, EmptyStr), 0);
end;
 
ну и это:  
ViewList.Columns[0].DataBinding.ValueType := 'String';  
ViewList.Columns[1].DataBinding.ValueTypeClass := TcxStringValueType;  
ViewList.Columns[2].DataBinding.ValueTypeClass := TcxIntegerValueType;  
ViewList.Columns[3].DataBinding.ValueTypeClass := TcxFloatValueType;  
ViewList.Columns[4].DataBinding.ValueTypeClass := TcxFloatValueType;  
 ViewList.Columns[5].DataBinding.ValueTypeClass := TcxStringValueType;  
ViewList.Columns[6].DataBinding.ValueTypeClass := TcxStringValueType;  
 
вообще б убрал.
мне кажется будет работать прекрасно и без него.
 
 
Добавлено:
bigrunner1
Ровненько твой код только закоментил то, что говорил
работает без проверки на null, если заполнены все ячейки.
Проверил только что на Delphi 2010 / DevExpress 12.2.10
Подробнее...

Всего записей: 90 | Зарегистр. 15-12-2005 | Отправлено: 14:18 09-02-2015 | Исправлено: Mic777, 14:27 09-02-2015
MagistrAnatol



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


Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 19:59 09-02-2015
Mic777

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
Думаю можно.
У них есть интересный компонент, позволяющий вызвать форму, описывающую условия фильтра.
Можно задавать не только равенство, но и вхождение строки, сравнение на больше меньше и т.п.
Причем для разных типов полей будут свои операции сравнения.
Компоненты TcxFilterControl и TcxDBFilterControl.
Почитать можно в хелпе.
Есть для наживки статья на хабре: __http://habrahabr.ru/post/84277/
Такой же механизм используется в фильтре грида.
 
Добавлено:
А надо ли вообще фильтр?
Насколько я понял из скрина - там везде мастер-детал зависимость - фильтр будет громоздким решением, имхо.
По быстрому, навскидку, можно грид прикрутить многоуровневый или пару (чтобы не сильно много вложений было).

Всего записей: 90 | Зарегистр. 15-12-2005 | Отправлено: 21:00 09-02-2015
X11



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

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

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 21:50 09-02-2015
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
ну тут на картинке по идее 4 штуки TcxGrid с checkColumn, в коде видимость/невидимость проставляется и фильтрация там же
 
З.Ы.
вот интересно, если выбраны, как на картинке дома 1 и 2 - ведь у каждого будет квартира №1  
или если выбрать 2 населенных пункта и у каждого улица Ленина - что будет

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 02:01 10-02-2015 | Исправлено: ant0ni02004, 02:01 10-02-2015
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ant0ni02004
ну по существующей структуре базы у каждого населенного пункта свои улицы, то есть теоретически в таблице улиц может быть 100 улиц Ленина.
Ето фильтр отбора абонентов по адресному признаку - город/улица - мастер-датайл - каждый абонент привязан к улице, у каждого абонента свой дом-квартира.
Так что запрос отрабатывает корректно .
Просто я думал что у девок есть похожие готовые панельки фильтров, а через гриды немного придется посношаться с временными таблицами.

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 15:45 10-02-2015
Andryshok



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

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 00:51 17-02-2015
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andryshok
cxSpreadSheet1.Sheet.GetCellObject(1,2).CellValue

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 08:43 17-02-2015
Andryshok



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

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 09:55 17-02-2015 | Исправлено: Andryshok, 09:56 17-02-2015
MagistrAnatol



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

Код:
void __fastcall TfrmOper::AdvMultiButtonEdit2Change(TObject *Sender)
{
if (AdvMultiButtonEdit2->Text!="")
{
    V_sprOper->DataController->Filter->BeginUpdate();
    TcxFilterCriteriaItemList *AItemList = V_sprOper->DataController->Filter->Root->AddItemList(fboAnd);
    AItemList->Criteria->Options>>fcoCaseInsensitive;
    AItemList->AddItem(V_sprOperOPER_NAME,foLike,"%"+AdvMultiButtonEdit2->Text+"%","%"+AdvMultiButtonEdit2->Text+"%");
    V_sprOper->DataController->Filter->EndUpdate();
    V_sprOper->DataController->Filter->Active=true;
}
else
{
V_sprOper->DataController->Filter->BeginUpdate();
V_sprOper->DataController->Filter->RemoveItemByItemLink(V_sprOperOPER_NAME);
V_sprOper->DataController->Filter->EndUpdate();
}
 
}

все отлично фильтрует - но с учетом регистра, как реализовать без учета регистра
и такой же вопрос по подсветке

Код:
void __fastcall TfrmOper::V_sprOperOPER_NAMECustomDrawCell(TcxCustomGridTableView *Sender,
          TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
          bool &ADone)
{
 if (Pos(AnsiLowerCase(AdvMultiButtonEdit2->Text),AnsiLowerCase(VarToStr(AViewInfo->Value)))>0)
{
TRect R ;
AnsiString  s1,S2;
int    X,dx,cx,C,Y;
 
 
 
  ADone = true;
  R = AViewInfo->Bounds;
  s1 = LowerCase(AViewInfo->Text);
  C = AdvMultiButtonEdit2->Text.Length();
  cx = ACanvas->TextWidth(AdvMultiButtonEdit2->Text);
  ACanvas->FillRect(R);
  X = R.Left;
 
  if (AViewInfo->Selected) ACanvas->Font->Color = clRed ;
  else ACanvas->Font->Color = clBlack;
 
  ACanvas->Canvas->TextOut(R.Left + 1, R.Top + 1, s1);
//  ACanvas->Font->Color = clRed;
//  ACanvas->Canvas->Brush->Color=clInfoBk;
  ACanvas->Font->Color = clWhite;
  ACanvas->Canvas->Brush->Color=clBlue;
 
 
  while (Y!=0)
  {
 
    Y = Pos(LowerCase(AdvMultiButtonEdit2->Text), s1);
    if (Y > 1)
    {
      S2 = s1.SubString(1,Y-1);
      dx = ACanvas->TextWidth(S2);
      s1=s1.Delete(1,Y-1);
      X=X+dx;
    }
 
    if (Y > 0)
    {
      S2=s1.SubString(1, C);
      ACanvas->Canvas->TextOut(X + 1, R.Top + 1, S2);
      s1=s1.Delete(1,C);
      X=X+cx;
 
    }
}
 
}
 
}

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 11:17 17-02-2015
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот доконал, может кому пригодится
Не пойму почему, но LowerCase и AnsiLowerCase - отрабатывали некорректно
 

Код:
void __fastcall TfrmOper::AdvMultiButtonEdit2Change(TObject *Sender)
{
String txtToFind=AnsiUpperCase(AdvMultiButtonEdit2->Text);
 
V_sprOper->Invalidate(true);
 
if (txtToFind!="")
{
    V_sprOper->DataController->Filter->BeginUpdate();
    TcxFilterCriteriaItemList *AItemList = V_sprOper->DataController->Filter->Root->AddItemList(fboAnd);
    AItemList->Criteria->Options>>fcoCaseInsensitive;
    AItemList->AddItem(V_sprOperOPER_NAME,foLike,"%"+txtToFind+"%","%"+txtToFind+"%");
    V_sprOper->DataController->Filter->EndUpdate();
    V_sprOper->DataController->Filter->Active=true;
}
else
{
V_sprOper->DataController->Filter->BeginUpdate();
V_sprOper->DataController->Filter->RemoveItemByItemLink(V_sprOperOPER_NAME);
V_sprOper->DataController->Filter->EndUpdate();
}
txtToFind=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TfrmOper::V_sprOperOPER_NAMECustomDrawCell(TcxCustomGridTableView *Sender,
          TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
          bool &ADone)
{
TRect  ARect, ATextToDrawRect;
String  ACellText, ASearchText, ATextToDraw;
int  ACol;
int  i, iStart;
 
    ACol = AViewInfo->Item->Index;
 
    ACanvas->Canvas->Brush->Style = bsSolid;
    ACanvas->Canvas->FillRect(AViewInfo->Bounds);
 
    ACellText = AViewInfo->GridRecord->DisplayTexts[0];
    ATextToDraw = ACellText;
 
    ASearchText = AdvMultiButtonEdit2->Text;
 
 
    ARect = AViewInfo->TextAreaBounds;
 
    iStart = Pos(AnsiUpperCase(ASearchText), AnsiUpperCase(ACellText));
 
    if (ASearchText.Length() > 0  && iStart > 0)
    {
    // Draw pre-matched text
      ATextToDrawRect = ARect;
      ATextToDraw = ACellText.SubString(1, iStart - 1);
      if (ATextToDraw != "" )
      {
        ATextToDrawRect.Right = ATextToDrawRect.Left + ACanvas->TextWidth(ATextToDraw);
 
        SetBkMode(ACanvas->Handle, TRANSPARENT);
        ACanvas->Font->Assign(AViewInfo->Style->Font);
        ACanvas->FillRect(ATextToDrawRect);
        ACanvas->DrawTexT(ATextToDraw, ATextToDrawRect, DT_LEFT);
 
        ATextToDrawRect.Left = ATextToDrawRect.Right;
      }
     // Draw matched text
      ATextToDraw = ACellText.SubString(iStart, ASearchText.Length());
      ACanvas->Font->Color = clWhite;
      ACanvas->Brush->Color = clGreen;//clBlue;
      ACanvas->Font->Style=TFontStyles()<<fsBold;
      ATextToDrawRect.Right = ATextToDrawRect.Left + ACanvas->TextWidth(ATextToDraw);
      ACanvas->FillRect(ATextToDrawRect);
      ACanvas->DrawTexT(ATextToDraw, ATextToDrawRect, DT_LEFT);
 
      // Prepare post-matched text
      ATextToDrawRect.Left = ATextToDrawRect.Right;
      ATextToDrawRect.Right = ARect.Right;
      ARect = ATextToDrawRect;
      ATextToDraw = ACellText.SubString(iStart + ASearchText.Length(), ACellText.Length());
    }
    SetBkMode(ACanvas->Handle, TRANSPARENT);
    ACanvas->Font->Assign(AViewInfo->Style->Font);
    ACanvas->DrawTexT(ATextToDraw, ARect, 0);
 
    ADone = true;
 
}

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 14:56 17-02-2015
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol Не хотите ли выучить тег more , у вас простыни на всю страницу

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 01:50 20-02-2015
xpin2013



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

Цитата:
Помогите допилить фильтр  


Цитата:
AItemList->Criteria->Options>>fcoCaseInsensitive;

1)Могу конечно ошибаться, но мне кажется - указав эту опцию Вы никак не сможете напугать оператор like. Насколько известно - like соответствует одноимённому оператору SQL. В его задачи входило не просто определить есть ли такой текст %bla-bla%, а гораздо более - соответствует ли поле определённой маске. Можно писать знак ? можно не ставить % можно написать %1%2% - это не просто есть 1 и 2 - это ещё и 1 идёт перед 2. Когда порядок неважен пишут like %1% and like %2%. Выполняя SQL запрос Вы не можете указать CaseInsensitive, его нет в синтаксисе like и никто Вам приводить строки к верхнему регистру, перед вычислением маски не будет. SQL сервера не знают, что Вам регистр не важен и будут вычислять только с учётом регистра. На месте Девок, я бы это реализовал. Но думаю они боялись шокировать этим пользователей. Никто ведь заранее не предупреждён что опция fcoCaseInsensitive способна повлиять на like. Скорее наоборот - все ожидают, что она никак не влияет. Можно было красиво добавить fcoLikeCaseInsensitive.
 
2)Очень насторожило что если строка меняется и не пустая, фильтры только добавляются, накапливаются даже в том случае, если в тексте уже вообще не существует ранее добавленного "%"+txtToFind+"%". Так и было задумано?
 
3)В первой перерисовке где while (Y!=0) возможно Y=0, нигде до этого условия изменения переменной Y я не увидел.
 
4)Вторая перерисовка где   ACellText = AViewInfo->GridRecord->DisplayTexts[0]; я бы реально проверил поставив breakpoint. Незнаю, у Вас можно ставить breakpoint? По идее DisplayTexts[0] я бы понимал как текст нулевой колонки. Какие то гриды умеют рисовать колонку с номером записи либо квадратиком для позиции в гриде. У них нулевая колонка это тот квадратик. У других гридин колонки можно менять местами, когда 0 это позиция, а когда номер колонки я не знаю - тупо проверяю. Если нет брейкпоинтов, можно тупо добавить параметры Pos(AnsiUpperCase(ASearchText), AnsiUpperCase(ACellText)); в отдельную пустую мемку. По идее мы увидим даже все записи, а не только первую которую рисуем. Если событие вызывается на каждую ячейку, то у вас будет дублирование текста нулевой колонки например.
 

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 08:07 20-02-2015
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите, можно ли PopUp для cxExtLookupComboBox показать в виде формы?

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 20:07 25-02-2015
Открыть новую тему     Написать ответ в эту тему

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