| 
| 
 | Вопрос # 6 389/ вопрос решён / | 
 |  Здравствуйте, эксперты!Возникла ситуация. На форме есть компонент Image, который выровнен по всей области формы. Форма имеет "прозрачный" цвет: (AlphaBlend=True и AlphaBlendValue=0). Как сделать так, что бы изображение, находящееся в области формы сохранилось в BMP-файл?
 То есть, в момент создания формы, изображение которое отображается на форме, а значит попадает и в область компонента  Image сохранилось в файл. Должен происходить своего рода "снимок" той части экрана, где расположена форма (не при нажатии на кнопку, а именно в момент создания формы!). Нижеприведённый код увы, не работает. Пожалуйста помогите!
 Приложение:Переключить в обычный режим procedure TForm1.FormCreate(Sender: TObject);var B: TBitmap;beginB:= TBitmap.Create;  Form1.Image1.Picture.Bitmap.SaveToFile('C:\TEMP\F1.bmp');end; procedure TForm1.FormDestroy(Sender: TObject);begin B.Free;end;
|  |   Вопрос задал: FANTOMAS (статус: Посетитель)Вопрос отправлен: 19 марта 2013, 13:26
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Александр Дубик Здравствуйте, FANTOMAS!
 Набросал простенькую процедурку:
 
 procedure ScreenShortToFile(const FileName: TFileName; Left, Top, Height,
  Width: Integer);
var
  DC: HDC;
  BMP: TBitmap;
begin
  BMP := TBitmap.Create;
  BMP.Height := Height;
  BMP.Width := Width;
  DC := GetDC(0);
  BitBlt(BMP.Canvas.Handle, 0, 0, Width, Height, DC, Left, Top, SRCCOPY);
  BMP.SaveToFile(FileName);
  ReleaseDC(0, DC);
  BMP.Free
end; Пример использования:
 
   ScreenShortToFile('SnapWithBorder.bmp', Form1.Left, Form1.Top, Form1.Height, Form1.Width);
 
  //Если рамку формы требуется исключить из области снимка:
  ScreenShortToFile('SnapWithoutBorder.bmp', ClientOrigin.X, ClientOrigin.Y,
    ClientHeight, ClientWidth);
|  | Ответ отправил: Александр Дубик (статус: 1-ый класс)Время отправки: 20 марта 2013, 10:12
 Оценка за ответ: 4
 |  Ответ #2. Отвечает эксперт: Drinkenz Здравствуйте, FANTOMAS!
 Походу  делать надо так:
 
 B:= TBitmap.Create;
B.width:= image1.width;
B.height:= image1.height;
B.canvas.draw(0,0,image1.picture.graphic);
B.SaveToFile('C:\TEMP\F1.bmp');
|  | Ответ отправил: Drinkenz (статус: 1-ый класс)Время отправки: 20 марта 2013, 18:32
 
 |  
 Мини-форум вопросаВсего сообщений: 2; последнее сообщение — 19 марта 2013, 17:34; участников в обсуждении: 2. 
|   | min@y™ (статус: Доктор наук), 19 марта 2013, 14:32 [#1]:Ты хочешь сохранить кусок экрана, находящегося ПОД формой? Тогда причём тут Image? Или я чего-то не понимаю?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Drinkenz (статус: 1-ый класс), 19 марта 2013, 17:34 [#2]:А чем не устраивает 
 procedure TForm1.FormCreate(Sender: TObject);,
begin,
Image1.Picture.SaveToFile('C:\TEMP\F1.bmp');
end;? |  25 марта 2013, 12:53: Статус вопроса изменён на решённый (изменил автор вопроса — FANTOMAS) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |