Среда, 17.04.2024, 01:26 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Anton93, Волк-1024, xXxSh@dowxXx  
delphicode » Delphi » Программы на Delphi » Делаем скриншот (выделенной области экрана)
Делаем скриншот
xXxSh@dowxXxДата: Вторник, 06.03.2012, 13:54 | Сообщение # 1
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Всем привет, это снова я biggrin

у меня такой вопрос:

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

сам код записи и сохранения видео у меня уже есть, и с этим я разобрался, просто в моем коде я изначально указывал "height" и "width" в диапозоне которых и производилась запись, мне нужно добавить возможность выделения области экрана, что бы параметры высоты и ширины выделенной области копировались в программу, вот как то так...

вобщем как я понял нужно во первых нарисовать поверх всех окон (при нажатии на Mouse1) рамку, что бы пользователь видел какую конкретно область он выделил..,далее нужно плясать по высоте и ширине от края экрана, для того что бы контуры рамки можно было увеличивать либо уменьшать - как при обычном выделении, но как это все выглядит в коде я не могу никак сообразить, подскажите кто в курсе как это должно быть или какие хоть функции использовать?


Сообщение отредактировал xXxSh@dowxXx - Вторник, 06.03.2012, 13:57
 
GReIIIHuKДата: Вторник, 06.03.2012, 14:04 | Сообщение # 2
Участник
Зарегистрирован: 15.05.2011
Группа: Пользователи
Сообщений: 98
Статус: Offline
Если не секрет, каким способом ты пользуешься для записи видео?

Skype:"greiiihuk."


Да, я преступник. Мое преступление — любопытство.
Быть может умру я, умрут многие, но идея останется жить навсегда.
Я работаю не только за спасибо.(+) ©
 
xXxSh@dowxXxДата: Вторник, 06.03.2012, 14:32 | Сообщение # 3
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
я перепробовал несколько способов, есть также множество компонентов для этого, но больше всего мне понравились компоненты с этого сайта www.mitov.com у них очень даже неплохие и качественные компоненты для разработки множества разнообразных продуктов, тем более их компоненты поддерживают очень даже неплохой показатель FPS в работе, их я и использовал в своей программе...

Сообщение отредактировал xXxSh@dowxXx - Вторник, 06.03.2012, 14:33
 
xXxSh@dowxXxДата: Вторник, 06.03.2012, 15:16 | Сообщение # 4
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
если я не ошибаюсь то вроде как нудно использовать функцию "DrawFocusRect" ?

у кого нибудь есть исходник или кто может хотя бы примерно код представить?

ребят помогите пожалуйста, это в принципе последнее чего так не хватает в программе...

нашел вот такие куски кода:

Code

var DC:HDC;
      bm:TBitMap;
...
bm:=TBitMap.Create;
DC:=GetDC(0);   // получишь DC экрана
// при сохранении куска раб. стола
...
bm.width:=w;
bm.height:=h;    // ширина и высота копируемой области
bitblt(bm.canvas.handle,0,0,w-1,h-1,DC,x,y,SRCCOPY); // копировать в BM кусок из DC WxH
...
//При загрузке
bitblt(DC,x,y,w-1,h-1,bm.canvas.handle,0,0,SRCCOPY) // копировать на экран


и рисование линий на DC:

Code

windows.MoveToEx(DC,x,y,nil);
windows.LineTo(DC,x+w-1,y+h-1);


но их же нада как то раскидать по MouseDown/MouseMove/MouseUp...

я примерно понимаю как все должно работать, но блин в коде не могу это описать sad


Сообщение отредактировал xXxSh@dowxXx - Вторник, 06.03.2012, 16:43
 
xXxSh@dowxXxДата: Среда, 07.03.2012, 23:31 | Сообщение # 5
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
нашел вот такой вот код:

"Собственно программа работает следующим образом - с первой формы нажатием кнопки вызывается вторая. Вторая форма Alphablend=100, borderstyle:= none, align:= allclient. По нажатию кнопки мыша начинается рисование Canvas.Rectangle, по отпусканию кнопки - рисование прекращается, область прямоугольника сохраняется в файл"

Code

procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
begin
pos1 := Point(X, Y);
risuem := true;
Form2.AlphaBlendValue := 80;
end;

procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
       var
ScreenDC:HDC;
Canvas:TCanvas;
myjpg:  TJPEGImage;
Image: TImage;
       begin
pos2 := Point(X, Y);
risuem := false;
Form2.AlphaBlendValue := 1;

Image:=TImage.Create(nil);
myjpg:= TJPEGImage.Create;
ScreenDC := GetDC(0);
Canvas:=TCanvas.Create();
Canvas.Handle:=ScreenDC;
Image.Width := pos2.X - pos1.X;
Image.Height := pos2.y - pos1.y;
Image.Canvas.CopyRect(Rect(0,0,Image.Width,Image.Height), Canvas, Rect(pos1, pos2));
ReleaseDC(0,ScreenDC);
myjpg.Assign(Image.Picture.Bitmap);
myjpg.compressionquality:=100;
myjpg.compress;
myjpg.SaveToFile('prob.jpg');
Image.Free;
Canvas.Free;
       close;
