procedure TfrmXWBL.FormPaint(Sender: TObject);
var
aCanvas: Tcanvas;
X1, X2, Y,t,i: Integer;
byLineLength: BYTE;
begin
aCanvas := TCanvas.Create;
Y := RichEdit1.Height;
try
aCanvas.Handle := GetDC(RichEdit1.Handle);
t:=2+richedit1.DefAttributes.Height+6;
aCanvas.Pen.Color:=clskyblue;
acanvas.Pen.width:=1;
for i := 0 to RichEdit1.Lines.Count - 1 do
begin
//RichEdit1.
With aCanvas do
Begin
Begin
MoveTo(RichEdit1.Left+2,t); // Draw line after 80 characters
LineTo(RichEdit1.Width-1,t);
End;
end;
t:=t+richedit1.DefAttributes.Height+5;
end
Finally
ReleaseDC(RichEdit1.Handle,aCanvas.Handle);
aCanvas.Free;
End;
end;
各位高手,我想在richedit中的每行加一條線分隔,但是當richedit中的內容過多時,滾動滾動條就會把原來繪好的線條抹去。有沒有辦法在滾動滾動條時,原來劃的行線保留。謝謝!
uj5u.com熱心網友回復:
控制元件發生變動肯定要重繪的,如果不重繪會發生問題,你也不希望控制元件里面用滑鼠選擇的文字跟你看到的不一樣吧。你要保留這個線,只能在RichEdit的onPaint事件中實作
uj5u.com熱心網友回復:
RichEdit的onPaint事件中實作加上你上面的代碼
uj5u.com熱心網友回復:
回應重繪事件,并按照你想的畫就可以了。不可能阻止重繪,那樣控制元件功能就不完整了。uj5u.com熱心網友回復:
RichEdit有全WMPaint訊息,如果能截獲到這個訊息,添加上你的重繪代碼就行了。uj5u.com熱心網友回復:
interface
uses
Messages, Windows, Graphics, ComCtrls;
type
TMyRichEdit = class(TRichEdit)
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;
implementation
{ TMyRichEdit }
procedure TMyRichEdit.WMPaint(var Message: TWMPaint);
var
ACanvas: Tcanvas;
X1, X2, Y,t,i: Integer;
byLineLength: BYTE;
begin
inherited;
aCanvas := TCanvas.Create;
Y := Self.Height;
try
ACanvas.Handle := GetDC(Self.Handle);
t:=2+Self.DefAttributes.Height+6;
aCanvas.Pen.Color:=clskyblue;
acanvas.Pen.width:=1;
for i := 0 to Self.Lines.Count - 1 do
begin
With ACanvas do
Begin
Begin
MoveTo(Self.Left+2,t); // Draw line after 80 characters
LineTo(Self.Width-1,t);
End;
end;
t:=t+Self.DefAttributes.Height+5;
end
Finally
ReleaseDC(Self.Handle,ACanvas.Handle);
ACanvas.Free;
End;
end;
然后動態創建這個控制元件即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108850.html
標籤:VCL組件開發及應用
