请教各位:下面是我在屏幕上的某一坐标范围类画的一些点
ADODS_TrendGraph.First;
X := (Img_TrendGraph.Width - 5 * 120) div 2 + 1;//46
while not ADODS_TrendGraph.Eof do
begin
DataValue := ADODS_TrendGraph['xl'];
Y := (Img_TrendGraph.Height - 30) - DataValue;//290-数据值
Img_TrendGraph.Canvas.Pixels[X, Y] := clWhite;
Img_TrendGraph.Canvas.Pixels[X + 1, Y] := clWhite;
Img_TrendGraph.Canvas.Pixels[X + 2, Y] := clWhite;
X := X + 5;
ADODS_TrendGraph.Next;
end;我在下一次再画新的点的时候应该抹除上一个,于是我用了下面的语句:
Img_TrendGraph.Canvas.Brush.Style := bsClear;
Img_TrendGraph.Canvas.Brush.Style := bsSolid;
Img_TrendGraph.Canvas.Brush.Color := clblack;
Img_TrendGraph.Canvas.Rectangle(46, 20, 645, 290);//坐标范围
但是这样的效果不是很好,请教各位有没有更好的办法,谢谢。说简单一些:在屏幕上的某一个坐标内画上一些离散的点,在发生某一事件的时候,清除现有坐标内的点,然后把新的点画上去。
ADODS_TrendGraph.First;
X := (Img_TrendGraph.Width - 5 * 120) div 2 + 1;//46
while not ADODS_TrendGraph.Eof do
begin
DataValue := ADODS_TrendGraph['xl'];
Y := (Img_TrendGraph.Height - 30) - DataValue;//290-数据值
Img_TrendGraph.Canvas.Pixels[X, Y] := clWhite;
Img_TrendGraph.Canvas.Pixels[X + 1, Y] := clWhite;
Img_TrendGraph.Canvas.Pixels[X + 2, Y] := clWhite;
X := X + 5;
ADODS_TrendGraph.Next;
end;我在下一次再画新的点的时候应该抹除上一个,于是我用了下面的语句:
Img_TrendGraph.Canvas.Brush.Style := bsClear;
Img_TrendGraph.Canvas.Brush.Style := bsSolid;
Img_TrendGraph.Canvas.Brush.Color := clblack;
Img_TrendGraph.Canvas.Rectangle(46, 20, 645, 290);//坐标范围
但是这样的效果不是很好,请教各位有没有更好的办法,谢谢。说简单一些:在屏幕上的某一个坐标内画上一些离散的点,在发生某一事件的时候,清除现有坐标内的点,然后把新的点画上去。
解决方案 »
- PB调用DELPHI的DLL之间传值的问题,大家来看看
- 怎样可以隐藏 ListView 中的某一行呢?
- 关于打印的问题?
- 关于设计报表时候遇到的一个极难的问题,请指教谢谢!!!
- 怎么样把数据库里的某个字段读到ComboBox1里?
- 如何用Delphi在SQL Server中建立存储过程??请各位多多帮忙!!
- 80分~dll中调用form的问题~在panel里showmodal后,整个程序无法操作
- 100分求教! adocmdset
- 请问在 delphi 中怎么使用自己定义的鼠标!
- 冒着杀头的危险,为大家做一次贡献,一个企业分析文档,详见内//qiubolecn(来自差生市)
- WebBowser控件,请问有无办法侦测页面是否导入完毕
- 一个乱七八糟的BUG。。。。
方法一会不会太复杂了啊
方法二不是我要的效果,因为原来的点我们就是要放弃的,新的点与旧点是不一样的,
我的做法是,在坐标内点的分布区域用画刷重新画一次背景色,大小为坐标的范围,但是这样做会不会因为图像每次都层叠而产生隐患呢?
谢谢!
function DispOnDesk(Str,Font:String;x,y,FontSize:Integer;DeskCanvas:TCanvas):Boolean ;
begin
deskcanvas.Font.Name := Font;
deskcanvas.Font.size := FontSize;
deskcanvas.TextOut(x,y,Str);
beginpath(deskcanvas.Handle);
deskcanvas.TextOut(x,y,Str);
endpath(deskcanvas.Handle);
deskcanvas.Pen.Color :=RGB(0,0,160);
StrokePath(deskcanvas.Handle);
end;procedure TForm1.Timer3Timer(Sender: TObject);
//画布清除
procedure ClearDesk(x,y,x1,y1:Integer);
var R: TRect;
begin
R := Rect(x,y,x1,y1);
RedrawWindow(0,@R,0, RDW_INVALIDATE or RDW_ALLCHILDREN);
end;//在画布上绘字
function DispOnDesk(Str,Font:String;x,y,FontSize:Integer;DeskCanvas:TCanvas):Boolean ;
begin
deskcanvas.Font.Name := Font;
deskcanvas.Font.size := FontSize;
deskcanvas.TextOut(x,y,Str);
beginpath(deskcanvas.Handle);
deskcanvas.TextOut(x,y,Str);
endpath(deskcanvas.Handle);
deskcanvas.Pen.Color :=RGB(0,0,160);
StrokePath(deskcanvas.Handle);
end;procedure TForm1.Timer1Timer(Sender: TObject);
var s,StrYB,StrWord,StrComm:String;
i,x,y:integer;
R: TRect;
deskcanvas:TCanvas;
begin
DeskCanvas:=Tcanvas.create;
deskcanvas.Handle:=GetDC(0);
x:=screen.Width div 5;
y:=Screen.Height div 2 -200;
ClearDesk(x,y,x+2000,y+300); //清除画布
Sleep(10) ; //很重要的一句,要不就会显示后就消失
SetBkMode( deskcanvas.Handle, TRANSPARENT );
deskcanvas.Font.style := [fsBold];
deskcanvas.Font.Color :=RGB(255,0,0);
x:=x; y:=y+100;
DispOnDesk('兄弟们,中秋节快乐...'+strYB+'!','DFPhonetic',x,y,45, deskcanvas) ;
x:=x; y:=y+60;
DispOnDesk(strcomm,'黑体',x,y,35, deskcanvas) ;
ReleaseDC(0,deskcanvas.Handle);
end;