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

Как сделать скриншот собственной формы

16.08.2011, 10:24. Показов 2645. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется сделать самоскриншот активной формы проги? Это возможно? Я только видел примеры скриншота всего рабочего стола...

Добавлено через 8 часов 56 минут
Нет вариантов? Нужно отскринить активное поле приложения, вроде бы где-то читал, что можно сделать средствами Vb...

Добавлено через 20 минут
Все нашел в сети вот такое решение:

Данный пример покажет, как можно сделать скриншот всего экрана, формы, 2 разных контрола и сохранить их изображения в файл. Расположите на форме 4 элемента CommandButton и элемент DirListBox (или любой другой контрол).
Не забудьте проверить, чтобы папка "C:\1\" существовала.

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
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
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long 
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long 
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long 
Private Declare Function EmptyClipboard Lib "user32" () As Long 
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long 
Private Declare Function CloseClipboard Lib "user32" () As Long 
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long 
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long 
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long 
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long 
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long 
Private Declare Function GetDesktopWindow Lib "user32" () As Long 
 
Private Const CCHDEVICENAME = 32 
Private Const CCHFORMNAME = 32 
 
Private Type RECT 
Left As Long 
Top As Long 
Right As Long 
Bottom As Long 
End Type 
 
Private 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
 
Public Sub Capture(control_hWnd As Long, fNAME As String, Optional OnlyToClipBoard As Boolean = False) 
On Error GoTo ErrorCapture 
Dim sp As RECT, x As Long 
If fNAME <> "" Then 
x = GetWindowRect(control_hWnd, sp) 
ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
If OnlyToClipBoard = False Then 
SavePicture Clipboard.GetData, fNAME 
End If 
End If 
Exit Sub 
ErrorCapture: 
MsgBox Err & ":Error in Caputre(). Error Message:" & Err.Description, vbCritical, "Warning" 
Exit Sub 
End Sub
 
Private Sub ScrnCap(Lt, Top, Rt, Bot) 
On Error GoTo ErrorScrnCap 
Dim rWIDTH As Long, rHEIGHT As Long 
Dim SourceDC As Long, DestDC As Long, bHANDLE As Long, Wnd As Long 
Dim dHANDLE As Long, dm As DEVMODE 
rWIDTH = Rt - Lt 
rHEIGHT = Bot - Top 
SourceDC = CreateDC("DISPLAY", 0&, 0&, dm) 
DestDC = CreateCompatibleDC(SourceDC) 
bHANDLE = CreateCompatibleBitmap(SourceDC, rWIDTH, rHEIGHT) 
SelectObject DestDC, bHANDLE 
BitBlt DestDC, 0, 0, rWIDTH, rHEIGHT, SourceDC, Lt, Top, &HCC0020
Wnd = 0 
OpenClipboard Wnd 
EmptyClipboard 
SetClipboardData 2, bHANDLE 
CloseClipboard 
DeleteDC DestDC 
ReleaseDC dHANDLE, SourceDC 
Exit Sub 
ErrorScrnCap: 
MsgBox Err & ":Error in ScrnCap(). Error Message:" & Err.Description, vbCritical, "Warning" 
Exit Sub 
End Sub
 
Public Sub CaptureDesktop() 
On Error GoTo ErrorCaptureDesktop 
Dim dhWND As Long, sp As RECT, x As Long 
dhWND = GetDesktopWindow 
If dhWND <> 0 Then 
x = GetWindowRect(dhWND, sp) 
ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom 
End If 
Exit Sub 
ErrorCaptureDesktop:
MsgBox Err & ":Error in CaptureDesktop. Error Message: " & Err.Description, vbCritical, "Warning"
Exit Sub 
End Sub
 
Private Sub Form_Load() 
Command1.Caption = "Экран" 
Command2.Caption = "Форма" 
Command3.Caption = "Кнопка" 
Command4.Caption = "Текстовое окно" 
End Sub 
 
Private Sub Command1_Click() 
On Error Resume Next 
Call CaptureDesktop 
SavePicture Clipboard.GetData, "C:\1\desktop.bmp" 
MsgBox "Картинка экрана сохранена в C:\1\desktop.bmp"
End Sub
 
Private Sub Command2_Click() 
On Error Resume Next 
Call Capture(Me.hwnd, "C:\1\form.bmp") 
MsgBox "Картинка формы сохранена в C:\1\form.bmp" 
End Sub
 
Private Sub Command3_Click() 
On Error Resume Next 
Call Capture(Me.Command1.hwnd, "C:\1\button.bmp") 
MsgBox "Картинка кнопки сохранена в C:\1\button.bmp" 
End Sub
 
Private Sub Command4_Click() 
On Error Resume Next 
Call Capture(Me.Dir1.hwnd, "C:\1\drv.bmp") 
MsgBox "Картинка DriveListBox сохранена в C:\1\drv.bmp" 
End Sub
Вопрос а как привезать сохранение файла к CommonDialog, то есть как необходимо преобразовать строку:

Visual Basic
1
Call Capture(Me.hwnd, "C:\1\form.bmp")
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2011, 10:24
Ответы с готовыми решениями:

Как сделать скриншот формы?
Как сделать скриншот формы? Хотелось бы реализовать хоть один из ниже перечисленных вариантов. Вариант1(в идеале): - имеется...

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

Как сделать скриншот экрана?
1. Программа через равные промежутки времени (2...5 сек) должна делать скриншот и сохранять его в любом формате, файл постоянно...

3
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
16.08.2011, 10:40
Наверное просто:
Visual Basic
1
2
CommonDialog1.ShowSave
Call Capture(Me.hWnd, CommonDialog1.FileName
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 16
16.08.2011, 11:00  [ТС]
Кабы было так просто. Пробовал, если писать:
Visual Basic
1
Call Capture(Me.hWnd, CommonDialog1.FileName)
То выдаст ошибку типов (так как правельнее написать CommonDialog1.FileName в кавычках)

Пытался просто:
Visual Basic
1
2
Dim FileName As String
Call Capture(Me.hWnd, "FileName")
А после передать FileName в CommonDialog. В итоге сохраняется файл стабильно с именем FileName без расширения, но по пути выбранному в CommonDialog. Чудеса!

P.S.: я так понимаю в Capture в скобках указан параметр пути и имени файла и есть мысля, что задавать имя файла в переменную надоть как-то по иному...
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
16.08.2011, 11:11
Расширение надо дописать самому.
Никаких ошибок у меня не вызвало
Visual Basic
1
2
3
4
5
6
Private Sub Command3_Click()
On Error Resume Next
CommonDialog1.ShowSave
Call Capture(Me.Command3.hwnd, CommonDialog1.FileName & ".bmp")
MsgBox "Картинка кнопки сохранена в " & CommonDialog1.FileName & ".bmp"
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2011, 11:11
Помогаю со студенческими работами здесь

Как сделать скриншот таблицы?
Здравствуйте! Подскажите ,пожалуйста как сделать скриншот например запроса и перенести в ворд. Я нажимаю принт и скин появляется экрана, а...

Как сделать скриншот программы
Здравствуйте проблема такая надо сделать скриншоты в турбо паскале но не какие программы по скринам не помогают пробывал во Free Pascale...

Как сделать скриншот видео?
Здравствуйте, как сделать скриншот видео с помощью php, чтобы было так же как сжатие картинки только видео? Вот это сжатие картинки: ...

[WPF] Как сделать скриншот?
Что мне надо использовать что бы сделать скриншот на с# и WPF?

Как в ДОСе сделать скриншот?
Надо сделать скрин в ДОСе. Проблема в том, что мне надо скринуть этап, который находится после проверки БИОС, но перед проверки и поиска...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru