ボタンのキャプションで部分的に文字の書式を変更するには?

解決


Logic77  2004-07-21 05:12:33  No: 9989

ボタン(TButtonやTSpeedButton)のキャプション(Caption)について質問があります。キャプションの文字の属性(フォントやサイズ、色など)を部分的に変化させたいと考えています。例えば、「ABC」という文字がボタンのキャプションに書かれている場合、そのうちの「B」だけ色を変えたり、サイズを変えたりすることは可能でしょうか?  そして、できれば、それをコードで実現したいのですが、そのようなことはできないでしょうか?。本やインターネットで調べてみましたが、わかりませんでした。どなたか、ご存知の方がいらっしゃいましたら、お教えください。


スタテツ  2004-07-21 09:12:09  No: 9990

TButtonからは無理です。TBitBtn使わせてください。
コンポーネント化すると便利そうですね。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons; //, XPMan

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    //XPManifest1: TXPManifest;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private 宣言 }
    bmp:TBitmap;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses Math;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
bmp.Width:=BitBtn1.Width-5;
bmp.Height:=BitBtn1.Height-5;
bmp.Canvas.Pen.Color:=clBtnFace;
bmp.Canvas.Brush.Color:=clBtnFace;
bmp.Canvas.Rectangle(0,0,bmp.Width,bmp.Height);

for i:=0 to 20 do
begin
  bmp.Canvas.Font.Color:=RGB(Random(255),Random(255),Random(255));
  bmp.Canvas.Font.Size:=Random(4)+10;
  bmp.Canvas.TextOut(Random(bmp.Width-15)+5,Random(bmp.Height-15)+5,'B');
end;

BitBtn1.Glyph:=bmp;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=TBitmap.Create;
BitBtn1.Margin:=0;
BitBtn1.Spacing:=0;
BitBtn1.Caption:='';
BitBtn1.Height:=65;
BitBtn1.Width :=150;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
bmp.Free;
end;

end.


Logic77  2004-07-22 07:35:45  No: 9991

スタテツさん、早速の回答ありがとうございました。
コードを参考にさせていただきました。
おかげさまで、SpeedButtonで試したところ、
計画していたことが実現できました。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private 宣言 }
    bmp:TBitmap;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;
  mousedown_count : integer ;

implementation

uses Math;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  bmp := TBitmap.Create ;

  bmp.Width:=SpeedButton1.Width;
  bmp.Height:=SpeedButton1.Height;
  bmp.Canvas.Pen.Color:=clBtnFace;
  bmp.Canvas.Brush.Color:=clBtnFace;
  bmp.Canvas.Rectangle(0,0,bmp.Width,bmp.Height);

  bmp.Canvas.Font.Color:= clBlack ;
  bmp.Canvas.Font.Size:= 20 ;

  bmp.Canvas.TextOut(20, 20, 'A');
  bmp.Canvas.TextOut(50, 20, 'B');
  bmp.Canvas.TextOut(80, 20, 'C');

  SpeedButton1.Glyph := bmp ;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  bmp.Free;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  close ;  //終了
end;

procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  j : integer ;
begin
  bmp.Canvas.Font.Color:= clLime ;
  bmp.Canvas.Font.Size:= 20 ;

  Inc(mousedown_count) ;
  j := mousedown_count mod 3 ;
  case j of
    1 : bmp.Canvas.TextOut(20, 20 , 'A');
    2 : bmp.Canvas.TextOut(50, 20 , 'B');
    0 : bmp.Canvas.TextOut(80, 20 , 'C');
  end ;
  SpeedButton1.Glyph := bmp ;
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  bmp.Canvas.Font.Color:= clBlack ;
  bmp.Canvas.Font.Size:= 20 ;

  bmp.Canvas.TextOut(20, 20 , 'A');
  bmp.Canvas.TextOut(50, 20 , 'B');
  bmp.Canvas.TextOut(80, 20 , 'C');

  SpeedButton1.Glyph := bmp ;
end;

end.

//SpeedButton1 のサイズを縦:73 × 横:123 にして実行しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加