Alex7wrt Опубликовано 22 февраля, 2016 Поделиться Опубликовано 22 февраля, 2016 Собственно. Нашел эту тему : http://fire-monkey.ru/topic/391-kak-sdelat-skrinshot-s-tmediaplayercontrol/ Но реализация там не работает под современными редакциями FMX. Интересует, есть ли в FMX способ сделать скриншот под Windows. Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 23 февраля, 2016 Автор Поделиться Опубликовано 23 февраля, 2016 (изменено) Решил сделать скриншот всей формы, на которой растянут компонент TMediaPlayerControl. На основе http://fire-monkey.ru/topic/648-xe7-sozdanie-printscreenov-polnykh-i-chasti-ekranov/ и http://fire-monkey.ru/topic/492-windows-kak-zagruzit-hbitmap-v-tbitmap/ Получился такой код procedure MakeWindowScreenShot; var VCLBitmap: Vcl.Graphics.TBitmap; WindowRect: TRect; tmpStream: TMemoryStream; begin VCLBitmap := Vcl.Graphics.TBitmap.Create; try tmpStream:= TMemoryStream.Create; WindowRect := Rect(0, 0, form5.Width, form5.Height); VCLBitmap.Width := WindowRect.Width; VCLBitmap.Height := WindowRect.Height; BitBlt(VCLBitmap.Canvas.Handle, WindowRect.Left, WindowRect.Top, WindowRect.Width, WindowRect.Height, FMXHandletoHWND(form5.Handle), 0, 0, SRCCOPY); VCLBitmap.SaveToStream(tmpStream); form4.image1.bitmap.LoadFromStream(tmpStream); except VCLBitmap := nil; end; tmpStream.Free; end; Запускаю процедуру во время воспроизведения видео на Form5. Но в image1 на Form4 сохраняется пустой битмап белого цвета без видео, без ничего. Хотя даже фон на Form5 черный. Что я пропустил или не учел? Изменено 23 февраля, 2016 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 23 февраля, 2016 Автор Поделиться Опубликовано 23 февраля, 2016 (изменено) Нашел ошибку. Вот так работает: procedure MakeWindowScreenShot; var VCLBitmap: Vcl.Graphics.TBitmap; WindowRect: TRect; tmpStream: TMemoryStream; dc: HDC; begin VCLBitmap := Vcl.Graphics.TBitmap.Create; dc := GetDc(FMXHandletoHWND(form5.Handle)); try tmpStream:= TMemoryStream.Create; WindowRect:= Rect(0, 0, form5.Width, form5.Height); VCLBitmap.Width:= WindowRect.Width; VCLBitmap.Height:= WindowRect.Height; BitBlt(VCLBitmap.Canvas.Handle, WindowRect.Left, WindowRect.Top, WindowRect.Width, WindowRect.Height, dc, 0, 0, SRCCOPY); VCLBitmap.SaveToStream(tmpStream); tmpstream.Position:=0; form4.image1.bitmap.LoadFromStream(tmpStream); finally VCLBitmap.free; tmpStream.Free end; end; Изменено 23 февраля, 2016 пользователем Alex7wrt Цитата Ссылка на комментарий
Вопрос
Alex7wrt
Собственно. Нашел эту тему : http://fire-monkey.ru/topic/391-kak-sdelat-skrinshot-s-tmediaplayercontrol/ Но реализация там не работает под современными редакциями FMX. Интересует, есть ли в FMX способ сделать скриншот под Windows.
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.