Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429

Пикчербокс нестандартной формы - не работает

04.01.2018, 18:52. Показов 1186. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! С Новым Годом всех!

Скачал пример из сети - PictureBox нестандартной формы. Но не работает. Подскажите, в чём моя ошибка?

Visual Basic
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
Option Explicit
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
 
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
 
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Sub ReleaseCapture Lib "user32" ()
 
    Dim P(50) As POINTAPI
    Dim Rgn As Long
 
    Private Sub cmdCreatePolygon_Click()
 
        P(0).X = 132: P(0).Y = 6
        P(1).X = 173: P(1).Y = 64
        P(2).X = 303: P(2).Y = 71
        P(3).X = 213: P(3).Y = 123
        P(4).X = 291: P(4).Y = 241
        P(5).X = 157: P(5).Y = 154
        P(6).X = 5: P(6).Y = 239
        P(7).X = 78: P(7).Y = 103
        P(8).X = 10: P(8).Y = 58
        P(9).X = 100: P(9).Y = 60
        P(10).X = 132: P(10).Y = 6
 
        Rgn = CreatePolygonRgn(P(0), 11, 0)
 
        Call SetWindowRgn(Picture1.hwnd, Rgn, True)
       
    End Sub
 
    Private Sub cmdCreateEllipse_Click()
        Call SetWindowRgn(Picture1.hwnd, CreateEllipticRgn(0, 0, 299, 200), True)
    End Sub
 
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
            Call ReleaseCapture
            Call SendMessage(Picture1.hwnd, &HA1, 2, 0&)
        End If
    End Sub
SetWindowRgn с CreateEllipticRgn работает нормально, а вот с CreatePolygonRgn - ноль реакции
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2018, 18:52
Ответы с готовыми решениями:

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

Создание нестандартной формы на VB
Подскажите кто-нить можно ли создать в vb6 форму не стандарную(квадратную), а например: круглую либо в виде текста??? ...

Кнопка нестандартной формы
Нужно создать кнопку нестандартной формы, как показано на картинке. Собственно, технически это может быть и не кнопка вовсе, а, например,...

28
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,739
Записей в блоге: 14
04.01.2018, 20:02
Откуда скачал? Нужен весь проект и описание.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
04.01.2018, 20:13
Ошибка в 3-м параметре функции CreatePolygonRgn
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
04.01.2018, 20:14
Может как-то так ?
Visual Basic
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
Option Explicit
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
    Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Sub ReleaseCapture Lib "user32" ()
    Dim P(50) As POINTAPI
    Dim Rgn As Long
 
    Private Sub cmdCreatePolygon_Click()
        P(0).X = 132: P(0).Y = 6
        P(1).X = 173: P(1).Y = 64
        P(2).X = 303: P(2).Y = 71
        P(3).X = 213: P(3).Y = 123
        P(4).X = 291: P(4).Y = 241
        P(5).X = 157: P(5).Y = 154
        P(6).X = 5: P(6).Y = 239
        P(7).X = 78: P(7).Y = 103
        P(8).X = 10: P(8).Y = 58
        P(9).X = 100: P(9).Y = 60
        P(10).X = 132: P(10).Y = 6
        Dim i As Integer, rNew
        Rgn = CreatePolygonRgn(P(0), 11, 1)
        For i = 1 To 10
           rNew = CreatePolygonRgn(P(i), 11, 1)
           CombineRgn Rgn, Rgn, rNew, 2
           DeleteObject rNew
        Next i
        Call SetWindowRgn(Picture1.hwnd, Rgn, True)
    End Sub
Миниатюры
Пикчербокс нестандартной формы - не работает  
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
04.01.2018, 20:55
Цитата Сообщение от The trick Посмотреть сообщение
Ошибка в 3-м параметре функции CreatePolygonRgn
Извините, был неправ , тогда мой код можно выбросить в пропасть
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
04.01.2018, 23:39  [ТС]
Большое вам спасибо! Понял ошибку - о, эта вечная ламерская невнимательность! Я устал сам от себя!

Catstail:http://visualprogs.ru/states/17.html (впрочем, уже не имеет значения)

2 The trick (и другим тоже)

Программа представляет собой “резалку” больших рисунков (bmp, jpg, gif, png)на меньшие блоки с последующей записью этих блоков в виде отдельных файлов.
Формирование блоков:
1. Горизонтальными и вертикальными линиями – линии рисуются при клике на рисунке, столбцы и строки получаются произвольной ширины-высоты, режим рисования вертикальных и горизонтальных линий – раздельный, у меня так реализовано, поскольку на правую клавишу подвешено стирание, а на среднюю - лупа.
Должна быть возможность последующего изменения цвета линий и и перемещения мышью (в VB6 я пользуюсь XOR-рисованием)

2. Числовое задание грида – пользователь задаёт кол-во столбцов и строк, программа рисует соответствующие линии на равных расстояниях, все столбцы имеют одинаковую ширину, все строки – одинаковую высоту
Должна быть возможность последующего изменения цвета линий и естесственно,их стирания

1 и 2 пункты - нет проблем, сделано
'---------------------------
3. Блоками-прямоугольниками. Пользователь нажимает клавишу мыши и не отпуская, тянет курсор – рисуется прямоугольник. Пользователь должен иметь возможность в любой момент перемещать и стирать любой ранее нарисованный прямоугольник и изменять его размеры, а также степень прозрачности и цвет и цвет ограничивающих линий, бордера

4. Блоками-многоугольниками произвольной формы. Кликами на рисунке рисуется многоугольник. Пользователь должен иметь возможность в любой момент перемещать и стирать любой ранее нарисованный многоугольник и изменять его форму и размеры, а также степень прозрачности и цвет и цвет ограничивающих линий, бордера

То есть для меня следующие проблемы:
1) Рисовать прямоугольники и многоугольники линиями – представляю, как перемещать и менять размеры этой “конструкции”, но не получится закраска полупрозрачным цветом
2) подставлять после рисования линий Picturebox? – но у него нет действительной прозрачности
3) подставлять после рисования линий Label? – он прозрачен, но не могу изменять цвет бордера, у него нет hwnd и не могу сделать из него многоугольник и не могу закрашивать прозрачным цветом
4) подставлять после рисования линий Form? –прозрачность есть, AlphaBlend даёт полупрозрачные цвета, регионами можно делать многоугольник, возможно можно будет что-то сделать и с цветом бордера – но громоздить 10-20 форм – ну очень по ламерски, изврат какой-то.

Таков ход мыслей ламера. Но что вы, профи, посоветуете?

PS1
Mikle рекомендует использовать его SR2D - крутая штука, ещё б понять как ею начать пользоваться
PS2
Скачал откуда-то CorelDraw-подобную программу на Visual Basic-e -там реализовано всё, что мне надо и гораздо больше, даже градиентная полупрозрачная двухцветная заливка фигур есть, но вычленить нужные мне моменты не смог, для меня очень сложно
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
05.01.2018, 12:06
Цитата Сообщение от giaber Посмотреть сообщение
1) Рисовать прямоугольники и многоугольники линиями – представляю, как перемещать и менять размеры этой “конструкции”, но не получится закраска полупрозрачным цветом
Для этого лучше использовать GDI+, но можно использовать AlphaBlend, Direct2D. Вот накидал примерчик с GDI+, но нужно всегда форму закрывать крестиком, т.к. деинициализация GDI+ должна производиться после уничтожения объектов.

Цитата Сообщение от giaber Посмотреть сообщение
2) подставлять после рисования линий Picturebox? – но у него нет действительной прозрачности
3) подставлять после рисования линий Label? – он прозрачен, но не могу изменять цвет бордера, у него нет hwnd и не могу сделать из него многоугольник и не могу закрашивать прозрачным цветом
4) подставлять после рисования линий Form? –прозрачность есть, AlphaBlend даёт полупрозрачные цвета, регионами можно делать многоугольник, возможно можно будет что-то сделать и с цветом бордера – но громоздить 10-20 форм – ну очень по ламерски, изврат какой-то.
Нужно просто делать свой уровень абстракций. Не нужно делать эти микрообъекты отдельными окнами, а нужно создавать пользовательские объекты которые ведут себя нужным образом и отрисовывать их в одном окне как в моем примере. Также задавать для них поведение (реакция на клики, перемещения курсора и т.д.), можно это дело обернуть в юзерконтрол который будет давать нужные события и инкапсулировать все детали реализации внутри.
Хотя, если не ошибаюсь, начиная с Win8 уже есть возможность задания "слоеного" стиля дочерним окнам, что позволяет для них делать 32bpp прозрачность.
Вложения
Тип файла: zip 2D_test.zip (4.2 Кб, 10 просмотров)
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
05.01.2018, 21:12  [ТС]
БОЛЬШОЕ спасибо, The Trick! Это именно то, что надо, класс! Нда-а-а... "Бриан! – говорили они с жаром. – Вот это голова!" Но как всегда, ни фига не понятно
Пытаюсь понять хоть что-то. Завтра опять буду задавать идиотские вопросы

Кстати, может мне почитать что-нибудь по GDI+ ? Посоветуйте, пожалуйста, самые простые книжки, что-нибудь типа "GDI+ для чайников"
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
05.01.2018, 23:34
Цитата Сообщение от giaber Посмотреть сообщение
Кстати, может мне почитать что-нибудь по GDI+ ?
https://msdn.microsoft.com/ru-... .110).aspx
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.01.2018, 15:56  [ТС]
Извините за долгое отсутствие! Праздники, блин...
Нда-а-а… В общем, 3 дня пытался разобраться – так ни фига и не понял. Пока единственное, что я изыскал это то, что в:
1.
Visual Basic
1
AddFigure 10, 10, 100, 150, &H80FF00FF, &HFF0000FF
Создаётся фигура и добавляется в коллекцию с соответствующей позицией и размерами
2.
Visual Basic
1
GdipCreatePen1 0, 0, UnitPixel, hPen
второй параметр - толщина рамки в пикселях

3. Понял что при MouseDown в
Visual Basic
1
Private Function SetCursor(ByVal x As Single, ByVal y As Single) As Ifigure
определяется на какой именно прямоугольник было кликнуто, этот прямоугольник – cSelFig
и вроде бы понятны манипуляции с изменением размеров и перемещением - ну здесь как бы ничего нового нет, поэтому и понятно 
ну вот и всё, что я смог понять.
Сейчас медленно и внимательно рисую в Visio блок-схему всей структуры – по-другому моему гуманитарному уму не пробиться через эти дебри.

Но пока я сам буду разбираться (думаю, у меня это займёт не менее двух недель – если вообще пойму) вы не могли бы подсказать как задаются:
1. Цвет заливки
2. Степень прозрачности
3. Цвет канта
Можно ли этими параметрами управлять в рантайме?

4. Почему форма окрашивается в фиолетовый цвет и как этим управлять.
5. Если на форме лежит PictureBox он перекрывает нарисованные фигуры. У меня в проге как раз в PictureBox, лежащий на форме, загружается рисунок, который должен быть “разкускован” и, значит, эти фигуры должны быть поверх этого рисунка. Как это делается? – ни Zorder ни Parent я не нашёл.

ЗЫ
А вот это:
Visual Basic
1
2
3
4
5
6
7
Select Case True '
           Case lDx <= 3
           Case lDy <= 3
…             
и т.д
…            
End Select
Вообще меня в ступор повергло – это что это значит – в один Select Case кучу разных проверок можно пихать?! Для меня это просто открытие, блин! Ну я тупой!
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
11.01.2018, 16:09
Цитата Сообщение от giaber Посмотреть сообщение
Цвет заливки
AddFigure параметр lC
Цитата Сообщение от giaber Посмотреть сообщение
Степень прозрачности
Там же. Формат цвета 0xAARRGGBB16. AA - задает степень прозрачности от 0x00 до 0xff.
Цитата Сообщение от giaber Посмотреть сообщение
Цвет канта
AddFigure параметр lB
Цитата Сообщение от giaber Посмотреть сообщение
Можно ли этими параметрами управлять в рантайме?
Да. Изменять соответствующие свойства через интерфейс IFigure.
Цитата Сообщение от giaber Посмотреть сообщение
Почему форма окрашивается в фиолетовый цвет и как этим управлять
Да. Процедура Redraw :
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Redraw()
    Dim cFig    As IFigure
    
    GdipGraphicsClear hGr, &HFF8080FF
    
    For Each cFig In cFigures
        cFig.Draw hGr
    Next
    
    Me.Refresh
    
End Sub
&HFF8080FF - цвет фона в том же формате.
Цитата Сообщение от giaber Посмотреть сообщение
Если на форме лежит PictureBox он перекрывает нарисованные фигуры. У меня в проге как раз в PictureBox, лежащий на форме, загружается рисунок, который должен быть “разкускован” и, значит, эти фигуры должны быть поверх этого рисунка. Как это делается? – ни Zorder ни Parent я не нашёл.
В начале есть:
Visual Basic
1
If GdipCreateFromHDC(hdc, hGr) Then GoTo CleanUp
hdc заменяй на YourPicturebox.Hdc
Цитата Сообщение от giaber Посмотреть сообщение
Вообще меня в ступор повергло – это что это значит – в один Select Case кучу разных проверок можно пихать?!
Да, вместо кучи If'ов; какое первое условие будет True, то и выполнится.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.01.2018, 22:18  [ТС]
СПАСИБО за реактивный ответ!!! Бросаюсь пробовать всё, что вы указали (разжевали)!

Добавлено через 5 часов 7 минут
С картинкой в PictureBox не получается.

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Redraw()
    Dim cFig    As IFigure    
    GdipGraphicsClear hGr, &HFFFFFFFF  
    For Each cFig In cFigures
        cFig.Draw hGr
    Next
 
    Picture1.Refresh
    
End Sub
Вместо картинки рисуется заданый цвет. Когда я убираю эту строку
Visual Basic
1
GdipGraphicsClear hGr, &HFFFFFFFF
картинка есть но при мувинге-сайзинге не рефрешится и оставляет за собой след из десятков ранее нарисованных фигур
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
11.01.2018, 22:22
Цитата Сообщение от giaber Посмотреть сообщение
картинка есть но при мувинге-сайзинге не рефрешится и оставляет за собой след из десятков ранее нарисованных фигур
PictureBox.Autoredraw чему равен?
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.01.2018, 22:53  [ТС]
При True происходит так, как я описал
При False картинка видна, фигуры не видны, но MousePointer изменяется, драггинг происходит с мгновенными проявлениями/исчезновениями фигур и сумашедшим мерцанием картинки
Это если строка
Visual Basic
1
GdipGraphicsClear hGr, &HFFFFFFFF
не отключена

Добавлено через 7 минут
При отключении этой строки и Autoredraw=False мерцание картинки начисто пропадает, но фигуры так же не видны и проявляются при драгинге на мгновения, хотя можно успеть рассмотреть, что всё происходит правильно - прозрачность, цвет - всё в норме.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
11.01.2018, 22:53
giaber,
Цитата Сообщение от The trick Посмотреть сообщение
В начале есть:
Visual Basic
1
If GdipCreateFromHDC(hdc, hGr) Then GoTo CleanUp
hdc заменяй на YourPicturebox.Hdc
Это выполнил?
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.01.2018, 23:01  [ТС]
Да, заменил сразу, уже после этого всё, что я описываю происходит
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
11.01.2018, 23:02
giaber, кидай проект сюда, должно все работать.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.01.2018, 23:05  [ТС]
Да, ещё в самом начале

Visual Basic
1
 If GdipCreateFromHDC(Picture1.hdc, hGr) Then GoTo CleanUp
уже с этим изменением происходит всё то, что я описываю

Добавлено через 23 секунды
Минутку
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.01.2018, 23:12  [ТС]
Вот пожалуйста...
Вложения
Тип файла: zip The trick для PicCut.zip (8.15 Мб, 5 просмотров)
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
11.01.2018, 23:20
giaber, выставил Autoredraw = True - все заработало:
Вложения
Тип файла: zip The trick для PicCut.zip (8.14 Мб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2018, 23:20
Помогаю со студенческими работами здесь

Кнопка нестандартной формы
Нужно создать кнопку нестандартной формы, как показано на картинке. Собственно, технически это может быть и не кнопка вовсе, а, например,...

Кнопка нестандартной формы
Может кто-то сталкивался в версткой такой или похожей кнопки? Или просто видел что-то похожее реализованное? Есть возможность отрисовать ее...

Кнопки нестандартной формы
Подскажите, как можно сделать

PictureBox нестандартной формы
Доброго времени суток дорогие форумчане, пишу проект игрового лаунчера, и вот мне надо сделать картинки Login, Exit, Settigns но они не...

Окно нестандартной формы!
Здравствуйте, интернет весь перекопан, надеюсь на вашу помощь! Возможно ли сделать окно не простой прямоугольной формы, а к примеру в форме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru