Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
21 / 24 / 1
Регистрация: 23.04.2012
Сообщений: 627
1

Как сделать скриншот ограниченный формой окна?

28.10.2017, 12:16. Показов 2153. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: необходимо создать приложение, которое бы давала возможность делать скриншот заданной области экрана. Была когда-то у меня прожка, которая представляла из себя растяжимое окно: выделяешь им нужную область и жмешь кнопку...

Собственно что-то подобное мне и нужно. Может кто поделится примерами, что-то давно я не работал с графикой в VB.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2017, 12:16
Ответы с готовыми решениями:

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

Скриншот области экрана, находящейся под формой
Делаю скриншот, вот код: Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width,...

Как сделать скриншот части экрана
Подскажите пожалуйста как сделать скриншот КУСОЧКА экрана с помощью VB2010? ! Внимание мои знания...

Как сделать скриншот с формы, но что бы белый цвет отображался как прозрачный
Как сделать скриншот с формы, но что бы белый цвет отображался как прозрачный? Кто может помочь?

6
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,517
28.10.2017, 12:59 2
Прокрутите эту страницу вниз до конца, там 10 ссылок прямо по вашей теме.
0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
28.10.2017, 14:23 3
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

uzlprog, могу предложить вот такой вариант, делал для одного из своих проектов когда-то...
Думаю именно то, что вам нужно, объяснять код не стану, он прокомментирован частично...
Примените его, если хотите, практически готовая программа.
Листинг Формы
VB.NET
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
Public Class Form1
    Dim GripWidth = 8   'ширина границы для растягивания
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim OutLineColor As Color = Color.Black
        Dim InnerLineColor As Color = Color.Black
        Me.ResizeRedraw = True 'перерисовка формы при растягивании
        Dim Caption As String = ClientArea.Width & "x" & ClientArea.Height
 
        'Закрашиваем фон заголовка формы (чтобы текст рисовался красиво)
        e.Graphics.FillRectangle(New SolidBrush(Me.BackColor), 1, 1, Me.Width - 2, 28)
 
 
        'Обводим границу Форму
        e.Graphics.DrawRectangle(New Pen(OutLineColor), 0, 0, Me.Width - 1, Me.Height - 1)
        'Обводим границу клиентской области
        e.Graphics.DrawRectangle(New Pen(InnerLineColor), GripWidth, 30, Me.Width - (GripWidth * 2) - 1, Me.Height - (GripWidth + 30) - 1)
 
        'Рисуем родную Иконку в левом верхнем углу
        e.Graphics.DrawImage(New Bitmap(Me.Icon.ToBitmap, 16, 16), New Point(GripWidth, GripWidth))
 
        'Рисуем тень для заголовка формы
        e.Graphics.DrawString(Caption, New Font("Segoe UI", 12, Me.Font.Style), New SolidBrush(Color.FromArgb(75, Me.ForeColor)), New Point(GripWidth + (GripWidth / 2) + 17, 6))
        'Рисуем текст заголовока формы
        e.Graphics.DrawString(Caption, New Font("Segoe UI", 12, Me.Font.Style), New SolidBrush(Me.ForeColor), New Point(GripWidth + (GripWidth / 2) + 16, 5))
    End Sub
 
    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_NCHITTEST As UInt32 = &H84
 
        Const HTCAPTION = &H2 'ЗАГОЛОВОК ФОРМЫ
        Const HTLEFT As UInt32 = 10 'растягиваем за левый край
        Const HTRIGHT As UInt32 = 11 'растягиваем за правый край
        Const HTBOTTOMRIGHT As UInt32 = 17 'растягиваем за право-низ
        Const HTBOTTOM As UInt32 = 15 'растягиваем за нижний край
        Const HTBOTTOMLEFT As UInt32 = 16 'растягиваем за лево-низ
        Const HTTOP As UInt32 = 12 'растягиваем за верхний край
        Const HTTOPLEFT As UInt32 = 13 'растягиваем за лево-верх
        Const HTTOPRIGHT As UInt32 = 14 'растягиваем за право-верх
 
        Dim handled As Boolean = False
 
        'перехват сообщения, чтобы вернуть системе измененный параметр растягивания HT
        If m.Msg = WM_NCHITTEST Then
 
            'курсор мыши в координатах относительно левого угла формы
            Dim clientPoint As Point = Me.PointToClient(New Point(m.LParam.ToInt32()))
 
            'Создаем прямоугольные области на форме и присваиваем им нужные параметры HT
            Dim boxes As New Dictionary(Of UInt32, Rectangle)
            boxes.Add(HTBOTTOMLEFT, New Rectangle(0, Me.Height - GripWidth, GripWidth, GripWidth))
            boxes.Add(HTBOTTOM, New Rectangle(GripWidth, Me.Height - GripWidth, Me.Width - 2 * GripWidth, GripWidth))
            boxes.Add(HTBOTTOMRIGHT, New Rectangle(Me.Width - GripWidth, Me.Height - GripWidth, GripWidth, GripWidth))
            boxes.Add(HTRIGHT, New Rectangle(Me.Width - GripWidth, GripWidth, GripWidth, Me.Height - 2 * GripWidth))
            boxes.Add(HTTOPRIGHT, New Rectangle(Me.Width - GripWidth, 0, GripWidth, GripWidth))
            boxes.Add(HTTOP, New Rectangle(GripWidth, 0, Me.Width - 2 * GripWidth, GripWidth))
            boxes.Add(HTTOPLEFT, New Rectangle(0, 0, GripWidth, GripWidth))
            boxes.Add(HTLEFT, New Rectangle(0, GripWidth, GripWidth, Me.Height - 2 * GripWidth))
            boxes.Add(HTCAPTION, New Rectangle(GripWidth, GripWidth, Me.Width - GripWidth, 30 - GripWidth))
 
            'возврат HT-параметра, выбранного в зависимости от того, в каком фрагменте окна находился курсор
            For Each hitbox In boxes
                If hitbox.Value.Contains(clientPoint) Then
                    m.Result = hitbox.Key
                    handled = True
                    Exit For
                End If
            Next
        End If
 
        'Посылаем комманду форме если курсор в созданных нами прямоугольных областях
        If Not handled Then
            MyBase.WndProc(m)
        End If
    End Sub
 
    Private Sub ctlBoxCLOSE_Click(sender As Object, e As EventArgs) Handles ctlBoxCLOSE.Click
        Me.Close()
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim file As String = String.Format("{0}\ClientAreaCapture {1}x{2}.bmp", My.Computer.FileSystem.SpecialDirectories.Desktop, ClientArea.Width, ClientArea.Height)
        Dim bmp As New Bitmap(ClientArea.Width, ClientArea.Height)
        Using g = Graphics.FromImage(bmp)
            g.CopyFromScreen(New Point(Me.Left + ClientArea.Left, Me.Top + ClientArea.Top), New Point(0, 0), ClientArea.Size)
            bmp.Save(file, Imaging.ImageFormat.Bmp)
        End Using
        bmp.Dispose()
        MsgBox("Saved to " & file)
    End Sub
End Class

Саму форму делаем без заголовков и границ, на нее кидаем панель, обзывем ClientArea, далее меняем ее цвет, такой же цвет ставим у формы в свойстве TransparencyColor... Далее я думаю разберетесь, на форме две кнопки, ЗАКРЫТЬ и СОХРАНИТЬ в файл...

Растягивание формы за границы выполнено в WindProc, думаю тоже разберетесь...
Вообщем поиграйтесь, авось что получится толковое...

Как сделать скриншот ограниченный формой окна?


Проект прилагаю.
Вложения
Тип файла: zip EXE'шник.zip (12.1 Кб, 16 просмотров)
Тип файла: zip Проект.zip (100.0 Кб, 17 просмотров)
1
1496 / 1044 / 146
Регистрация: 01.10.2009
Сообщений: 3,510
Записей в блоге: 1
28.10.2017, 18:11 4
Yury Komar,

Не по теме:

модератор? - поздравляю

1
Yury Komar
28.10.2017, 18:26
  #5

Не по теме:

XIST, растём... :)
Бардак прибирать тоже надо ;)

0
Замабувараев
28.10.2017, 21:48
  #6

Не по теме:

Если через горячие клавиши, то подойдёт Alt+PrtScr. Это помещает в буфер обмена картинку только активного окна.

0
Модератор
Эксперт .NET
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
28.10.2017, 22:39 7
Замабувараев, ему надо было, как я понял, именно выделенную область, ну я и предложил вариант такого ПО, поместил окно куда надо, растянул как надо, сфоткал... и все саму форму ему фотать ненужно, а только то, что в рамочке...
0
28.10.2017, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2017, 22:39
Помогаю со студенческими работами здесь

Как воспроизвести видео на форме и сделать с него скриншот
Конкретно сейчас меня интересует только лишь возможность проигрывания видео прямо внутри формы (то...

Как сделать скриншот с ElementHost или AxWindowsMediaPlayer с сохранением в файл
Как сделать скриншот с ElementHost или AxWindowsMediaPlayer с сохранением в файл есть пример...

Скриншот активного окна
Скриншот экрана я знаю как сделать, но как сделать скриншот активного окна? Dim bmp As Bitmap =...

WPF: как сделать что бы картинка компилировалась вместе с формой
Вот в windows forms присвоил картинку например picturebox и всё она уже внутри программы. А в wpf...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru