Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 2
1

Странная работа программы

22.12.2014, 21:14. Показов 769. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста. Пытаюсь разобраться в простеньком скриншотере. При нажатии на первую кнопку в image который расположен на Scroolbox выводится скриншот рабочего стола , а при нажатии на вторую кнопку в этот же image скриншот активного окна.И если начинать программу с создания скриншота рабочего стола то потом все работает нормально, а если с создания скриншота активного окна то первый снимок получается правильно, а потом все снимки и активного окна и
рабочего стола обрезаются по высоте и ширине этого окна. Не пойму в чем дело
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.btn1Click(Sender: TObject);
var c:Tcanvas;
    r:Trect;
begin
    c:=Tcanvas.Create;
    c.Handle:=GetWindowdc(getDesktopWindow);
    r:=rect(0,0,Screen.Width,Screen.Height);
    form1.Visible:=false;
    sleep(500);
    img1.Width:=Screen.Width;
    img1.Height:=Screen.Height;
    img1.Canvas.CopyRect(r,c,r);
    ReleaseDC(0,c.Handle);
      c.Free;
    form1.Visible:=true;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
var c:Tcanvas;
    h:THandle;
    r,t:Trect;
begin
     c:=TCanvas.Create;
     form1.Visible:=false;
     sleep(750);
     c.Handle:=GetWindowdc(getDesktopWindow);
     h:=GetforegroundWindow;
     try
     getWindowrect(h,r);
     t:=Rect(0,0,r.Right-r.Left,r.Bottom-r.Top);
     img1.Width:=r.Right-r.Left;
     img1.Height:=r.Bottom-r.Top;
     img1.Canvas.CopyRect(t,c,r);
     finally
     ReleaseDC(0,c.Handle);
      c.Free;
      end;
     form1.Visible:=true;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2014, 21:14
Ответы с готовыми решениями:

Странная работа с Connector ODBC 5.3
Всем добра! Собственно вопрос, сделал проект на FMX компилирую его под win 32bit коннектится к БД...

MetafileCanvas и Pixels, странная работа
Добрый день уважаемые форумчане. Возник вопрос по работе Pixels. На PaintBox все работает...

Странная работа ПК
Всем привет. Вчера все было нормально, сегодня начал заходить в игру - начал замечать что при...

Странная работа Wi-Fi
Вчера начал пропадать интернет т.е. есть, рраз на пол минуты - минуту отключается и снова есть,...

4
Gornyak46
23.12.2014, 13:00
  #2

Не по теме:


На первый взгляд так, да простят меня гуру Делфи =)
в обработчике второй кнопки конструкцию try... finally.. end проверьте.
в finally процедура попадает при возникновении исключения, соотв. при нормальной работе того что после try не отрабатывают строки 35 и 36
если не прав, тыкните носом, где =)

0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
23.12.2014, 13:09 3
Цитата Сообщение от Gornyak46 Посмотреть сообщение
в finally процедура попадает при возникновении исключения
В finally процедура попадает всегда.
0
Gornyak46
23.12.2014, 13:15
  #4

Не по теме:

Цитата Сообщение от FIL Посмотреть сообщение
В finally процедура попадает всегда
виноват, с except попутал

0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 2
24.12.2014, 19:52  [ТС] 5
Если кому интересно вопрос решился через Image.Picture.Bitmap.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
procedure TForm1.btn1Click(Sender: TObject);
var c:Tcanvas;
    r:Trect;
begin
    c:=Tcanvas.Create;
    c.Handle:=GetWindowdc(getDesktopWindow);
    r:=rect(0,0,Screen.Width,Screen.Height);
 
    form1.Visible:=false;
    sleep(500);
    img1.Picture.Bitmap.Width:=Screen.Width;
     img1.Picture.Bitmap.Height:=Screen.Height;
     img1.Width:=Screen.Width;
    img1.Height:=Screen.Height;
    img1.Picture.Bitmap.Canvas.CopyRect(r,c,r);
    ReleaseDC(0,c.Handle);
      c.Free;
    form1.Visible:=true;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
var c:Tcanvas;
    h:THandle;
    r,t:Trect;
 
begin
     c:=TCanvas.Create;
     form1.Visible:=false;
     sleep(750);
     c.Handle:=GetWindowdc(getDesktopWindow);
     h:=GetforegroundWindow;
     try
     getWindowrect(h,r);
     t:=Rect(0,0,r.Right-r.Left,r.Bottom-r.Top);
     img1.Picture.Bitmap.Width:=r.Right-r.Left;
     img1.Picture.Bitmap.Height:=r.Bottom-r.Top;
     img1.Width:=r.Right-r.Left;
     img1.Height:=r.Bottom-r.Top;
     img1.Picture.Bitmap.Canvas.CopyRect(t,c,r);
     finally
     ReleaseDC(0,c.Handle);
      c.Free;
      end;
     form1.Visible:=true;
end;
Почему криво работало через Canvas так и не понял. Всем спасибо.
0
24.12.2014, 19:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2014, 19:52
Помогаю со студенческими работами здесь

Странная ошибка при запуске программы
Привет! Есть программа на Pascal с модулем для гаражного кооператива. Почему-то при запуске выдаёт...

Странная работа Denwer
Добрый день. Установил все как положено. По умолчанию на диск C:\WebServers, создал виртуальный...

Странная работа ф-и strpos()
Некорректно возвращает позицию подстроки,например <?$object = "Star"; $symbol = "r"; echo "<br...

Странная работа unserialize
Народ привет! Вот скажите пожалуйста, если кто-нибудь пользовался функцией unserialize в php? ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru