Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 204.


Информационный Канал Subscribe.Ru

Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 204.


VBNet VBMania
Голосование:



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • VB по русски
  • MDesign
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Новый выпуск.
    Читайте!


    Содержание выпуска




    Citycat by Email

       Программа Citycat by Email позволяет работать с сервером Subscribe.ru с помощью электронной почты. Теперь Вам не нужно тратить деньги на работу в online и просматривать мегабайты рекламы для того, чтобы подписаться на нужную рассылку! Вам просто необходимо скачать небольшую базу данных по всем рассылкам каталога с нашего сайта, после чего Вы сможете подписываться и отписываться от рассылок, заказывать архивы прошлых выпусков, выполнять поиск по каталогу рассылок и многое другое.
       Программу Citycat by Email можно бесплатно загрузить с сайта http://sapisoft.h1.ru.

    наверх


    Новости сайта VBNet

    Дата: 14.10.2003 20:53 | Раздел: Примеры кода | Автор: Alex

    Процессы - Пример демонстрирует работу с процессами и потоками.

    Дата: 13.10.2003 20:04 | Раздел: Примеры кода | Автор: Layder

    ADOcombo - От автора: Доработанный комбобокс - вторая версия. Для работы с ADO (соответственно, обязательно должна ' быть подключена библиотека microsoft ActivX Data Object) ' и SQL - тестировалось с ms access и ms sql ' Работает автоподстановка ' Загрузка данных из указанного запроса ' AfterUpdate - действия после обновления ' BeforeUpdate - действия перед обновлением - для ' корректной работы требует наличия ID_записи ' AnswerNotList - автоответ на ввод данных, ' отсутствующих в комбобоксе ' ListOnly - от значения ее зависит, создавать ли эвент ' NoInList ' ListOnlyAuto - от значения ее зависит, обрабатывать ' эвент NoInList программеру или фунции AnswerNotList ' SetToStringFromID_Record - встает на строку, ID которой ' соответствует переданному числу. ' SetToId_RecordFromString - встает на строку, текст ' которой соответствует переданному тексту. ' В случае возникновения ошибки видно, какая функция - ' внешняя или внутренняя, ее вызвала. Пример использования внутри. Кто имеет что добавить - буду рад. От User Unknown: Интересный код. Некоторым может пригодиться....

    Дата: 13.10.2003 20:00 | Раздел: Примеры кода | Автор: Millenium

    Analyzer 1.08 - От автора: Данныая программа (исходный код программы) демонстрирует как можно получать байты с звукого устройства и как работать с ними: * Как определить звуковой спектор * Как построит простой, линейный и точечный анализатор звукого сигнала * Как работать с библиотекой "winmm.dll" - waveInAddBuffer - waveInClose - waveInGetNumDevs - waveInOpen - waveInPrepareHeader - waveInReset - waveInStart - waveInStop - waveInUnprepareHeader * Как работать с библиотекой "user32" - SetWindowPos Исходный код распростроняется свободно При добавлени, изменении и модификации кода, любезно прошу выслать мне модифицированную копию программы (только исходники) В исходнике чатильно описаны все функции и команды Пример очень красиво получиося. Работоспасиобность 100%. Протестировано на следующих ОС на 100% работаспособность: Windows 98, 2000* и Me ---------------------- * В Windows 2000 по непонятным прицина шкала начинается не сначала Историю версий можете прочесть в файле history.txt Ответы на часто задаваемые вопросы (FAQ) можете прочесть в FAQs.txt.

    Дата: 13.10.2003 19:55 | Раздел: Примеры кода | Автор: Власенко Федор

    TaskPane - От автора: Данный пример показывает как можно создать панель подобие Task Pane, которая присутствует в Office XP. На самом деле там она создана иначе. У автора нет возможности развивать данную идею дальше. Так-что буду очень благодарен тому, кто исправит существующие ошибки и не забудет меня. Жду ваших реализов. С уважением, Власенко Федор. От User Unknown: Действительно неплохой код. всем, увлекающимся VBA - качать немедленно:)

    Дата: 13.10.2003 19:48 | Раздел: Примеры кода | Автор: vitus

    Студенты - От автора: Программа для Приема студентов в ВУЗ. Эта программа была сделана для нужд моего Университета но, ее не захотели использовать по этому я хочу ее предложить Вам может, что-то из нее кому-нибудь пригодиться. Цель программы, Внести в базу данных список абитуриентов , что бы в последующем автоматизированно составить приказ на зачисление, и представление на зачисление в университет, использовал в своей программе MSHFLEXGRID, DataGrid, Adodc, вроде бы. Ну вот и все если возникнут вопросы, или какая - нибудь критика все выслушаю в свой адрес. Заранее благодарен Шаркеевич Виталя. ОТ User Unknown: Простенькая база данных. Отличается интерфейсом, созданным с помощью стандартного мастера. Многое не работает, в меню "Новое в этой версии" красуется только 'Text1'. Будет полезна начинающим строителям "даза банских аппликух":-)

    Дата: 13.10.2003 19:45 | Раздел: Примеры кода | Автор: R@DIST

    Наблюдатель - От автора: Надзиратель за тем,что видит курсор,есть функция записи. От User Unknown: программа на подобии OpenPass. Есть несколько незначительных ошибок (в том числе и грамматических:)), но программа свою функцию выполняет исправно.

    Дата: 13.10.2003 19:41 | Раздел: Примеры кода | Автор: Сазонов М.А.

    Монитор - От автора: Управление монитором: вкл/выкл монитор, перевести в экономичный режим. От User Unknown: пара мессаджей для работы с монитором.

    Дата: 08.10.2003 12:36 | Раздел: Примеры кода | Автор: Last_Santa

    TrayBaloon - От автора: Как поется в некогда популярной песенке "я его слепила из того что было" :) Вобщем получился весьма неплохой клас для добавления иконки в трей и вывода так называемых Balloon Message'в. Вот.... От User Unknown: при клике на самом сообщении все равно вываливается менюшка. В остальном - очень работоспособен.



    Последние 20 тем форума на VBNet.Ru:

    11:30 / 15 окт.  Аналог команды ping на VB.Net | Хитов: 1 |  Ответов: 0
    11:25 / 15 окт.  Что лучше использовать DAO или ADO? | Хитов: 1 |  Ответов: 0
    11:15 / 15 окт.  вопрос по Fusion! | Хитов: 0 |  Ответов: 0
    10:03 / 15 окт.  Графика: углы и линии | Хитов: 2 |  Ответов: 0
    23:07 / 14 окт.  простите за оффтопик, но не знаю куда писать... | Хитов: 23 |  Ответов: 5
    21:38 / 14 окт.  Form_Keydown с Button | Хитов: 12 |  Ответов: 1
    21:14 / 14 окт.  Описание функций API на русском | Хитов: 26 |  Ответов: 4
    20:35 / 14 окт.  RAS API | Хитов: 8 |  Ответов: 0
    19:44 / 14 окт.  Иконка в трее. Как правильно убрать? | Хитов: 11 |  Ответов: 1
    18:31 / 14 окт.  Читайте все! | Хитов: 22 |  Ответов: 0
    15:37 / 14 окт.  OLE и ACCESS | Хитов: 12 |  Ответов: 0
    13:21 / 14 окт.  сохранить html страницу с картинками | Хитов: 18 |  Ответов: 2
    13:10 / 14 окт.  Розовая Звезда | Хитов: 26 |  Ответов: 2
    10:39 / 14 окт.  Опять Звонилка | Хитов: 3 |  Ответов: 0
    09:40 / 14 окт.  Тогда еще вопрос | Хитов: 40 |  Ответов: 8
    09:08 / 14 окт.  Доступ к методам | Хитов: 28 |  Ответов: 2
    06:48 / 14 окт.  PinkStar | Хитов: 27 |  Ответов: 2
    22:50 / 13 окт.  Run-time в ADODC | Хитов: 21 |  Ответов: 2
    19:44 / 13 окт.  Треугольники и циклы | Хитов: 36 |  Ответов: 4
    18:30 / 13 окт.  Как в .NET запретить запуск ещё одной копии про... | Хитов: 28 |  Ответов: 2


    Последние поступления в Библиотеку кодов:

    Стандартный диалог завершения работы (68)
    Как узнать процент соответствия двух строк (89)


    наверх


    Новости сайта MSDN



    наверх


    Новости сайта GotdotNet



    Новые статьи:



    наверх


    Новости сайта dotSite

    Новые статьи:



    Новые примеры:



    наверх


    Один момент из жизни форума: DataTable.GetChanges()

    Вопрос:
    Автор вопроса: Артём Л.

       Проблема какая-то непонятная.
    В таблице есть колонка с типом boolcolumn, тоесть с чеком.
    После загрузки данных кликаю на одном.
    Потом вызываю tbl=Table.GetChanges() - возвращается nothing.
    Если щелкнуть на 2х чеках, то Table.GetChanges() возвратится таблица только с одной строчкой. Почему-то всегда пропадает одна измененная строка.
    После сборки изменений всегда делаю ЭкцептЧенчз.


    Ответы:

    Автор: Павел
       Попробуй после чека переместиться в гриде на другую строку. Либо вызывай перед вызовом GetChanges метод EndEdit грида. Просто пока ты с этой строки не уйдёшь, изменения не пишутся в DataTable.

    Автор: Артём Л.
       Помогло вот это:

    grdData.EndEdit(Nothing, grdData.CurrentRowIndex, False)
    grdData.CurrentRowIndex = grdData.CurrentRowIndex



    наверх


    Доска объявлений

       Ищу телеработу.

    • Переводы: английский, украинский, русский.
    • Cipper программист.
    • Assembler программист.
    • PIC разработчик
    • композитор
    • Прогрессивные стили
    • 3D анимация
    • GIF анимация
    Антон Лозовский.

    наверх

    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Swift

    Ответ ожидается по этому адресу

       Как определить где (Top и Width) находится Systray (имеется в виду вся системная панель)?


    Автор вопроса: Swift

    Ответ ожидается по этому адресу

       Как сделать, чтобы программа висела в памяти и при нажатии определенной комбинации клавиш (напр. Ctrl+F8) выводилась на экран? Причем она должна ловить нажатия этих клавиш при работе пользователя совершенно в другом приложении.


    Автор вопроса: KeeL

    Ответ ожидается по этому адресу

       Как сделать чтобы прога считывала при загрузке значения из ini файла, добавляла в lisbox листы с этими значениями;
    как осуществить такое: если значение из ini равно 1 то выполняется то-то, если 0 -выполняется что-то другое?


    Автор вопроса: Nicekaifer

    Ответ ожидается по этому адресу

       Очень нужно автоматически будучи подключенным к инету:

    1. Подключиться к FTP серверу (Пароль и все дела я знаю)
    2. Записать на него, скопировать с него, удалить, и т.п.
    3. Отключиться от сервера.

    Может кто поможет готовыми процедурами или советом. Обещаю поделиться результатом с каждым из отозвавшихся!


    Автор вопроса: Элина

    Ответ ожидается по этому адресу

       Имеется кнопочная форма, как по кнопке вызвать выполнение стандартного модуля?


    Автор вопроса: Sergey

    Ответ ожидается по этому адресу

       Никак не пойму, почему при переносе документа Excel на другой комп с такой же ОС и таким же офисом, пересала работать встроенная функция MkDir в VBA?


    Автор вопроса: Костя

    Ответ ожидается по этому адресу

       Как сделать OptionButton или CheckBox прозрачным? Наподобие BackStyle property Label control.


    Автор вопроса: Кирилл

    Ответ ожидается по этому адресу

       Как добавить заставку к программе, т.е. сначала идёт запуск заставки, а после сама программа?




    Ответы:


    Вопрос:

       Как удалить файл в корзину? В vb6 и vb .net.

    Ответ:

    Автор ответа: Sergey

    Используй ф-цию ShFileOperation вместе с флагом FOF_ALLOWUNDO.


    Вопрос:

       Как сделать так, чтобы базу данных привязать к жесткому диску компа и поставить ограничения на использование программы?

    Ответ:

    Автор ответа: Anton Lozovski

    Может быть, плясать от номер тома. Узнать его можно через FileSystemObject. Правда, при переформатировании винта номер изменится.


    Вопрос:

       Какие переменные Windows возвращает функция Environ? Хотелось бы весь список.

    Ответ:

    Автор ответа: Владимир Кирко

    Список Ваших переменных, возвращаемых функцией Environ, Вы можете получить сами. Примерно таким циклом:

      Dim EnvString, Indx
      Indx = 1
      Do
       EnvString = Environ(Indx)
       Debug.Print Indx & ". " & EnvString
       Indx = Indx + 1
      Loop Until EnvString = ""
      
    Строки имеют вид <имя переменной>=<значение переменной>. Если верить MSDN, то к Environ можно обращаться не только по индексу, но и по имени переменной, т.е. по тому, что левее знака равенства..
    У меня, например, этот список состоит их 29 строк.
    Насчёт "всего списка". Это, видимо, будет некий "стандартный список" + то, что Вы зададите оператором set <имя переменной>=<значение переменной> самостоятельно.


    Вопрос:

       Идея: Моя программа запускается, определяет, что в определенной папке (на сетевом диске) находится новая версия этой программы, сообщает об этом пользователю, заменяет себя на новую версию (заменяет только EXE файл) и перезапскается уже в новой версии.

    Внимание вопрос:
    а) Как программе удалить свой собственный EXE-файл, при этом оставаясь в памяти и будучи в запущенном состоянии?
    б) Как ей перезапуститься?

    Ответ:

    Автор ответа: Alexander

    А никак! Для этого обычно используют временный пакетный файл (.cmd для WinXP/2k, .bat для Win9x/2k/XP).
    Т.е. формируют такой батник, обычно какой-то другой вызываемой программой (можно из твоего экзешника), потом завершают основную программу и запускают пакетный файл, в конце которого стоит запуск новой версии. Т.е. такие операции может сделать и вспомогательная программа: есть специальные программы для таких вещей, которые называются инсталляторы. Кроме того, WinXP/2k требуют наличия соответствующих прав администратора. Поищи в %WINDOWS%-каталоге, например, "tmpcpyis.bat", "tmpdelis.bat", "winstart.bat" и т.п. и разберись в их работе.



    Ответ:

    Автор ответа: Sergey

    Здесь вариантов может быть превеликое множество, например: локальная версия программы запускает сетевую с каким-то ключом, например путем к папке, где она установлена и закрывается. Сетевая при определенном ключе удаляет существующую версию, копирует себя на ее место и запускается.



    Ответ:

    Автор ответа: RaZoom

    'c:\myexe.exe - расположение новой версии
    'd:\myexe.exe - расположение старой версии
    Const txtBat$ = "@echo off" & vbNewLine & _
                     "copy /Y c:\myexe.exe d:\" & vbNewLine & _
                     "d:\myexe.exe" & vbNewLine & _
                     "del bat.bat"
    Dim blUpdate As Boolean

    Private Sub Command1_Click()
         blUpdate = True
         Open "c:\bat.bat" For Binary Access Write As #1
         Put #1, 1, txtBat
         Close #1
         Unload Form1
    End Sub

    Private Sub Form_Load()
         blUpdate = False
    End Sub

    Private Sub Form_Terminate()
         If blUpdate Then Shell "c:\bat.bat"
    End Sub

    Но тут два недостатка:
    1. Создается файл c:\bat.bat, который, правда, затем сам себя и убивает (не очень красиво).
    2. Нужно заботится о закрытии окна консоли после выполнения bat-файла (тут не реализовано).

    Можно пойти другим путем - запустить в Form_Terminate файл новой версии с удаленной машины и передать ему в качестве параметра куда он должен себя скопировать, после чего, запустить новую версию уже с локального диска и закрыть новую версию, запущенную с удаленного диска.


    Вопрос:

       При одновременной работе 4 и более winsock (созданных заранее и работающих на разные ІР адреса) через некоторое время появляется сообщение об ошибке "No buffer space is available”. Можно ли как-то очищать этот буфер или избежать ошибки другими способами?

    Ответ:

    Автор ответа: Ivan_R

    Наверное вы при приёме пользуетесь .PeekData, откажитесь от этого в пользу .GetData, тк PeekData, насколько я помню, только читает данные из буфера, не удаляя их.


    Вопрос:

       Я как-то спрашивал как редактировать idtag из VB и мне помогли, прислали класс для работы с tag v1 - но проблема в том что инфа из tagv2 как бы главнее и её видно в Winamp и ХРюше. Как редактировать Tag v2 - или просто стереть их?

    Ответ:

    Автор ответа: Anton Lozovski

    На прошлой недели меня мучал этот вопрос. Но как показал опрос, и взятые для примера MP3 файлы, таг ID3v2 практически никем не используется.


    Вопрос:

       Я решил несколько дополнить стандартный элемент TextBox. Создал новый Activex контрол добавил стандартный TextBox и дописал для него несколько новых свойств: получение фокуса, ввод только букв или чисел с разрешением использования разделителя используемого в системе. (подобное описано в статье Михаила Эскина, есть на многих сайтах). Затем заметил что не работает свойство DataChange и нет динамического обновления полей при связи с БД посредством элемента Data. В атрибутах процедуры Text для Data стоят все галочки. Если надо кину исходник.

    Ответ:

    Автор ответа: Alexander

    Чует моё сердце, что пытаетесь менять данные в полях БД с атрибутами числовой/логический. Это так?
    В таком случае для используются объекты StdDataValue, StdDataFormat, а не только Textbox.


    Вопрос:

       Как сделать на VB DLL-библиотеку? Если можно, пришлите пример (не сложный, но и не простой).

    Ответ:

    Автор ответа: Sergey

    Если ты имеешь в ввиду ActiveX DLL, то для этого есть отдельный шаблон (New Project). Если же просто библиотеку с экспортируемыми ф-циями, то нет.


    Вопрос:

       Я делаю прогу с множеством OCX ' ов, как сделать так, чтобы прога работала на других компах? Где-то слышал что надо OCX ' ы копировать в system32. Если так, то посоветуйте каким инсталлятором пользоваться.

    Ответ:

    Автор ответа: vmv

        Для того, чтобы твоя прога работала на других компьютерах, достаточно поместить на другом компе в корневом каталоге (рядом с твоей прогой) все задействованные OCX (для Win-98 и выше). Под Win-95 не все нынешние OCX будут работать.
         Из простых и хороших инсталяторов рекомендую - GPBuilder.



    Ответ:

    Автор ответа: Dima

    Можно скопировать его ручками, а затем - Regsvr32 <путь\OCX-файл>.



    Ответ:

    Автор ответа: Anton Lozovski

    Можно пользоваться стандартным инсталлятором, который является Add-In'ом к VB. А можно использовать туеву хучу разных инсталляторов. Они сами регестрируют ActiveX.
      
    А руками регестрить ActiveX можно через regsvr32 <имя_файла>


    Вопрос:

       Как сделать надпись под углом 45, 90 градусов? Если есть OCX ' ы, намыльте пожалуйста.

    Ответ:

    Автор ответа: Dima

    Используй вместо текста картинку.


    Вопрос:

       Имеется форма в acceess'e. Данные сохраняются естественно в таблицу. На форме имеется комбо со значениями, которые берутся из таблицы "адреса" (3 столбца код [цифровой] район [цифровой], адрес [текстовой]), необходимо чтобы при выборе адреса на форме в текстовом поле отображался район, для этого имеется таблица с районами (код [цифровой], район [текстовой]). Как это сделать я не могу связать это цифровое значение с текстовым, как заставить его брать значение района если известен его код?

    Ответ:

    Автор ответа: Alexander

    Это есть, в частности в MSDN. Найдите "Creating a DataGrid Linked to a DataList Control".
    Суть такова:
    На форме есть DataGrid1 (С ним связан некий Recodset) и по-соседству
    располагаем Datalist1 (Datalist1.style="2)."
    В Datalist1 устанавливаем свойства:
         - ListField - имя поля с текстовыми значениями списка,
         - DataField - имя поля с ID этого списка (пользователь его не видит),
         - RowSource - собственно, Recordset-источник этого самого списка (как
    правило, всего-то этих два поля в "Select...").
    Далее:
         - BoundColumn - имя поля с ID для Recordset в DataGrid (столбез, как
    правило, тоже скрываем от пользователя),
         - Datalist1.DataSource = DataGrid1.DataSource.

    Уже всё будет работать! Правда, не совсем. Изменения будут видны, если
    переоткрыть DataGrid1 :-( Это печально, т.к. если мы вносим изменения в
    текстовое поле, то они сразу видны. Этот глюк в VB6 не удаётся убрать. В
    MSDN поступают через пару .ClearFields/.ReBind:
    ----------------------------------------------------------------------------
    Private Sub Datalist1_Click()
        ' Declare a string variable that will contain a new query. The
        ' new query uses the BoundText property of the DataList control
        ' to supply a SupplierID value. The new query simply asks for
        ' all products with the same SupplierID. This query is assigned
        ' to the RecordSource property of the ADO Data control named
        ' adoProducts. After refreshing the control, the DataGrid is
        ' updated with the new recordset of all products that are
        ' supplied by the same company.

        Dim strQuery As String
        strQuery = "Select * FROM Products WHERE SupplierID = " & _
        Datalist1.BoundText

        With adoProducts
           .RecordSource = strQuery
           .Refresh
        End With

        With DataGrid1
           .ClearFields
           .ReBind
        End With
    End Sub
    ----------------------------------------------------------------------------
    Знатоки советуют использовать Bookmark. Т.е.
        Dim bkm
        With DataGrid1
             bkm = .Bookmark
             Set .RecordSource = Nothing
             Set .RecordSource = rsGrid ' т.е. пересоединяем rs
            .Bookmark = bkm
        End With

    ==========
    Сразу возникает вопрос: а как сделать выпадающий в клетке список?
    Делают Datalist1.Visible = False, а затем после позиционирования над
    DataGrid1
    Datalist1.Visible = True.
    Но и это не всё: в поле, с которым будет связан список, включают кнопку.
    Тогда всё выглядит примерно так:

    Private Sub DataGrid1_ButtonClick(ByVal ColIndex As Integer)
    Select Case ColIndex
       Case 2 ' столбец с кнопкой
           Datalist1.Width = DataGrid1.Columns(ColIndex).Width
           Datalist1.Top = DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) ' +
    DataGrid1.RowHeight
           Datalist1.Left = DataGrid1.Left +
    DataGrid1.Columns.Item(ColIndex).Left
           Datalist1.Visible = True
           Datalist1.SetFocus
    End Select
    End Sub

    Private Sub Datalist1_Click(Area As Integer)
        If Area > 0 Then
            Datalist1_KeyPress vbKeyReturn
        End If
    End Sub

    Private Sub Datalist1_KeyPress(KeyAscii As Integer)
        Dim bkmDataGrid

        If KeyAscii = vbKeyReturn Then
           If rsGrid!ID <> CByte( Datalist1.BoundText) Then
              bkmDataGrid = dgdTemplate.Bookmark
              rsTemplates!TypeEditionID = CByte( Datalist1.BoundText)
              Set dgdTemplate.DataSource = Nothing
              rsTemplates.Update
              rsTemplates.Requery
              Set dgdTemplate.DataSource = rsTemplates
              dgdTemplate.Bookmark = bkmDataGrid
              dgdTemplate.SetFocus
           End If
        End If
    End Sub

    Private Sub Datalist1_LostFocus()
        Datalist1.Visible = False
    End Sub



    Ответ:

    Автор ответа: Анатолий

    Используй для задания значения поля функцию LOOKUP(), пример посмотри в
    справке.


    Вопрос:

       Можно ли на Visual Basic отправить игре нажатие клавиш A,W,S,Z, например, игре MK4?

    Ответ:

    Автор ответа: Sergey

    Легко. Для этого есть процедура SendKeys, которая посылает задаваемые комбинации клавиш активному окну.




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел


    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу

    В избранное