end;

procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
       Y: Integer);
begin
       if risuem = true then
       begin
         Form2.Canvas.Pen.Color := clNone;
         Form2.Canvas.Brush.Color := clBtnFace;
         Form2.Canvas.Rectangle(0,0,Form2.Width, Form2.Height);
         Form2.Canvas.Pen.Color := clred;
         Form2.Canvas.Brush.Color := clBlack;
         Form2.Canvas.Rectangle(Classes.Rect(pos1, Point(x, y)));
         pos3 := Point(X, Y);
       end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
       Form2.Canvas.Pen.Color := clred;
       Form2.Canvas.Brush.Color := clBlack;
end;

end.


подскажите в чем ошибка?

я так понял что неизвестна переменные pos1;pos2;pos3;risuem
но как их объявить?

то что выдает компилятор я выложил в скрине...

и выложу еще исходник на всякий случай, ни как не могу сообразить, вроде такая фигня, ночью вобще голова не варит совсем sad
Прикрепления: 0893734.jpg (61.2 Kb) · screenshoot.rar (7.6 Kb)


Сообщение отредактировал xXxSh@dowxXx - Четверг, 08.03.2012, 11:53
 
XSPYДата: Четверг, 08.03.2012, 17:14 | Сообщение # 6
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 263
Статус: Offline
пля..поройтесь в сорсах бэкдоров и стиллеров-там куча такого..

Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
 
xXxSh@dowxXxДата: Четверг, 08.03.2012, 17:28 | Сообщение # 7
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
А зачем собственно спрашивается такие функции бэкдорам нужны? shok

я вобще вполне обычную и полезную программу пишу, при чем тут бэкдоры...?

если вы имеете ввиду что бэкдоры делают обычный скриншот экрана, и сохраняют его для отправки то это вобще ерунда и код там до нельзя прост, да и это вобще не то, у меня то более глобальные задачи!!!


Сообщение отредактировал xXxSh@dowxXx - Четверг, 08.03.2012, 17:32
 
NeoДата: Пятница, 09.03.2012, 06:06 | Сообщение # 8
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
Держи исправленный вариант dry
Прикрепления: 5781198.rar (232.9 Kb)
 
xXxSh@dowxXxДата: Пятница, 09.03.2012, 11:53 | Сообщение # 9
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (Neo)
Держи исправленный вариант


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

может быть ты не тот проект в архив залил? biggrin не ну серьезно хз почему та же самая ошибка...

ок хорошо с pos1,2,3 я разобрался, а risuem это что вобще?


Сообщение отредактировал xXxSh@dowxXx - Пятница, 09.03.2012, 12:16
 
NeoДата: Пятница, 09.03.2012, 12:22 | Сообщение # 10
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
Извени,я забыл нажать Ctrl+S)))).Вот точно исправленный!
А вообще надо было так сделать:
Объявить
pos1,pos2,pos3:TPoint;
risuem:boolean;
и добавить в uses jpeg модель,для работы с типом TJPEGImage;
Это всё)
Прикрепления: 4276435.rar (224.3 Kb)


Сообщение отредактировал Neo - Пятница, 09.03.2012, 12:54
 
xXxSh@dowxXxДата: Пятница, 09.03.2012, 12:26 | Сообщение # 11
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
УРА! проблема решена, наконец то biggrin

ОГРОМНОЕ СПАСИБО! Neo


Сообщение отредактировал xXxSh@dowxXx - Пятница, 09.03.2012, 12:26
 
xXxSh@dowxXxДата: Пятница, 09.03.2012, 17:13 | Сообщение # 12
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Такс...,рано я обрадовался biggrin

возник еще один вопрос, как теперь в этом же примере получить значения "Top" и "Left" то есть от верхнего левого угла экрана до точки где происходит событие "FormMouseDown" ?

за помощь с меня +++


Сообщение отредактировал xXxSh@dowxXx - Пятница, 09.03.2012, 17:15
 
XSPYДата: Пятница, 09.03.2012, 17:25 | Сообщение # 13
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 263
Статус: Offline
xXxSh@dowxXx, в хороших бекдорах поверьте,это есть и оно нужно))
просто получите значение от FormMouseDown-у Архангельсоко описано вроде...
Также поищи сорс(в инете был и у меня дето,но у меня не помню где),он при запуске и движении мышы он показывает координаты.Думаю тебе поможет)) wink wink


Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
 
xXxSh@dowxXxДата: Пятница, 09.03.2012, 17:48 | Сообщение # 14
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Благодарю, уже нашел, вот кому нибудь может пригодится:
Code

procedure TForm1.Button1Click(Sender: TObject);
var
foo: TPoint;
begin
GetCursorPos(foo);
Edit1.Text:=(IntToStr(foo.Y));
Edit2.Text:=(IntToStr( foo.X));
end;


Сообщение отредактировал xXxSh@dowxXx - Пятница, 09.03.2012, 17:48
 
delphicode » Delphi » Программы на Delphi » Делаем скриншот (выделенной области экрана)
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz