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