-3

通常のフォームで行うのと同じように、実行時にフレーム Canvas に描画する必要がありますが、何らかの理由で、TCustomFrame と TCustomForm の両方が Canvas を処理する同じ親クラスに由来する場合でも、Canvas プロパティをフレームに追加しないことにしました。 .

PaintWindow プロシージャをオーバーライドして何かを描画できる部分まで動作させましたが、実行時に Canvas プロパティを使用できないようです。コードの大きな塊が欠けているかのようです。

これが私が今までやってきたことです:

TCustomFrameEx = class(TCustomFrame)
  private
    FCanvas: TControlCanvas;
    function GetCanvas: TCanvas;
  public
  property Canvas: TCanvas read GetCanvas;
end;

TFrame = class(TCustomFrameEx)
  protected
    procedure PaintWindow(DC: HDC); override;        
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;
  published
    ...
  end;

constructor TFrame.Create(AOwner: TComponent);
begin
  inherited;
  FCanvas := TControlCanvas.Create();
end;

destructor TFrame.Destroy();
begin
  FreeAndNil(fCanvas);
  inherited;
end;

function TCustomFrameEx.GetCanvas : TCanvas;
begin
  Result := fCanvas;
end;

procedure TFrame.PaintWindow(DC: HDC);
begin
  inherited;
  FCanvas.Handle := DC;
  FCanvas.Control := Self;
  FCanvas.Brush.Color := clWhite;
  fCanvas.FillRect(GetClientRect);
  FCanvas.Handle := 0;
end;

ハンドルを適切に割り当てていないか、ペイントイベントが欠落していると思いますか?

4

2 に答える 2