Мне нужно нарисовать рамки Canvas во время выполнения так же, как вы делали бы с нормальной формой, но по какой-то причине они решили не добавлять свойство Canvas в фрейм, даже как TCustomFrame, так и TCustomForm происходят из того же родительского класса, который обрабатывает Холст.Использование TFrame, как правильно получить доступ к свойству TCanvas так же, как в TForm?
Я обработал его до той части, где я могу что-то нарисовать, переопределив процедуру 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;
Я предполагаю, что я не правильно назначая ручку или отсутствует какой-то краски событие?
Не имеет ли TFrame метод Paint? –
@DavidHeffernan Нет, его реализация не существует. – Peter