一个关于不知道是继承还是重载的问题.(200分)

  • 主题发起人 主题发起人 Bigsun
  • 开始时间 开始时间
B

Bigsun

Unregistered / Unconfirmed
GUEST, unregistred user!
我要想重画Edit控件的背景,该怎样实现呢?
 
用canvas就可以了。
 
Tedit有canvas方法吗?
 
Tedit有canvas方法吗?没有。
你要画什么背景,如果只是色彩的话,可用edit1.color=color;
 
TEdit为什么要有Canvas属性(方法)呢?
可以这样做:
假如 TEdit 变量名为edt。
定义 TControlCanvas(Inherit from TCanvas) 变量.
cav :TControlCanvas;
cav.Control := edt;
这样就可以在cav上画你想要的背景。
 
这样:
Edit1.Brush.Color := clBlue;
 
现定义是画布,把画布的控制类连到TEDIT上应该就行!
 
能说的详细点吗?谢谢!
 
划一个小方块!
procedure TForm1.startClick(Sender: TObject);
var
c:tcanvas;
begin
c:=tcontrolcanvas.Create;
tcontrolcanvas(c).Control:=edt;
c.Brush.Style:=bsClear;
c.Pen.Color:=clBlue;
c.Rectangle(5,5,15,15);
c.Free;
忘记说了!这些应该在onpaint或onchange事件中写!
 
作背景图!
procedure TForm1.Button1Click(Sender: TObject);
var
; Cav : TControlCanvas;
; Bmp : TBitMap;
begin
; Bmp := TBitMap.Create;
; Cav := TControlCanvas.Create;
; try
; ; Bmp.LoadFromFile('d:/Setup.bmp');
; ; Cav.Handle := GetDC(Edit1.Handle);
; ; Cav.Draw(0,0,Bmp)
; finally
; ; Cav.Free;
; ; Bmp.Free;
; end;
end;
 
用楼上这位仁兄的方法是可以画出背景图,但写入字(eidt1.text)后背景图就被冲掉了!
能不能重载一个Tedit用消息的方法画Tedit的背景呢?请给个答案,谢谢!
 
愿闻其详...
 
不是说了吗,应该在onchange事件中写!try it!
 
比较正规的方法是重载WndProc方法,很多控件事这么实现的。jbas自己试验过了吗?
写入文字后,背景是正确的,但文字不见了。要自己控制文字输出吗?Edit还好办,Memo、
RichEdit就比较麻烦了。
 
sorry,我画那个方块可以在onchange中画,没有问题,但图片是有问题,请指教了!
 
>>superpage
>>Bigsun
不好意思,几天没来了,画背景图想不冲掉文字可以在调Draw之前设画布的CopyMode=cmSrcAnd
,不过这样做后也不能解决问题,因为没有处理背景图的重画。这些内容涉及到组件编写,我
不是很熟的!
 
重载Paint方法
 
I has email to you
 
接受答案了.
 
后退
顶部