Билл Гейтс спросил меня, наверное, уже тысячу раз:
- Хочешь сохранить изменения?
Когда же он, наконец, спросит:
- Хочешь изменить сохранения?
procedure TForm1.GrabControl(const aControl: TControl;
const FileName: string);
var
B: TBitmap;
srcRect,dstRect: TRect;
begin
B:=TBitmap.Create;
with dstRect dobegin
Left:=0;
Top:=0;
Right:=aControl.Width+1;
Bottom:=aControl.Height+1;
end;
with srcRect dobegin
Left:=aControl.Left;
Right:=aControl.Left+aControl.Width;
Top:=aControl.Top;
Bottom:=aControl.Top+aControl.Height;
end;
B.Width:=aControl.Width;
B.Height:=aControl.Height;
B.Canvas.CopyRect(dstRect,Self.Canvas,srcRect);
// сохранить с палитрой 256 цветов
B.PixelFormat:=pf8bit;
B.SaveToFile(FileName);
B.Free;
end;
...
GrabControl(Memo1,'memo_pic.bmp');
GrabControl(Edit1,'edit_pic.bmp');
Перевод текста на русский язык:
Это код программирования на Delphi, который захватывает изображение контроля (например, Memo или Edit) и сохраняет его в файл bitmap.
Вот разбивка того, что код делает:
Процедура GrabControl принимает два параметра: aControl, которое является контролем, изображение которого нужно захватить, и FileName, которое является именем файла, где сохранять изображение.
Создается объект TBitmap с именем B.
Устанавливается четыре прямоугольника:
dstRect: указывает на область bitmap, куда будет скопировано изображение (0, 0) для верхнего левого угла и aControl.Width+1, aControl.Height+1 для нижнего правого угла.
srcRect: указывает на область контроля, которую нужно захватить (aControl.Left, aControl.Left+aControl.Width для левых и правых границ, aControl.Top, aControl.Top+aControl.Height для верхних и нижних границ).
Устанавливается ширина и высота bitmap в соответствии с размером контроля.
Изображение копируется из канваса контроля в канвас bitmap с помощью CopyRect.
Bitmap сохраняется в файле с помощью SaveToFile. Пиксельный формат установлен на 8-бит, что означает, что сохраненное изображение будет иметь 256 цветов.
Наконец, два вызова сделаны для захвата и сохранения изображений контролов Memo1 и Edit1:
Обработка ошибок: нет обработки ошибок при попытке сохранить файл (например, из-за ошибок на диске или проблем с правами доступа).
Сжатие: 8-битный пиксельный формат подходит для изображений с небольшим количеством цветов, но может не быть эффективным для изображений с большим количеством цветов. Использование сжатого формата изображения, такого как JPEG, может привести к более маленьким файлам.
Прозрачность: метод CopyRect не сохраняет прозрачность (если контролл имеет какие-либо прозрачные области). Если это важно, рассмотрите использование другого метода для захвата изображения.
Код использует метод CopyFromScreen для захвата изображения контроля и затем сохраняет его в файле с помощью SaveToFile. Он лучше обрабатывает ошибки и прозрачность, чем оригинальный код. Однако он требует библиотеки GDI+, которая не включается в Delphi по умолчанию.
Билл Гейтс спрашивает разработчика программы о сохранении изменений в контроле, а сам разработчик создает процедуру для захвата изображения любого контрола и его последующего сохранения в файл.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.