Radiobuttonの黒丸がなかなか表示されない


カズ  2023-05-18 01:23:00  No: 150954  IP: [192.*.*.*]

Radiobuttonで何種類かの画像描画スタイルを選択して描画させるソフトを作っています。 ボタンを押せば(OnClickで)選択した画像は描画されますがボタンの表示は描画が終わるまで黒くなりません。(描画に10秒程度掛かる) ボタンを押したら短時間で黒く表示するようにする方法があったら教えてください。DelphiはXE3です。 

編集 削除
take  2023-05-18 02:41:54  No: 150955  IP: [192.*.*.*]

ソースがないのでクリックイベント内でどうやって描画させているのかわかりませんが
10秒もかかるのであれば、描画更新イベントか何かが何度も発生してしまっているかもしれません
描画中にフラグ立てて、描画中によばれたら処理しないとかすると変わりませんか?

編集 削除
AAAAA  2023-05-18 08:01:47  No: 150956  IP: [192.*.*.*]

ボタンの描画は適当 (青と赤)

  TRadioButton = class(vcl.StdCtrls.TRadioButton)
  private
    ControlCanvas: TControlCanvas;
    FCanvas: TCanvas;
    procedure WM_PAINT(var TWMPAINT); message WM_PAINT;
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Canvas: TCanvas read FCanvas;
  end;



constructor TRadioButton.Create(AOwner: TComponent);
begin
    inherited;
    FCanvas := TControlCanvas.Create;
    TControlCanvas(FCanvas).Control := Self;
end;

destructor TRadioButton.Destroy;
begin
    FreeAndNil(FCanvas);
    inherited;
end;

procedure TRadioButton.WM_PAINT(var TWMPAINT);
begin
    inherited;
    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := clBtnFace;
    Canvas.FillRect(Rect(0,0,Width,Height));
    if Checked = True then
    begin
      Canvas.Brush.Color := clRed;
      Canvas.FillRect(Rect(0,0,Height,Height));
    end
    else
    begin
      Canvas.Brush.Color := clBlue;
      Canvas.FillRect(Rect(0,0,Height,Height));
    end;
    Canvas.Brush.Style := bsClear;
    Canvas.TextOut(Height,0,Caption);
end;

編集 削除