如何改变Tedit失效后的字体颜色? |
答題得分者是:maomfh
|
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
在一个线程创建一个窗体后,该窗体上有一个<layer id="searchwp-highlighting2" highlight="term-3" class="searchwp-term">TEdit</layer>控件,当<layer id="searchwp-highlighting3" highlight="term-3" class="searchwp-term">TEdit</layer>控件的enabled为false时,其<layer id="searchwp-highlighting4" highlight="term-4" class="searchwp-term">字体颜色</layer>为灰色,请问是否有办法将其<layer id="searchwp-highlighting0" highlight="term-2" class="searchwp-term">改变</layer>为其他颜色?
我用下面的方<layer id="searchwp-highlighting1" highlight="term-2" class="searchwp-term">改变</layer>其颜色时,出现错误,Canvas does not allow drawing. var ca:TCanvas; begin ca:=TCanvas.create; ca.handle:=GetDC(Edit.handle); ca.font.color:=clred; ca.textout(0,0,edit.text); //执行到这一步报错。 end; 这个错误是与线程有关。canvas不支持多线程。 但是否有其他的办法改变在TEdit控件Enabled为false时,字体的颜色呢? 还请指点,谢谢! 編輯記錄
like 重新編輯於 2008-08-01 12:46:31, 註解 無‧
|
maomfh
初階會員 發表:3 回覆:10 積分:27 註冊:2008-01-05 發送簡訊給我 |
要修改TEdit 失效後的顏色,那可從TEdit 繼承,新增一個元件(TMyEdit), 其中我們新增一個TCanvas的屬性,用來畫TEdit失效後的圖樣, 另外新增二個欄位 FDisTextColor 及 FDisTextBGColor 用來記錄, 失效後的文字顏色及背景色. 再把 Create 及 WMPaint 覆蓋, 完整元件如下 :
[code delphi] unit MyEdit; interface uses SysUtils, Classes, Messages, Controls, StdCtrls, Graphics; type TMyEdit = class(TEdit) private FDisTextColor : TColor; FDisTextBGColor : TColor; procedure SetDisTextBGColor(const Value: TColor); procedure SetDisTextColor(const Value: TColor); { Private declarations } protected { Protected declarations } FCanvas : TCanvas; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; public { Public declarations } constructor Create(AOwner : TComponent); override; published { Published declarations } property DisTextColor : TColor read FDisTextColor write SetDisTextColor default clGrayText; property DisTextBGColor : TColor read FDisTextBGColor write SetDisTextBGColor default clWhite; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyEdit]); end; { TCustomEdit1 } constructor TMyEdit.Create(AOwner: TComponent); begin inherited; FDisTextColor := clGrayText; FDisTextBGColor := clWhite; FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := Self; end; procedure TMyEdit.SetDisTextBGColor(const Value: TColor); begin FDisTextBGColor := Value; Changed; end; procedure TMyEdit.SetDisTextColor(const Value: TColor); begin FDisTextColor := Value; Changed; end; procedure TMyEdit.WMPaint(var Message: TWMPaint); begin inherited; if not Enabled then begin FCanvas.Font := Font; FCanvas.Font.Color := FDisTextColor; FCanvas.Brush.Color := FDisTextBGColor; FCanvas.FillRect(ClientRect); FCanvas.TextOut(1, 1, Text); end; end; end.[/code]
------
Maomfh
編輯記錄
maomfh 重新編輯於 2008-08-09 10:32:59, 註解 無‧
maomfh 重新編輯於 2008-08-10 22:34:19, 註解 無‧ maomfh 重新編輯於 2008-08-10 22:34:31, 註解 無‧ maomfh 重新編輯於 2008-08-11 11:27:19, 註解 無‧ maomfh 重新編輯於 2008-08-11 11:27:58, 註解 無‧ maomfh 重新編輯於 2008-08-11 11:34:57, 註解 無‧ maomfh 重新編輯於 2008-08-11 11:38:18, 註解 無‧ maomfh 重新編輯於 2008-08-11 12:09:45, 註解 無‧ |
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
maomfh大大,十分感谢!
===================引 用 maomfh 文 章=================== 要修改TEdit 失效後的顏色,那可從TEdit 繼承,新增一個元件(TMyEdit), 其中我們新增一個TCanvas的屬性,用來畫TEdit失效後的圖樣, 另外新增二個欄位 FDisTextColor 及 FDisTextBGColor 用來記錄, 失效後的文字顏色及背景色. 再把 Create 及 WMPaint 覆蓋, 完整元件如下 : [code delphi] unit MyEdit; interface uses SysUtils, Classes, Messages, Controls, StdCtrls, Graphics; type TMyEdit = class(TEdit) private FDisTextColor : TColor; FDisTextBGColor : TColor; procedure SetDisTextBGColor(const Value: TColor); procedure SetDisTextColor(const Value: TColor); { Private declarations } protected { Protected declarations } FCanvas : TCanvas; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; public { Public declarations } constructor Create(AOwner : TComponent); override; published { Published declarations } property DisTextColor : TColor read FDisTextColor write SetDisTextColor default clGrayText; property DisTextBGColor : TColor read FDisTextBGColor write SetDisTextBGColor default clWhite; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyEdit]); end; { TCustomEdit1 } constructor TMyEdit.Create(AOwner: TComponent); begin inherited; FDisTextColor := clGrayText; FDisTextBGColor := clWhite; FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := Self; end; procedure TMyEdit.SetDisTextBGColor(const Value: TColor); begin FDisTextBGColor := Value; Changed; end; procedure TMyEdit.SetDisTextColor(const Value: TColor); begin FDisTextColor := Value; Changed; end; procedure TMyEdit.WMPaint(var Message: TWMPaint); begin inherited; if not Enabled then begin FCanvas.Font := Font; FCanvas.Font.Color := FDisTextColor; FCanvas.Brush.Color := FDisTextBGColor; FCanvas.FillRect(ClientRect); FCanvas.TextOut(1, 1, Text); end; end; end.[/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |