線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2896
推到 Plurk!
推到 Facebook!

如何改变Tedit失效后的字体颜色?

答題得分者是:maomfh
like
一般會員


發表:30
回覆:35
積分:18
註冊:2005-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-01 11:41:05 IP:58.17.xxx.xxx 訂閱
在一个线程创建一个窗体后,该窗体上有一个<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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-09 10:30:55 IP:218.163.xxx.xxx 訂閱
要修改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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-14 09:52:50 IP:58.17.xxx.xxx 訂閱
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]
系統時間:2024-03-28 22:37:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!