在Delphi 7中为TfontDialog添加自定义颜色

Dr.*_*erg 5 delphi winapi

我如何在TFontDialog中为彩色盒添加一些值?或者请告诉我有关可以选择自定义颜色的字体的组件?我使用的是Delphi 7.

谢谢.

我找到了一些方法...但是当itemIndex = 0时颜色框发生变化时我怎么能显示TColorDialog?

 procedure TForm1.FontDialog1Show(Sender: TObject);
const
 IDCOLORCMB = $473;
 SMyColorName: PChar = 'clMoneyGreen';
 CMyColor: TColor = clMoneyGreen;
begin
 SendDlgItemMessage(FontDialog1.Handle, IDCOLORCMB, CB_INSERTSTRING, 0,
 Integer(SMyColorName));
 SendDlgItemMessage(FontDialog1.Handle, IDCOLORCMB, CB_SETITEMDATA, 0,
   ColorToRGB(CMyColor));
end;
Run Code Online (Sandbox Code Playgroud)

And*_*and 7

我认为这有效:

interface

TFontDialog = class(Dialogs.TFontDialog)
const
  IDCOLORCMB = $473;
protected
  procedure WndProc(var Message: TMessage); override;
  procedure DoShow; override;
end;

...

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FontDialog1.Execute();
end;

{ TFontDialog }

procedure TFontDialog.DoShow;
const
  SMyColorName: PChar = 'Custom...';
  CMyColor: TColor = $0033ccff;
begin
  SendDlgItemMessage(Handle, IDCOLORCMB, CB_INSERTSTRING, 0, Integer(SMyColorName));
  SendDlgItemMessage(Handle, IDCOLORCMB, CB_SETITEMDATA, 0, ColorToRGB(CMyColor));
end;

procedure TFontDialog.WndProc(var Message: TMessage);
begin
  inherited;
  with Message do
    if (Msg = WM_COMMAND) and (WParamHi = CBN_SELENDOK) and (WParamLo = IDCOLORCMB) and (SendDlgItemMessage(Handle, IDCOLORCMB, CB_GETCURSEL, 0, 0) = 0) then
      with TColorDialog.Create(Self) do
        try
          Color := TColor(SendDlgItemMessage(Self.Handle, IDCOLORCMB, CB_GETITEMDATA, 0, 0));
          Options := [cdFullOpen];
          if Execute(Self.Handle) then
            SendDlgItemMessage(Self.Handle, IDCOLORCMB, CB_SETITEMDATA, 0, ColorToRGB(Color));
        finally
          Free;
        end;
end;
Run Code Online (Sandbox Code Playgroud)

但请注意,正如David在下面的评论中正确地指出的那样,如果对话框在未来版本的Windows中发生变化(足够明显),则此代码可能会失败.这可能是也可能不是OP的表现.

  • 那非常顽皮,你不知道! (3认同)
  • 好吧,这会假设对话框上的控件是实现细节.我希望你能得到正确的细节,但我认为这种做法很脆弱. (2认同)