Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2013, 10:34   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Скриншот в TShape

Есть TShape Style:=bsClear;
Есть кнопки с помощью которого передвигается этот квадрат, также можно передвигать его мышкой. Как реализовать скриншот содержимого этого TShape, например навожу его на что-то, потом *клац* и скрин отправляется в переменную типа TBitmap
Praud вне форума Ответить с цитированием
Старый 20.08.2013, 10:43   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

С помощью BitBlt делаете скриншот.
Человек_Борща вне форума Ответить с цитированием
Старый 20.08.2013, 10:47   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Код:
bmp:=tbitmap.Create;
    bmp.transparent:=true;
    bmp.transparentcolor:=clwhite;
    bmp.Width:=Shape1.Width-15;
    bmp.Height:=Shape1.Height-30;
    BitBlt(bmp.Canvas.Handle,0,0,Shape1.Width,Shape1.Height,getdc(form1.handle),0,0,SRCCOPY);
    Form1.image5.Picture.Assign(bmp);
Есть вот такой код. Изначально он был для Form1, вместо Shape1, так вот может можно как-то преобразить его для данного ТЗ?

Преобразовал


Код:
bmp:=tbitmap.Create;
    bmp.transparent:=true;
    bmp.transparentcolor:=clwhite;
    bmp.Width:=Shape1.Width;
    bmp.Height:=Shape1.Height;
    BitBlt(bmp.Canvas.Handle,0,0,Shape1.Width,Shape1.Height,getdc(form2.handle),0,0,SRCCOPY);
    Form1.image5.Picture.Assign(bmp);
А вот теперь проблема которая меня долго преследует. Как сделать прозрачную форму? Нужны оптимальные решения. Поставил Color:=clGreen и Transperent Color:=clGreen. Визуально - это то что нужно, а на деле фоткает зеленые участки

Ищу готовые какие-то решения. Для моего тз, как вы понимаете форма должна быть "сквозной". Ну или может нужно использовать совершенно какой-то другой метод.
Повторюсь, нужно TShape навести на участок экрана и его заскринить.

Последний раз редактировалось Stilet; 20.08.2013 в 19:47.
Praud вне форума Ответить с цитированием
Старый 20.08.2013, 19:06   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
Ищу готовые какие-то решения. Для моего тз, как вы понимаете форма должна быть "сквозной". Ну или может нужно использовать совершенно какой-то другой метод.
Повторюсь, нужно TShape навести на участок экрана и его заскринить.
AlphaBlend, не?
ZuBy вне форума Ответить с цитированием
Старый 20.08.2013, 19:37   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Нет, уже вроде разобрался.

Код:
Shape1.Pen.Style:=psClear;
   ScreenDC := GetDC(0);
  Canvas := TCanvas.Create;
  Canvas.Handle := ScreenDC;
  Image1.Canvas.CopyRect(Image1.Canvas.ClipRect, Canvas,
                         Rect(ClientToScreen(Shape1.BoundsRect.TopLeft),
                              ClientToScreen(Shape1.BoundsRect.BottomRight)));
  ReleaseDC(0, ScreenDC);
  Canvas.Free;
    Shape1.Pen.Style:=psSolid;
Вот код скриншота. Теперь другая проблема. в TShape стоит Pen.Style:=psSolid.
Так как я делаю скрин содержимого TShape перед скрином мне надо убирать Pen.Style - делать Pen.Style:=psClear; После скриншота возвращать его. Собственно как и написанно в коде выше. Проблема лишь в том что ничего не работает)) Рамка не исчезает. Как будто он эту строчку кода не видит
Praud вне форума Ответить с цитированием
Старый 20.08.2013, 21:33   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Проблема в том, что сначала делается скриншот, а потом меняется Pen.Style на psClear, Хотя в программе описано иначе, почему?
Praud вне форума Ответить с цитированием
Старый 20.08.2013, 21:55   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
почему?
Наверно потому что перерисоваться не успевает.
После смены стиля вызови ему repaint принудительно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2013, 22:31   #8
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Код:
Shape1.Pen.Style:=psClear;
   ScreenDC := GetDC(0);
  Canvas := TCanvas.Create;
  Canvas.Handle := ScreenDC;
  Image1.Canvas.CopyRect(Image1.Canvas.ClipRect, Canvas,
                         Rect(ClientToScreen(Shape1.BoundsRect.TopLeft),
                              ClientToScreen(Shape1.BoundsRect.BottomRight)));
  ReleaseDC(0, ScreenDC);
  Canvas.Free;

ScreenDC := GetDC(0);
  Canvas := TCanvas.Create;
  Canvas.Handle := ScreenDC;
  Image1.Canvas.CopyRect(Image1.Canvas.ClipRect, Canvas,
                         Rect(ClientToScreen(Shape1.BoundsRect.TopLeft),
                              ClientToScreen(Shape1.BoundsRect.BottomRight)));
  ReleaseDC(0, ScreenDC);
  Canvas.Free;


    Shape1.Pen.Style:=psSolid;
Два раза рисовать? Я что-то не понял.
Praud вне форума Ответить с цитированием
Старый 20.08.2013, 22:42   #9
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Самое интересное, если делаю вот так вот

Код:
Shape1.Pen.Style:=psClear;
   ScreenDC := GetDC(0);
  Canvas := TCanvas.Create;
  Canvas.Handle := ScreenDC;
  Image1.Canvas.CopyRect(Image1.Canvas.ClipRect, Canvas,
                         Rect(ClientToScreen(Shape1.BoundsRect.TopLeft),
                              ClientToScreen(Shape1.BoundsRect.BottomRight)));
  ReleaseDC(0, ScreenDC);
  Canvas.Free;
  //  Shape1.Pen.Style:=psSolid; ЗАКОМЕНЧЕННО
то после первого скриншота рамка квадрата пропадает и получается нужный результат. Только вот и у квадрата который наводит рамка пропадает.
Короче совсем бред получается.
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
fireMonkey и Tshape Murod-tj Общие вопросы Delphi 0 27.12.2012 04:53
TShape Sanakan Помощь студентам 5 08.02.2010 01:05
Массив TShape?? Тёма(C@$pEr) Общие вопросы Delphi 6 20.04.2009 10:42
Молекулы из TShape? Тёма(C@$pEr) Помощь студентам 0 19.04.2009 19:59
Вопрос о TShape Rusl92 Общие вопросы Delphi 3 21.08.2008 12:53