Delphi v7
私は本当のプログラマーではないと言って、私の改善の質問の前に述べさせてください。私は副保安官であり、私たちがしていることを行うのを助けるために時折プロジェクトを書いています。
私の現在のプロジェクトには、いくつかのTDBRichEditコントロールが含まれています。ツールバーボタンにさまざまなフォーマットプロセスを割り当てました。ComboBoxを使用してRichEditフォントを変更できるようにしたいと思います。コンボボックスにはフォントリストが表示されますが、TDBRichEditコントロールのフォントには影響しません。私はこれを1週間以上理解しようとしてきましたが、問題がわかりません。
これは私がしたことです:
フォームOnCreateプロシージャ
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.ActivePage:= TabSheet1;
GetFontNames;
SelectionChange(Self);
CurrText.Name := DefFontData.Name;
CurrText.Size := -MulDiv(DefFontData.Height, 72, Screen.PixelsPerInch);
end;
フォーム選択の変更
procedure TForm1.SelectionChange(Sender: TObject);
begin
if ActiveControl is TDBRichEdit then
with ActiveControl as
TdbRichEdit do begin
try
Ctrlupdating := True;
Size.Text := IntToStr(SelAttributes.Size);
cmbFont.Text := SelAttributes.Name;
finally
Ctrlupdating := False;
end;
end;
end;
関数(「ActiveControlの部分を除いて、これらは私の関数ではなく、完全に理解するのに十分な知識がありません。)
Function TForm1.CurrText: TTextAttributes;
begin
if ActiveControl is TDBRichEdit then
with ActiveControl as
TdbRichEdit do begin
if SelLength > 0 then Result := SelAttributes
else Result := DefAttributes;
end;
end;
function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
FontType: Integer; Data: Pointer): Integer; stdcall;
begin
TStrings(Data).Add(LogFont.lfFaceName);
Result := 1;
end;
コンボボックスのOnDrawイベント
procedure TForm1.cmbFontDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TComboBox).Canvas do
begin
Font.Name := Screen.Fonts.Strings[Index];
FillRect(Rect) ;
TextOut(Rect.Left, Rect.Top, PChar(Screen.Fonts.Strings[Index]));
end;
end;
コンボボックスのOnChangeイベント
procedure TForm1.cmbFontChange(Sender: TObject);
begin
if Ctrlupdating then Exit;
CurrText.Name := cmbFont.Items[cmbFont.ItemIndex];
end;
何か案は?