Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 266.
Информационный Канал Subscribe.Ru |
Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 266.
VBNet
VBMania
Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск...
Читайте! Содержание выпуска
Новости сайта VBNet
Последние 20 тем форума на VBNet.Ru: 11:27 / 20 май. Новости сайта 2 | Хитов: 1 | Ответов: 0 11:27 / 20 май. "Компиляция на лету" - как отменить | Хитов: 1 | Ответов: 0 08:45 / 20 май. Распалажение формы на десктопе | Хитов: 16 | Ответов: 2 07:02 / 20 май. Хост с поддержкой email | Хитов: 6 | Ответов: 0 06:16 / 20 май. нужен ftp c докачкой | Хитов: 6 | Ответов: 0 23:40 / 19 май. Shortcut запускает Setup вместо приложения | Хитов: 4 | Ответов: 0 23:13 / 19 май. Кто знает как изменить частоту обновления экрана? | Хитов: 7 | Ответов: 0 23:03 / 19 май. Парсинг HTML-страницы? | Хитов: 6 | Ответов: 0 19:38 / 19 май. Сеть | Хитов: 31 | Ответов: 3 19:33 / 19 май. 3D | Хитов: 9 | Ответов: 0 19:28 / 19 май. Помогите с Word | Хитов: 1 | Ответов: 0 19:22 / 19 май. Пожалуйста, помогите написать программу. Очнь с... | Хитов: 31 | Ответов: 1 19:11 / 19 май. Помогите с Word | Хитов: 5 | Ответов: 0 19:04 / 19 май. Новое сообщение без темы | Хитов: 1 | Ответов: 0 19:04 / 19 май. Новое сообщение без темы | Хитов: 1 | Ответов: 0 16:26 / 19 май. Помогите с макросом для Exel... | Хитов: 7 | Ответов: 1 15:19 / 19 май. А шо за "хитов"? | Хитов: 19 | Ответов: 2 15:06 / 19 май. Анимационный курсор | Хитов: 47 | Ответов: 5 14:46 / 19 май. Макросы в Access, уровень безопасности | Хитов: 10 | Ответов: 0 14:26 / 19 май. VBA и SQL | Хитов: 8 | Ответов: 0 Последние поступления в Библиотеку кодов: наверх Новости сайта MSDN наверх Новости сайта GotdotNet Новые статьи:
наверх Новости сайта dotSite Новые статьи: Новые примеры: наверх Один момент из жизни форума: Обои рабочего стола - расположение Адерес темы: http://vbnet.ru/forum/show.asp?id=43196 Вопрос: Автор вопроса: LamerOnLine Знаю, как положить bmp на рабочий стол. А вот как задать метод расположения - по центру, растянуть, замостить? Ответы: Автор: Unguided Проверил на WinXP sp1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Const SPI_SETDESKWALLPAPER = 20 Const SPIF_UPDATEINIFILE = &H1 Const REG_SZ = 1 ' Unicode nul terminated string Const HKEY_CURRENT_USER = &H80000001 Function SetStyle(St As Long) Dim Ret As Long Dim Tile As String, Style As String Select Case St Case 0 Tile = "0" style="0" Case 1 Tile = "1" style="0" Case 2 Tile = "0" style="2" Case Else End Select RegOpenKey HKEY_CURRENT_USER, "Control Panel\Desktop", Ret RegSetValueEx Ret, "TileWallpaper", 0, REG_SZ, ByVal Tile, Len(Tile) RegSetValueEx Ret, "WallpaperStyle", 0, REG_SZ, ByVal Style, Len(Style) RegCloseKey Ret End Function Private Sub Form_Click() '0 - По центру '1 - Замостить '2 - Растянуть SetStyle (0) Sleep (500&) SystemParametersInfo SPI_SETDESKWALLPAPER, ByVal 0&, ByVal "C:\1.bmp", True End Sub наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Вопросы: Автор вопроса: Andrey Ответ ожидается по этому адресу Подскажите функцию, обратную Hex(). Автор вопроса: Учебный центр Ответ ожидается по этому адресу Как считывать данные из ячеек Excel? Автор вопроса: lux@kogalym.ru Ответ ожидается по этому адресу У кого есть пример работы с Winsock, мне нужно открыть порт, набрать ттелефонный номер и передать файл на другой комп. Автор вопроса: YoD Ответ ожидается по этому адресу Если у меня есть элемент упраления с именем ds, как мне в процессе выполнения программы (на VB .NET) сделать ещё таких 50, и чтобы их события тоже можно было обрабатывать? Автор вопроса: kolorit Ответ ожидается по этому адресу Как выдать список таблиц имеющихся в БД Access в ListBox? И подключать их через нее? Если можно, то пришлите пожалуйста код программы, или укажите где это можно найти. Автор вопроса: Pavel Grigoriev Ответ ожидается по этому адресу Как отслеживать запуск приложению в vb6, и проверять состояние окон, свернуто или нет? Автор вопроса: Pavel Grigoriev Ответ ожидается по этому адресу Как послать команду приложению, чтоб например свернуть? Автор вопроса: Учебный центр Ответ ожидается по этому адресу Как считать данные из Excel файла ( не открывая его )? Автор вопроса: zek Ответ ожидается по этому адресу Почему при выяове обычного диологового окна (MsgBox) таймер выключаеться, а когда закрываешь MsgBox, он снова включаеться, как от этого избавиться? Ответы: Вопрос: Подскажите, как написать контрол таймера для VBA. Ответ: Автор ответа: Markelov Eduard Вот кстати правильно сказано автором конфы: "Читайте MSDN, господа!" Если бы вы следовали этому простому совету, то не задавали бы таких вопросов. Ну а если серьёзно, то можно использовать API: UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); В переводе на VB это выгледит так: public declare function SetTimer lib "user32" (hWnd as long, nIDEvent as integer, uElapse as integer, lpTimerFunc as long) as integer public sub TimerProc(hWnd as long, uMsg as integer, idEvent as integer, dwTime as long) end sub В качестве 4-го параметра SetTimer по идее нужно передать: AddressOf TimerProc Честно говоря сам не пробовал, но по идее должно получиться. Проще конечно вытащить из VB этот контрол. Вопрос: Как(ой)ие *.ocx нужны чтобы звонить на другой модем через телефонную линию? Ответ: Автор ответа: Markelov Eduard А в VB6 этот контрол уже есть. Microsoft Comm Controll называется. Вопрос: Я создал вяломщик ZIP паролей, принцип его действия таков: ВБ открывает через командную строку файл (создаю *.bat и запускаю через shell(c:\*.bat)) Затем программа передает фокус приложению (командой AppActivate) и пускает горячие клавиши разархивации. После идет примерно следующее: for i=1 to 100 select case i case 1: b="a" case 2: b="b" ... case 100 b="Я" for i1=1 to 100 select case i1 case 1: c="a" case 2: c="b" ... case 100 b="Я" for i2=1 to 100 ... for i3=1 to 100 ... Отправка a & b & c & ... & t next i25 next i24 ... next i1 next i Так вот: а) как можно открывать файлы (кроме *.txt *.exe и *.bat), не используя командной строки? б) как можно, не открывая ZIP - файл, перебирать пароли? в) программа AZRP (тоже ломает пароли) взламывает пароль ия 5 символов за 2 мин., моя за 5-6 и более... г) вставляя kol=kol+1: Label= "Проверено паролей: " & kol сам label становится пустым, т.е цикл его постоянно обновляет и он не успевает отображать, так как сделать прерывание, чтобы label не пустовал? Ответ: Автор ответа: C...R...a...S...H г) В цикле поставь условие if i mod 2 =0 then Label= "Проверено паролей: " & kol 'Лучше сделай 1 label с текстом, а другой с кол-вом, будет быстрее работать end if б) скачай контрол для работы с zipом в) Производительность в VB по сравнению с C++ оставляет желать лучшего, попробуй другой алгоритм перебора: dim Словарь() as variant 'Этот тип поддерживает функцию Array Словарь()=array(А,а,Б,б,в,В....,"") for i=0 to ubound(Словарь) for i2=0 to ubound(Словарь) for i3=0 to ubound(Словарь) отправка Словарь(i),Словарь(i2)..... Вопрос: Как сделать форму полупрозрачной или прозрачной? Ответ: Автор ответа: Solomentsev Alexey Public Const LWA_COLORKEY = &H1 Public Const LWA_ALPHA = &H3 Public Const GWL_EXstyle="(-20)" Public Const WS_EX_LAYERED = &H80000 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'hWnd - манипулятор окна, Layered - степень прозрачности от 0 до 255 Public Function SetTransparent(hwnd As Long, Layered As Byte) As Boolean On Error GoTo 1 Dim ret As Long 'Определяем стиль нужного окна ret = GetWindowLong(hwnd, GWL_EXSTYLE) 'Задаём стиль окна как заслоённый ret = ret Or WS_EX_LAYERED SetWindowLong hwnd, GWL_EXSTYLE, ret 'Задём степень прозрачности окна SetLayeredWindowAttributes hwnd, 1, Layered, LWA_ALPHA SetTransparent = True 1 Exit Function End Function Ответ: Автор ответа: Markelov Eduard Опять процетирую автора конфы: "Читайте MSDN, господа!" Вот вырезка из вышеупамянутого чтива. Но учти, что SetLayeredWindowAttributes присутствует в виндах начиная с w2k. 'Create a new Standard EXE project in Visual Basic. Form1 is created by default. 'Add the following code to the General Declarations section of Form1: Private Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function SetLayeredWindowAttributes Lib "user32" _ (ByVal hwnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, _ ByVal dwFlags As Long) As Long Private Const GWL_EXstyle="(-20)" Private Const WS_EX_LAYERED = &H80000 Private Const WS_EX_TRANSPARENT = &H20& Private Const LWA_ALPHA = &H2& Option Explicit Private Sub Form_Load() Dim lOldStyle As Long Dim bTrans As Byte ' The level of transparency (0 - 255) bTrans = 128 lOldstyle="GetWindowLong(Me.hWnd," GWL_EXSTYLE) SetWindowLong Me.hWnd, GWL_EXSTYLE, lOldStyle Or WS_EX_LAYERED SetLayeredWindowAttributes Me.hWnd, 0, bTrans, LWA_ALPHA End Sub 'Run the example program by pressing the F5 key. 'The form should look like a normal Visual Basic window. 'However, windows that are lower in the Z order should be partially visible through the window. 'It is also possible to make mouse events go through to the lower windows by changing the preceding code line SetWindowLong Me.hwnd, GWL_EXSTYLE, lOldStyle Or WS_EX_LAYERED 'to: SetWindowLong Me.hwnd, GWL_EXSTYLE, lOldStyle Or WS_EX_LAYERED Or WS_EX_TRANSPARENT Ответ: Автор ответа: Роман 'На форму положить два picture box'а 'оба должны содержать картинку Const AC_SRC_OVER = &H00 Private Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Form_Load() 'KPD-Team 2000 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net Dim BF As BLENDFUNCTION, lBF As Long 'Set the graphics mode to persistent Picture1.AutoRedraw = True Picture2.AutoRedraw = True 'API uses pixels Picture1.ScaleMode = vbPixels Picture2.ScaleMode = vbPixels 'set the parameters With BF .BlendOp = AC_SRC_OVER .BlendFlags = 0 .SourceConstantAlpha = 128 .AlphaFormat = 0 End With 'copy the BLENDFUNCTION-structure to a Long RtlMoveMemory lBF, BF, 4 'AlphaBlend the picture from Picture1 over the picture of Picture2 AlphaBlend Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, lBF End Sub Вопрос: Как сделать так, чтобы множество image загружалось по очереди (типа как дом строить из кирпичиков), желательно без использования таймера? Хотя можно и с ним. Ответ: Автор ответа: C...R...a...S...H Private Sub Timer1_Timer() Static i As Integer If i = Image1.UBound + 1 Then Timer1.Enabled = False: Exit Sub Image1(i).Picture = LoadPicture("c:\1.jpg") DoEvents i = i + 1 End Sub Вопрос: Нужно делать WAP-браузер, но никак не могу понять формат WAP-графики. КТо может помочь? Ответ: Автор ответа: C...R...a...S...H Если мне не изменяет память (я надеюсь), то Wap графика представляет собой jpg, gif, или если на то пошло то png. Если с первыми двумя ВБ сам умеет работать, то для работы с третьим придется брать контрол, или писать алгоритм загрузки самому. Вопрос: А как вывести сумму прописью? Ответ: Автор ответа: Кулаков Алексей Очень просто. Достаточно в любом поисковике (Ramler, Yandex) задать "сумма прописью" и получите столько алгоритмов... Комментарий редактора: а лучше на vbnet.ru/subscribe почитать предыдущие выпуски рассылки, этот вопрос поднимался очень много раз :) Вопрос: Как при написании своего ActiveX сделать у него свойство (Custom), т.е. чтобы при нажатии на кнопочку "..." вылазила какая-нибудь форма. Для примера: У PictureBoxa есть свойство Picture при нажатии на него вылазит стандартное окно открытия файла, а мне нужно чтобы вместо него вылазила например form1. Короче, пишу контрол меню. Рассмотрю любые варианты. Ответ: Автор ответа: Юмагулов Азат В Add In есть такая вешь, что-то типа Property Page Wizard. Юзай ее. Вопрос: Подскажите, как из программы выключить комп. Вариант: Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long retval = ExitWindowsEx(1, 0&) Не проходит в ХР! Ответ: Автор ответа: Сергей Колосов Для VB.Net mdlShutdown.vb : Module mdlShutdown Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Public Const EWX_LOGOFF = 0 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 End Module frmMain.vb: Public Class frmMain Inherits System.Windows.Forms.Form Dim s As Long ......................... Private Sub btnlogout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlogout.Click s = ExitWindowsEx(EWX_LOGOFF, 0&) 'выход из системы End Sub Private Sub btnRestart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRestart.Click s = ExitWindowsEx(EWX_REBOOT, 0&) 'перезагрузка End Sub Private Sub btnShutDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShutDown.Click s = ExitWindowsEx(EWX_SHUTDOWN, 0&) 'выключение End Sub Ответ: Автор ответа: Белашин М.В. Разместите в модуле: Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long Public Const EWX_LOGOFF = 0 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4А это в коде: Dim s As Long 'Так можно сделать Shut down s = ExitWindowsEx(EWX_SHUTDOWN, 0&) 'Так можно сделать Log off s = ExitWindowsEx(EWX_LOGOFF, 0&) 'А так Reboot s = ExitWindowsEx(EWX_REBOOT, 0&) У меня все работает! (power) Ответ: Автор ответа: Тоша Нужно установить привилегии программы. Читай MSDN! Вопрос: Я знаю что такой вопрос здесь уже был, но все же как изменить разрешение экрана. Допустим на 800x600. Ответ: Автор ответа: Markelov Eduard ' display functions, constants and types ' using with ChangeDisplaySettings() Public Const CDS_FULLSCREEN = 4 Public Const DISP_CHANGE_SUCCESSFUL = 0 ' using with DEVMODE Public Const DM_BITSPERPEL = &H40000 Public Const DM_PELSWIDTH = &H80000 Public Const DM_PELSHEIGHT = &H100000 Public Const DM_DISPLAYFREQUENCY = &H400000 Public Const CCHDEVICENAME = 32 Public Const CCHFORMNAME = 32 ' using with EnumDisplaySettings() Public Const ENUM_CURRENT_SETTINGS = -2 Public Const ENUM_REGISTRY_SETTINGS = -3 Public Type DEVMODE dmDeviceName As String * CCHDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCHFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Long dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type ' user32.dll Public Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpDevName As Integer, ByVal iModeNum As Long, ByRef lpDevMode As DEVMODE) As Integer Public Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByRef lpDevMode As DEVMODE, ByVal dwFlags As Long) As Long ' Эта процедура заполняет ComboBox(cmbResolution) нужными мне режимами Private Sub FillModeList() Dim i As Long Dim mode As DEVMODE Dim listIndex i = 0 While EnumDisplaySettings(0, i, mode) If (mode.dmPelsWidth >= MIN_MODE_WIDTH) And (mode.dmPelsHeight >= MIN_MODE_HEIGHT) And (mode.dmBitsPerPel >= MIN_MODE_BPP) And (mode.dmDisplayFrequency >= MIN_MODE_FREQUENCY) Then cmbResolution.AddItem mode.dmPelsWidth & _ "x" & mode.dmPelsHeight & "x" & _ mode.dmBitsPerPel & "bpp - " & _ mode.dmDisplayFrequency & "MHz", listIndex cmbResolution.ItemData(listIndex) = i ' set default select If (mode.dmPelsWidth = DEF_MODE_WIDTH) And (mode.dmPelsHeight = DEF_MODE_HEIGHT) And (mode.dmBitsPerPel = DEF_MODE_BPP) And (mode.dmDisplayFrequency = DEF_MODE_FREQUENCY) Then cmbResolution.listIndex = listIndex End If End If i = i + 1 Wend End Sub ' Восстанавливает режим Public Sub RestoreDefaultDisplaySettings() Dim mode As DEVMODE EnumDisplaySettings 0, ENUM_CURRENT_SETTINGS, mode ChangeDisplaySettings mode, 0 End Function ' Изменяет режим Public Function InitFullScreen(mode As DEVMODE) As Boolean mode.dmSize = Len(mode) mode.dmDriverExtra = 0 mode.dmFields = DM_BITSPERPEL Or DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY If ChangeDisplaySettings(mode, CDS_FULLSCREEN) = DISP_CHANGE_SUCCESSFUL Then InitFullScreen = True End If End Function ' Ну вот дапустим у тебя на форме есть ComboBox названый как у меня ' cmbResolution и кнопка, по нажатию на которую меняется режим. Sub FormLoad() FillModeList End Sub Sub Button_Click() Dim mode As DEVMODE EnumDisplaySettings 0, cmbResolution.ItemData(cmbResolution.listIndex), mode InitFullScreen mode End Sub ' Вот и всё, удачи! Ответ: Автор ответа: Serzh Public Const DM_BITSPERPEL = &H40000 Public Const DM_PELSWIDTH = &H80000 Public Const DM_PELSHEIGHT = &H100000 Public Const CCHDEVICENAME = 32 Public Const CCHFORMNAME = 32 Type DEVMODE dmDeviceName As String * CCHDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCHFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type Declare Function ChangeDisplaySettings Lib "user32.dll" Alias "ChangeDisplaySettingsA" (lpDevMode As DEVMODE, ByVal dwFalgs As Long) As Long Public Sub SetVideoMode(Width As Long, height As Long, Depth As Long) Dim dm As DEVMODE dm.dmPelsWidth = Width dm.dmPelsHeight = height dm.dmBitsPerPel = Depth dm.dmSize = Len(dm) dm.dmFields = DM_PELSWIDTH + DM_PELSHEIGHT + DM_BITSPERPEL ChangeDisplaySettings dm, 0 End Sub Вопрос: Как через DirectDraw поменять разрешение экрана? Ответ: Автор ответа: ZZh Когда ты всё это дело инициализируешь, прописываешь Call dd.SetDisplayMode(dispX, dispY, dispColor, Monitor_fr, DDSDM_DEFAULT) Где dd - объект DirectDraw dispX - Разрешение по Х dispY - Разрешение по У dispColor - кол-во бит на цвет Monitor_fr - частота обновления монитора Вот и всё! Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
||||||||||||||||||||||||||||||||||
Выпуск подготовили: |
Сурменок Павел |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||