2

Lazarus でカスタム ヒントを作成しようとしています。これまでのところ、ヒントのテキストを動的に読み込み、フォント フェイス、フォント サイズ、およびフォントの色をカスタマイズしました。ヒント ウィンドウの幅を制限したいと思います。何か案は?これが私のコードです。

type
  TExHint = class(THintWindow)
  constructor Create(AOwner: TComponent); override;

...

constructor TExHint.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  with Canvas.Font do
  begin
    Name  := 'Hanuman';
    Size  := Size + 3;
  end;
  //Canvas.Width := ;
end;

助けてくれてありがとう。

4

2 に答える 2

3

THintWindow現在、Lazarus のソースとメモ帳しかありませんが、理解することが最も重要であるため、 がどのように使用されているかを説明しようと思います。

  • クラス名をHintWindowClassグローバル変数に割り当てる場合、ヒント ウィンドウ クラスをアプリケーションでグローバルに使用できるように登録するとします。次に、アプリケーションがヒントを表示するたびに、ヒント ウィンドウ クラスを使用し、オーバーライドTHintWindowしなかった基本クラスの関数と共に、オーバーライドされた関数を呼び出します。アプリケーションのスコープで使用するヒント ウィンドウ クラスを登録する方法は次のとおりです。

HintWindowClass := TExHint;
  • ヒント ウィンドウのサイズを取得するために、アプリケーションはヒントCalcHintRectが表示されるたびに関数を呼び出します。ヒント ウィンドウのサイズを独自に調整するには、この関数をオーバーライドする必要があり
    、その結果、必要な境界四角形を返します。オーバーライドしない場合は、CalcHintRect(クラスの) 基本クラスの関数THintWindowが使用されるため、オーバーライドする必要があります。

type
  TExHint = class(THintWindow)
  public
    constructor Create(AOwner: TComponent); override;
    function CalcHintRect(MaxWidth: Integer; const AHint: String;
      AData: Pointer): TRect; override;
  end;

constructor TExHint.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  with Canvas.Font do
  begin
    Name := 'Hanuman';
    Size := Size + 3;
  end;
end;

function TExHint.CalcHintRect(MaxWidth: Integer; const AHint: String;
  AData: Pointer): TRect;
begin
  // here you need to return bounds rectangle for the hint
  Result := Rect(0, 0, SomeWidth, SomeHeight);
end;
于 2012-07-14T10:11:45.990 に答える
0

CreateParams をオーバーライドして、幅を好きなように設定できるはずです。

procedure TExHint.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Width := X; 
end;

私はこれをテストしていませんが、動作するはずです。

于 2012-07-13T18:25:21.600 に答える