Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.06.2009, 21:07
ikot ikot вне форума
Прохожий
 
Регистрация: 29.09.2008
Сообщения: 5
Репутация: 10
По умолчанию рисование на канве и сообщения windows

Имеется проблема: Необходимо на форму вывести только часть (300х300 пикселей) изображения, т.е. вырезать нужную часть из рисунка и отобразить ее на канве формы. Для простоты пусть изображение будет храниться в файле 1.jpg. Обязательно нужно выводить на канву формы.
Действую так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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.
Admin: Пользуемся тегами!

Все нормально, но когда форму с отрисованным нужным куском изображения, например, сворачиваешь, а потом разворачиваешь то изображение пропадает. Такая же проблема возникает когда над формой появляется другое окно, или при изменении размеров формы и др.

В коде используется подход с сообщениями Windows для отрисовки, но это нужно в моей программе с полными функциональными возможностьями.

Помогите устранить возникшую проблему.

Последний раз редактировалось Admin, 22.06.2009 в 21:41.
Ответить с цитированием
  #2  
Старый 22.06.2009, 22:09
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Обработчик события OnPaint формы
Код:
1
2
3
4
procedure TForm1.FormPaint(Sender: TObject);
begin
  PostMessage(Handle, WM_draw, 0, 0);
end;

P.S. Либо так (раз уж вы взялись за сообщения Windows):
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
.....
  private
      procedure mydraw (var mes : TMessage); message WM_draw ;
      procedure WMPAINT(var Msg: TMessage); message WM_PAINT;
      { Private declarations }
 
........
 
procedure TForm1.WMPAINT(var Msg: TMessage);
begin
  inherited;
  PostMessage(Handle, WM_draw, 0, 0);
end;

Последний раз редактировалось Nyctos Kasignete, 22.06.2009 в 22:14.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025