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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 21:52   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
Вопрос PrintScreen Windows 7

Так я делаю PrintScreen
Код:
...
procedure Shot(dir: string);
...
procedure TFormMain.Shot(dir: string);
var
  DC: HDC;
  Canva: TCanvas;
  B: TBitmap;
begin
  Canva := TCanvas.Create;
  B := TBitmap.Create;
  DC := GetDC(0);
  try
    Canva.Handle := DC;
    with Screen do
    begin
      B.Width := Width;
      B.Height := Height;
      B.Canvas.CopyRect(Rect(0, 0, Width, Height), Canva, Rect(0, 0, Width, Height));
      B.SaveToFile(dir);
    end
  finally
    ReleaseDC(0, DC);
    B.Free;
    Canva.Free
  end
end;
Если в Windows 7 стоит стиль Aero, то всё нормально, если стоит стиль "Классическая", то всё изображение белое и весит 5 Мб. Что это за баг и как от него избавиться?
Shouldercannon вне форума Ответить с цитированием
Старый 10.06.2011, 07:07   #2
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

а если так...
Код:
...
procedure Shot(dir: string);
...
procedure TFormMain.Shot(dir: string);
var
  DC: HDC;
  Canva: TCanvas;
  B: TBitmap;
jpeg: TJPEGImage;
begin
  Canva := TCanvas.Create;
  B := TBitmap.Create;
 jpeg := TJPEGImage.Create ;
  DC := GetDC(0);
  try
    Canva.Handle := DC;
    with Screen do
    begin
      B.Width := Width;
      B.Height := Height;
      B.Canvas.CopyRect(Rect(0, 0, Width, Height), Canva, Rect(0, 0, Width, Height));
      //B.SaveToFile(dir);
jpeg.Assign(B);
jpeg.SaveToFile(dir);
    end
  finally
    ReleaseDC(0, DC);
    B.Free;
    Canva.Free;
jpeg.free;
  end
end;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 10.06.2011, 10:33   #3
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Код:
procedure TFormMain.Shot(dir: string);
var
  DC: HDC;
begin
  DC := GetDC(0);
  with TBitmap.Create do begin
    PixelFormat:=pf24bit;
    SetSize(Screen.Width, Screen.Height);
    BitBlt(Canvas.Handle, 0,0,Width,Height, DC, 0,0, SRCCOPY);
    SaveToFile(dir);
    Free;
  end;
  ReleaseDC(0, DC);
end;
x128 вне форума Ответить с цитированием
Старый 10.06.2011, 11:36   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Что такое SetSize?
Undeclared identifier: 'SetSize'
Походу в Delphi 7 2002 года 'SetSize' для TBitmap не поддерживается.

Последний раз редактировалось Shouldercannon; 10.06.2011 в 12:09.
Shouldercannon вне форума Ответить с цитированием
Старый 10.06.2011, 12:48   #5
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

А чем мое исправление не подошло?jpg.rar
Помог, нажми весы слева

Последний раз редактировалось grafgrial; 10.06.2011 в 12:53.
grafgrial вне форума Ответить с цитированием
Старый 10.06.2011, 14:00   #6
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Походу в Delphi 7 2002 года 'SetSize' для TBitmap не поддерживается.
Да, в 7-ом делфи действительно нет, нужно явно указывать Width и Height для битмапа.
x128 вне форума Ответить с цитированием
Старый 10.06.2011, 15:56   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Удалено...

Последний раз редактировалось Shouldercannon; 10.06.2011 в 16:25.
Shouldercannon вне форума Ответить с цитированием
Старый 10.06.2011, 16:25   #8
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
canva:Tcanvas;
bitmap:Tbitmap;
begin
canva:=Tcanvas.Create;
bitmap:=Tbitmap.Create;
  Canva.Handle := GetDC(windows.GetDesktopWindow);
 Bitmap.PixelFormat:=pf24bit;
 Bitmap.Width:=screen.Width;
 Bitmap.Height:=screen.Height;
 Bitmap.Canvas.CopyRect(rect(0,0,screen.Width,screen.Height),Canva,rect(0,0,screen.Width,screen.Height));
 bitmap.SaveToFile('d:\123.bmp');
end;
Попробуйте вот это
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 10.06.2011, 16:50   #9
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Ни один из способов не хочет нормально работать. Везде белое изображение, но размер файла не малый (jpg - 20,5 kb, bmp - 3,7/5 mb)
Может белый экран из-за того, что компьютер заблокирован или производится смена пользователся, хотя со стилем Aero проблем нет.
Shouldercannon вне форума Ответить с цитированием
Старый 11.06.2011, 00:29   #10
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Ни один из способов не хочет нормально работать. Везде белое изображение
Не знаю у меня все норм и с Aero и с классическим видом
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает как надо аналог PrintScreen SERG1980 Мультимедиа в Delphi 3 14.05.2011 19:26
Сохранение изображения из буфера (PrintScreen) Tvv7-7-7 Мультимедиа в Delphi 6 06.04.2010 23:05
Автоматизированный PrintScreen Ratmir_1 Общие вопросы Delphi 4 13.11.2008 06:21
PrintScreen активной формы Dj_smart Общие вопросы Delphi 3 22.04.2008 16:25
PrintScreen SERG1980 Общие вопросы Delphi 2 23.08.2007 16:55