0

Delphi 7 を使用しています。

タブに関連するページにコンテンツがあることをタブのキャプションで示したい。ページの dbgrid にコンテンツがある場合、ボックスとして表示される文字 n で表される曲がりくねったキャプションを続けたいと思います。そのため、「患者の病歴」というキャプションの代わりに、「患者の病歴」+小さな塗りつぶされたボックスが表示されます。

記号は wingding のフォント タイプの文字 'n' であるため、キャプションの途中でフォント タイプを変更し、文字 n を追加して、キャプションの最後に小さな塗りつぶされたボックスを作成します。

Tabsheet.caption := 'Patient History ' + changefonttypetowinding + 'n'.

実行可能ですか?

4

2 に答える 2

6

あなたはここでオーナードローのテリトリーに入りましたが、テーマを考慮すれば、うまくいくのは簡単なことではありません。あなたがその道を行くなら、私はWingdingsを気にせず、箱をペイントするだけTCanvas.FillRectです.

個人的には、Unicode Delphi を調べて、U+2587 (▇) またはその仲間の 1 つを使用します。

于 2011-03-05T16:40:47.640 に答える
3

Unicode対応バージョンのDelphiを使用していないため、Davidが指摘しているように、所有者描画または「ANSI」文字セットに制限されています。(私の提案は、Delphi 2009+にアップグレードすることです。Unicodeはデジタルの世界でこれまでに起こった中で最高のものです。Unicodeを使用すると、127または255ではなく数万文字(理論的にはフォントごとに!)を取得できます。これには、あらゆる種類の言語、技術的および数学的な記号、さまざまな絵記号が含まれます。ベンゼン環もあります:U + 232Cベンゼン環:⌬)

ここで、アップグレードが不可能であると仮定しましょう。次に、私があなたである場合、この目的のために歴史的な「標準文字」、つまりアスタリスク(*)を使用します。私はあなたの場合これを非常に強くお勧めします。

あなたがリリー、リリー、黒い四角が欲しいなら、あなたは所有者の描画をしなければなりません。あなたはこのようにするかもしれません:

// Please don't do this -- see comments below
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
const
  Padding = 8;
  SqSize = 6;
var
  capt: string;
  r: TRect;
begin
  capt := TTabControl(Control).Tabs[TabIndex];
  r := Rect;
  r.Left := r.Left + Padding;
  DrawText(Control.Canvas.Handle, capt, length(capt), r, DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
  r.Left := r.Right - Padding - SqSize;
  r.Right := r.Left + SqSize;
  r.Top := (r.Bottom - r.Top - SqSize) div 2;
  r.Bottom := r.Top + SqSize;
  FillRect(Control.Canvas.Handle, r, GetStockObject(BLACK_BRUSH));
end;

ただし、これによりビジュアルテーマが無効になることに注意してください。恐ろしく見えます!これをしないでください!

于 2011-03-05T19:52:13.040 に答える