Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/66: Рейтинг темы: голосов - 66, средняя оценка - 4.76
0 / 0 / 1
Регистрация: 12.10.2010
Сообщений: 154

Скриншот формы

09.05.2011, 20:41. Показов 12992. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать скриншот только диалогового окна, а не всего монитора?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2011, 20:41
Ответы с готовыми решениями:

Сделать скриншот свернутого приложения
Фрапс умеет такое делать.. Как бы мне делфи такому научить??? В сети есть море кода - но они лишь скринять заголовок Например вот - ...

Скриншот с указанием названия файла.
Подскажите пожалуйста как сделать скриншот формы, но название скрина брать из поля Edit? вот мой код: procedure...

Программа делающая скриншот, вылетает с ошибкой
Доброе время суток. У меня следующая проблема. Есть программа, которая должна делать скриншот экрана и она его делает. Однако, при этом,...

12
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
09.05.2011, 21:04
Специальными программами типа ASDsee Photo Menager и другими...

Добавлено через 49 секунд
Или обрезать скриншот.
0
 Аватар для ruslan_abel
34 / 34 / 14
Регистрация: 06.05.2011
Сообщений: 91
09.05.2011, 21:16
C помощью WinApi FindWindow и FindWindowEx ищется нужное диалоговое окно. С помощью GetWindowDC получить контекст окна. Затем с помощью BitBlt сделать снимок нужного окна.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
09.05.2011, 21:27
По хендлу диал.окна получаешь его контекст (GetWindowDC)

По тому же хендлу получаешь координаты окна (GetWindowRect) и расчитываешь по ним ширину и высоту окна.

В соответствии с расчетными шириной и высотой создаешь совместимый объект-битовую карту (TBitmap.Create, св-ва Width, Height)

Копируешь в созданный битмап контекст окна (источник - хенджл контекста окна, приемник - хэндл канвы созданного битмапа)

Сохраняешь объект-битмап в файл или поток.

Все, скриншот готов.

p.s.

Советы от г-на Пупорева как всегда наиценнейшие - он же Пупорев).. Знаток)
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
09.05.2011, 21:33
Зато 5 минут делов и код писать не надо...
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
09.05.2011, 22:43
Цитата Сообщение от Puporev Посмотреть сообщение
5 минут делов и код писать не надо
А речь меж тем явно мдет о дельфийской, очевидно программной реализации задачи.
А г-н Пупорев, блюститель чистоты топиков и порядка, меж тем советует "специальные программы.. Или обрезать"

Смешно ей-богу))
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
10.05.2011, 06:01
Цитата Сообщение от mss Посмотреть сообщение
А речь меж тем явно мдет о дельфийской, очевидно программной реализации задачи.
Где ты это увидел, искатель блох?
Цитата Сообщение от Raphael92 Посмотреть сообщение
Как сделать скриншот только диалогового окна, а не всего монитора?
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
10.05.2011, 15:41
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Сфотографировать активное окно можно через Alt+PrtScr. В программе можно сэмитировать нажатие этой комбинации клавиш:
Delphi
1
2
3
4
5
  //Alt+PrtScr
  keybd_event(VK_MENU, 0, 0, 0);
  keybd_event(VK_SNAPSHOT, 0, 0, 0);
  keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
Ещё способ.
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  Bm : TBitmap;
  WinRect : TRect;
  hWinDC : THandle;
begin
  Bm := TBitmap.Create;
  Bm.Width := Self.Width;
  Bm.Height := Self.Height;
  hWinDC := GetWindowDC(Self.Handle);
  BitBlt(
    Bm.Canvas.Handle,
    0,
    0,
    Bm.Width,
    Bm.Height,
    hWinDC,
    0,
    0,
    SRCCOPY
  );
  ReleaseDC(Self.Handle, hWinDC);
  Bm.SaveToFile('file1.bmp');
  Bm.Free;
end;
При этом окно не должно быть в свёрнутом виде. Этот способ фотографирует область окна "как есть". - Возможно окно будет перекрыто другими окнами.
---
mss, слушай, не создавай напряжённость в темах. Уже актуален вопрос о новой должности на форуме - "персональный модератор тем, где участвует mss".
4
0 / 0 / 0
Регистрация: 21.04.2022
Сообщений: 3
11.10.2024, 08:39
Мне тоже нужно было изображение формы, только закрытой, это оказалось еще проще:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button1Click(Sender: TObject);
var
  MyFrm: TMyFrm;
  Bm : TBitmap;
begin
    Bm := nil;
    MyFrm := nil;
    try
        MyFrm := TMyFrm.Create(self);
 
        Bm := TBitmap.Create;
        Bm := MyFrm.GetFormImage;
        Bm.SaveToFile('file1.bmp');
    finally
        MyFrm.Free;
        Bm.Free;
    end;
end;
0
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,461
11.10.2024, 09:16
Цитата Сообщение от walker1 Посмотреть сообщение
Bm := TBitmap.Create;
Эта строка лишняя.

Добавлено через 3 минуты
Плюс ещё, если формы не видно, то на картинке не появляются кнопки и надписи в компонентах.
1
0 / 0 / 0
Регистрация: 21.04.2022
Сообщений: 3
11.10.2024, 09:17
Цитата Сообщение от AzAtom Посмотреть сообщение
Эта строка лишняя.
точно, спасибо

Цитата Сообщение от AzAtom Посмотреть сообщение
Плюс ещё, если формы не видно, то на картинке не появляются кнопки и надписи в компонентах.
в той форме, которая мне нужна кнопок нет, так что все как надо сохранилось, но на будущее обидно
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
12.10.2024, 01:44
Цитата Сообщение от walker1 Посмотреть сообщение
Мне тоже нужно было изображение формы, только закрытой, это оказалось еще проще:
А зачем это вообще было нужно?
Кроме того вы получаете изображение не "закрытой" формы, а вновь созданной.
0
0 / 0 / 0
Регистрация: 21.04.2022
Сообщений: 3
13.10.2024, 17:48
Цитата Сообщение от northener Посмотреть сообщение
А зачем это вообще было нужно?
Кроме того вы получаете изображение не "закрытой" формы, а вновь созданной.
Писал инструкцию и решил не делать скриншот у себя на компе с вымышленными данными, а показать пользователю форму с его данными до и после операции о которой написана инструкция.

Но как выше сказано было такое не со всеми формами прокатит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2024, 17:48
Помогаю со студенческими работами здесь

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

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

Скриншот формы
Надо сделать что то типа сохранялки для проги. Хватит скриншота формы для этого. Как его сделать? Желательно чтоб на кнопочку тык и вот...

Скриншот появляющейся формы
Че-то не выходит сделать скрин вылезающей второй формы над первой: procedure TForm1.Button1Click(Sender: TObject); var i: integer; ...

Скриншот
Нашёл код который делает скрин окна: bmp:=TBitmap.Create; hSrcWnd := FindWindow(nil, PChAR('Твайт.ру — Реклама в Twitter и Facebook....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru