![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Имеется проблема: Необходимо на форму вывести только часть (300х300 пикселей) изображения, т.е. вырезать нужную часть из рисунка и отобразить ее на канве формы. Для простоты пусть изображение будет храниться в файле 1.jpg. Обязательно нужно выводить на канву формы.
Действую так: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg; Const WM_draw=WM_USER+1; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private procedure mydraw (var mes : TMessage); message WM_draw ; { Private declarations } public { Public declarations } end; var Form1: TForm1; MyRect: TRect; MyBmp: TBitmap; MyJpg: TJPEGImage; implementation {$R *.dfm} procedure TForm1.MyDraw(var Mes: TMessage); begin Canvas.StretchDraw(MyRect, MyBmp); InvalidateRect(Handle, @MyRect, FALSE); end; procedure TForm1.FormCreate(Sender: TObject); begin MyBmp := TBitmap.Create; MyJpg := TJPEGImage.Create; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin MyBmp.Free; MyJpg.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin MyJpg.LoadFromFile('1.jpg'); MyBmp.Assign(MyJpg); SetRect(MyRect, 100, 100, 400, 400); PostMessage(Handle, WM_draw, 0, 0); end; end. Все нормально, но когда форму с отрисованным нужным куском изображения, например, сворачиваешь, а потом разворачиваешь то изображение пропадает. Такая же проблема возникает когда над формой появляется другое окно, или при изменении размеров формы и др. В коде используется подход с сообщениями Windows для отрисовки, но это нужно в моей программе с полными функциональными возможностьями. Помогите устранить возникшую проблему. Последний раз редактировалось Admin, 22.06.2009 в 21:41. |