通常のフォームで行うのと同じように、実行時にフレーム 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;
ハンドルを適切に割り当てていないか、ペイントイベントが欠落していると思いますか?