Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Canvas объекта Panel


Автор: CENTRALFORWARD 9.3.2008, 12:15
Подскажите, как быть с Canvas объекта Panel, т.к. при движение кнопок A,B,C и D он не обновляется, а только после перемещения? Конечно, можно использовать Canvas объекта Image, но в данном случае нужна именно Panel как родитель в run-time.  И как сделать, чтобы стрелки (dxfConnectorW) не пропадали?

Автор: Alexeis 9.3.2008, 12:52
Цитата(CENTRALFORWARD @  9.3.2008,  11:15 Найти цитируемый пост)
Подскажите, как быть с Canvas объекта Panel, т.к. при движение кнопок A,B,C и D он не обновляется, а только после перемещения?

  Так он вообще-то скрыт у панели. Можно кинуть на панель PaintBox и получиться полноценная канва.

Автор: CENTRALFORWARD 9.3.2008, 14:45
Alexeis, если не сложно, то скачайте прикрепленный файл, чтобы понять всю суть вопроса. А PaintBox не может быть родителем в run-time, поэтому не подходит.

Автор: ivan219 9.3.2008, 14:55
CENTRALFORWARD держи компонент.
Код

unit FPanel;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Messages;

type
  TFPanel = class(TPanel)
  private
    FOnMouseEnter, FOnMouseLeave, FOnPaint: TNotifyEvent;
    procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
  protected
     procedure Paint; override;
  public
    property Canvas;
  published
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
    property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
  end;

procedure Register;

implementation
                      
procedure Register;
begin
  RegisterComponents('MyComponent', [TFPanel]);
end;

{ TFPanel }

procedure TFPanel.CMMouseEnter(var msg: TMessage);
begin
  inherited;
  if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure TFPanel.CMMouseLeave(var msg: TMessage);
begin
  inherited;
  if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;

procedure TFPanel.Paint;
begin
  inherited;
  if Assigned(FOnPaint) then FOnPaint(Self);
end;
end.


если хочешь можешь удалить всё оставив только 
Код

  public
    property Canvas;

Автор: CENTRALFORWARD 9.3.2008, 16:13
Повторюсь опять, если не сложно, то скачайте прикрепленный файл, чтобы понять всю суть вопроса!!!

Автор: ivan219 9.3.2008, 16:57
Цитата(CENTRALFORWARD @  9.3.2008,  12:15 Найти цитируемый пост)
т.к. при движение кнопок A,B,C и D он не обновляется,

Правильно так как фокус на кнопке и в это время отрисовывается dxfConnectorW

Автор: CENTRALFORWARD 9.3.2008, 17:38
Цитата(ivan219 @ 9.3.2008,  16:57)
Цитата(CENTRALFORWARD @  9.3.2008,  12:15 Найти цитируемый пост)
т.к. при движение кнопок A,B,C и D он не обновляется,

Правильно так как фокус на кнопке и в это время отрисовывается dxfConnectorW

И как же быть?

Автор: ivan219 9.3.2008, 18:31
Цитата(CENTRALFORWARD @  9.3.2008,  17:38 Найти цитируемый пост)
И как же быть?

Переписывать dxfConnection

Автор: CENTRALFORWARD 9.3.2008, 19:34
Цитата(ivan219 @ 9.3.2008,  18:31)
Цитата(CENTRALFORWARD @  9.3.2008,  17:38 Найти цитируемый пост)
И как же быть?

Переписывать dxfConnection

Не о силю. Может есть сторонний компонент с Canvas и возможностью в run-time быть родителем? И есть ли компонент что-то вроде dxfConnection?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)