フォントスタイルの制御


印刷屋  2007-02-19 00:06:15  No: 24957

今、こんな感じで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:太字 斜体


Basser  2007-02-19 23:39:00  No: 24958

コンボボックスのアイテムに変更・追加がないのであれば、
下記のような感じでどうでしょうか?

//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;


Basser  2007-02-20 01:50:20  No: 24959

ComboBox側の変数の宣言が間違えていますねスミマセン

var
  NewStyles: TFontStyles;
  I: TFontStyle;


Basser  2007-02-20 01:50:21  No: 24960

ComboBox側の変数の宣言が間違えていますねスミマセン

var
  NewStyles: TFontStyles;
  I: TFontStyle;


印刷屋  2007-02-27 23:05:39  No: 24961

本業が忙しくて見れてませんでしたσ(^_^; )アセアセ...
$01  とか  $02
ってのがよくわからないんですが。


Basser  2007-02-28 00:51:56  No: 24962

>$01  とか  $02
>ってのがよくわからないんですが。

16進数表記で書いているだけです。

この場合アイテムのインデックスが最大でも3なので
ビット演算を用いてアイテムインデックスを割り出しています。


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

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






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