382 / 181 / 47
Регистрация: 11.07.2013
Сообщений: 984
1

Ещё раз о скриншотах

03.04.2016, 21:03. Показов 759. Ответов 7
Метки нет (Все метки)

Несколько дней назад форумчанен ПраПрапорщик поднимал эту тему, но закончилась она как-то не интересно. А тема, в принципе, очень интересная. Хотелось бы её продолжить, тем более не всё повторенное из Delphi однозначно работает в Лазарусе.
И так: захватываю своё окно (код рабочий)
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
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Windows, Graphics, Dialogs, StdCtrls,
  extctrls; // Описание TImage.
......
procedure TForm1.FormPaint(Sender: TObject);
begin
 Form1.Canvas.TextOut(5,5,'Здесь может быть любое обращение к канве.');
end;
......
procedure TForm1.Button1Click(Sender: TObject);
var
  Img: TImage;
  Rect: TRect;
begin
  Form1.FormPaint(Sender); // Если не сделать перерисовку, то файл содержит только заголовок.
  Img:=TImage.Create(Form1);
  Img.Width:=Form1.Canvas.Width;
  Img.Height:=Form1.Canvas.Height;
  Rect:=Form1.Canvas.ClipRect;
  Img.Canvas.CopyRect(Rect, Form1.Canvas, Rect);
  Img.Canvas.TextOut(5,130,'Скриншот окна снят '+DateToStr(Date)+' / '+TimeToStr(Time));
  Img.Picture.SaveToFile('C:\ScreenWin.bmp');
  FreeAndNil(Img);
end;
Теперь делаю проще (файл сохраняется, но кроме заголовка ничего не содержит):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Windows, Graphics, Dialogs, StdCtrls,
  extctrls; // Описание TImage.
......
procedure TForm1.Button1Click(Sender: TObject);
var
  Img: TImage;
  Rect: TRect;
begin
  Img:=TImage.Create(Form1);
  Img.Width:=Form1.Canvas.Width;
  Img.Height:=Form1.Canvas.Height;
  Rect:=Form1.Canvas.ClipRect;
  Img.Canvas.CopyRect(Rect, Form1.Canvas, Rect);
  Img.Canvas.TextOut(5,130,'Скриншот окна снят '+DateToStr(Date)+' / '+TimeToStr(Time));
  Img.Picture.SaveToFile('C:\ScreenWin.bmp');
  FreeAndNil(Img);
end;
... И в bmp-файле кроме заголовка ничего больше нет.
Теперь вопрос: Почему в первом случае всё работает, а во втором (без предварительного какого-нибудь "бестолкового" обращения к канве) - нет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2016, 21:03
Ответы с готовыми решениями:

Ещё раз по текстовым файлам
Всё понятно, что там нет указателя а есть курсор, но не понятно...почему нельзя передвинуть его на...

Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз его
Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять...

Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот символ
Помогите с задачей на C# Ввести строку символов. Если символ в данной строке встречается один раз,...

Ещё раз о консоли
Никак не могу понять, в джаве А) можно ли выводить в консоль символы методом прямой записи в...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
03.04.2016, 21:50 2
Вот этот код что показывает:
Pascal
1
2
3
4
5
6
7
8
9
var
  bm: Graphics.TBitmap;
begin
  bm:=Graphics.TBitmap.Create;
  bm.LoadFromDevice(Self.Canvas.Handle);
  bm.Canvas.TextOut(5,130,'Скриншот окна снят '+DateToStr(SysUtils.Date)+' / '+TimeToStr(SysUtils.Time));
  bm.saveToFile('D:\ScreenWin.bmp');
  FreeAndNil(bm);
end;
?
1
382 / 181 / 47
Регистрация: 11.07.2013
Сообщений: 984
04.04.2016, 06:58  [ТС] 3
volvo, ваш код, разумеется, значительно лучше, однако вместо надписи "Скриншот окна снят..." получается квадрат.
Ещё раз о скриншотах
Значит квадрат прозрачный. В XnViev он выглядет вот так:
Ещё раз о скриншотах
0
382 / 181 / 47
Регистрация: 11.07.2013
Сообщений: 984
04.04.2016, 07:10  [ТС] 4
Добавление цвета кисти и пере не помогает:
Delphi
1
2
  bm.Canvas.Brush.Color:=clWhite;
  bm.Canvas.Pen.Color:=clBlack;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
04.04.2016, 08:37 5
Не воспроизводится:
Миниатюры
Ещё раз о скриншотах  
0
382 / 181 / 47
Регистрация: 11.07.2013
Сообщений: 984
04.04.2016, 09:02  [ТС] 6
Страотнно, почему то у меня не так. Вот проект: ScreenShot.rar
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
04.04.2016, 09:19 7
Все нормально:
Миниатюры
Ещё раз о скриншотах  
0
382 / 181 / 47
Регистрация: 11.07.2013
Сообщений: 984
04.04.2016, 10:32  [ТС] 8
Удивлён. В Paint-е, GIMP-e открывает с надписью, а в XnViev - серый квадрат. Скорее всего это связано с XnViev.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2016, 10:32
Помогаю со студенческими работами здесь

Ещё раз о девушках
Всем добрый вечер. Раздел посвящён взаимоотношениям мужчин и женщин. Я хочу написать о другом,...

Ещё раз о BIOS
Нужно было отформатировать жёсткий диск стационарного компьютера.Сделал всё с помощью Acronis Disk...

Ещё раз о линкопомойниках
Стал сотрудничать с одной конторой не буду называть какой – оптимизаторы. b-( Посоветовали мне...

Ещё раз о регистрации, куках, и бд
Приветствую! Понимаю, что тема эта избита, но слишком избита, чтобы не заблудится во множестве...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru