德爾福V7指定字體從TComboBox D7
讓我先說,我不是一個真正的程序設計師前言我的補救問題。我是副警長,我偶爾寫一個項目來幫助我們做我們所做的事情。
我目前的項目包含多個TDBRichEdit控件。我已將各種格式化過程分配給工具欄按鈕。我希望能夠使用ComboBox更改RichEdit字體。組合框將填充字體列表,但不會影響TDBRichEdit控件的字體。我一直試圖弄清楚這一個多星期,我看不出問題所在。
這是我做了什麼:
表的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部分這些都是不是我的功能,我沒有足夠的知識窗臺完全理解他們。)組合框
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事件對ComboBox
procedure TForm1.cmbFontChange(Sender: TObject);
begin
if Ctrlupdating then Exit;
CurrText.Name := cmbFont.Items[cmbFont.ItemIndex];
end;
任何想法的
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的事件?
我的真正用意。我在評論說以上。你的一些舊問題有很好的答案應該被接受。 –