今、こんな感じでFontDialogとComboBoxでリンクさせてるんですが、もうちょっとスマートな記述ないでしょうか?
//FontDialog側
procedure TfrmWordStyle.btnSubSetClick(Sender: TObject);
begin
if dlgFont.Execute then
if (fsItalic in dlgFont.Font.Style) then
if (fsBold in dlgFont.Font.Style) then
cbxFontStyle.ItemIndex := 3
else
cbxFontStyle.ItemIndex := 1
else
if (fsBold in dlgFont.Font.Style) then
cbxFontStyle.ItemIndex := 2
else
cbxFontStyle.ItemIndex := 0;
end;
//ComboBox側
procedure TfrmWordStyle.cbxFontStyleChange(Sender: TObject);
begin
case cbxFontStyle.ItemIndex of
1:begin
dlgFont.Font.Style := dlgFont.Font.Style + [fsItalic];
dlgFont.Font.Style := dlgFont.Font.Style - [fsBold];
end;
2:begin
dlgFont.Font.Style := dlgFont.Font.Style - [fsItalic];
dlgFont.Font.Style := dlgFont.Font.Style + [fsBold];
end;
3:dlgFont.Font.Style := dlgFont.Font.Style + [fsItalic,fsBold];
else
dlgFont.Font.Style := dlgFont.Font.Style - [fsItalic,fsBold;
end;
end;
{*ComboBoxのアイテム*}
0:標準
1:斜体
2:太字
3:太字 斜体
コンボボックスのアイテムに変更・追加がないのであれば、
下記のような感じでどうでしょうか?
//FontDialog側
procedure TfrmWordStyle.btnSubSetClick(Sender: TObject);
var
n: Integer;
begin
if dlgFont.Execute then
begin
n:= 0;
if (fsItalic in dlgFont.Font.Style) then n:= n or $01;
if (fsBold in dlgFont.Font.Style) then n:= n or $02;
cbxFontStyle.ItemIndex:= n;
end;
end;
//ComboBox側
procedure TfrmWordStyle.cbxFontStyleChange(Sender: TObject);
var
NewStyles, I: TFontStyles;
begin
NewStyles:= [];
for I:= fsUnderline to High(TFontStyle) do
if I in dlgFont.Font.Style then Include(NewStyles, I);
if cbxFontStyle.ItemIndex and $01 <> 0 then Include(NewStyles, fsItalic);
if cbxFontStyle.ItemIndex and $02 <> 0 then Include(NewStyles, fsBold);
dlgFont.Font.Style:= NewStyles;
end;
ComboBox側の変数の宣言が間違えていますねスミマセン
var
NewStyles: TFontStyles;
I: TFontStyle;
ComboBox側の変数の宣言が間違えていますねスミマセン
var
NewStyles: TFontStyles;
I: TFontStyle;
本業が忙しくて見れてませんでしたσ(^_^; )アセアセ...
$01 とか $02
ってのがよくわからないんですが。
>$01 とか $02
>ってのがよくわからないんですが。
16進数表記で書いているだけです。
この場合アイテムのインデックスが最大でも3なので
ビット演算を用いてアイテムインデックスを割り出しています。
ツイート | ![]() |