| 
| 
 | Вопрос # 4 549/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Мой вопрос касается компонента TPanel и его свойства Canvas.
 Когда я пытаюсь скопировать изображение из TImage так
 
 MyRect:=Rect(0,0,100,80);
 ImgRect:=Rect(80,100,180,180);
 Panel1.Brush.Bitmap.Canvas.CopyRect(MyRect,Image1.Picture.Bitmap.Canvas,ImgRect);
 
 компилятор почему то ругается, когда создаю новый тип, где прописываю свойство canvas как public компилятор не ругается, но программа работает не корректно, т.к. если добавить кнопку и всавить в обработчик события кнопки OnClick код из Form1Create() то картинка копируется.
 (привожу код в приложении)
 
 Возможно кто нибудь знает путь решения этой проблемы.
 Приложение:Переключить в обычный режим {{code}}unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls, jpeg, StdCtrls; type  TForm1 = class(TForm)    Image1: TImage;    procedure FormCreate(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; type TMyPanel = class(TPanel)protectedproperty Canvas;End;  var  Form1: TForm1;  Panel: TMyPanel; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); //
Ñîçäàåì
ôîðìóvarMyRect,ImgRect: TRect;beginMyRect:=Rect(0,0,100,80);ImgRect:=Rect(80,100,180,180);Panel:=TMyPanel.Create(Self);Panel.Width:=185;Panel.Height:=137;Panel.Parent:=Self;Panel.SetBounds(0,0,Panel.Width,Panel.Height); Panel.Canvas.CopyRect(Panel.ClientRect,Image1.Picture.Bitmap.Canvas,Panel.BoundsRect); end; end. {{/code}}
|  |   Вопрос задал: SOA (статус: Посетитель)Вопрос отправлен: 31 августа 2010, 15:10
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 31 августа 2010, 21:21; участников в обсуждении: 2. 
|   | min@y™ (статус: Доктор наук), 31 августа 2010, 15:36 [#1]:Понятно, что и в FormCreate картинка копируется, но при перерисовке (при показе формы) затирается. Если поставить кнопку, картинка копируется, но если теперь форму затащить за пределый экрана, а потом снова вытащить на центр, она опять сотрётся. Такой же эффект будет при перекрывании панели любыми чужими окнами. Кроме выноса свойства Canvas в видимую область, нужно ещё перекрывать метод TPanel.Paint(), где снова отрисовывать всю графику.
 
 Вопрос: нафига козе баян? Может всё сделать попроще? Зачем всё это?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SOA (статус: Посетитель), 31 августа 2010, 17:03 [#2]: unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
type TMyPanel = class(TPanel)
private
FSrcCanvas: TCanvas;
protected
property Canvas;
procedure Paint();Override;
property SrcCanvas:TCanvas read FSrcCanvas write FSrcCanvas;
End;
 
var
  Form1: TForm1;
  Panel: TMyPanel;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
i1,i2: Integer;
c: TColor;
r,g,b:byte;
rgn: HRgn;
begin
Panel:=TMyPanel.Create(Self);
Panel.FSrcCanvas:=Image1.Picture.Bitmap.Canvas;
Panel.Width:=185;
Panel.Height:=137;
Panel.Parent:=Self;
Panel.SetBounds(0,0,Panel.Width,Panel.Height);
 
Panel.Canvas.CopyRect(Panel.ClientRect,Image1.Picture.Bitmap.Canvas,Panel.BoundsRect);
 
end;
 
Procedure TMyPanel.Paint();
Begin
Canvas.CopyRect(Panel.ClientRect,SrcCanvas,Panel.BoundsRect);
End;Действительно так работает.
 Спасибо.
  |  
|   | min@y™ (статус: Доктор наук), 31 августа 2010, 17:12 [#3]: Цитата (SOA): Действительно так работает. Спасибо.  Почему не ответил на мои вопросы?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | SOA (статус: Посетитель), 31 августа 2010, 17:46 [#4]:Потому что TPanel должно использоваться и проще, например с помощью TImage сделать не получится.(По условиям проекта) >Зачем все это?
 программу пишу
  )) |  
|   | min@y™ (статус: Доктор наук), 31 августа 2010, 21:21 [#5]:Ога, всё очень понятно. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |