绘图时修改,pen,brush等的属性,绘制完毕时想恢复原先的值,我不想用变量保存再恢复,就用savedc,restoredc函数,可是不管用,请大侠们帮看看。
procedure TForm1.Button1Click(Sender: TObject);
var
orgdc:integer;
begin
orgdc:=savedc(self.Canvas.Handle);
self.Canvas.Pen.Color:=clred;
self.Canvas.LineTo(100,100);
if not restoredc(self.Canvas.Handle,orgdc ) then
showmessage('error');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
self.Canvas.LineTo(200,300);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
orgdc:integer;
begin
orgdc:=savedc(self.Canvas.Handle);
self.Canvas.Pen.Color:=clred;
self.Canvas.LineTo(100,100);
if not restoredc(self.Canvas.Handle,orgdc ) then
showmessage('error');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
self.Canvas.LineTo(200,300);
end;
解决方案 »
- 关于加窗体后程序运行出错的问题,请高手帮帮忙[在线等]
- 增加一个事件。第二贴。请进来领分
- FastReport如何将两个报表的内容顺序打出,不换页?
- 怎样用ODBC连接带密码ACCESS数据库啊?
- 在线等待(紧急求救!)
- 怎么把一个Tbitmap对象存到数据库的Image类型字段,又怎么读回Tbitmap对象中
- 实在无招,请问高手,为啥Virtual Treeview展开节点,cpu占用就50%多?
- 小弟只剩下最后30分,想请问如何在dxDBGrid中连接Table1时做个表页尾一栏合计,比如AA平均值,BB合计等。万分感谢!
- 菜鸟问题:如何获取dbgril控件的当前所在的行和列?
- 建议大家能不能留下个人的QQ好联系啊! : )
- 250告急!!找组件求救!!
- 按行读文件,如何可以不加锁
我觉得如果用winapi来画线就能成功。
orgdc:integer;
begin
self.Canvas.Pen.Color:=clBlue;
//ShowMessage(IntToStr(self.Canvas.Pen.Color));
orgdc:=savedc(self.Canvas.Handle);
refresh; /// 我加的....
self.Canvas.Pen.Color:=clred;
//ShowMessage(IntToStr(self.Canvas.Pen.Color));
self.Canvas.LineTo(100,100);
if not restoredc(self.Canvas.Handle, orgDC) then
showmessage('error')
else begin
ShowMessage(IntToStr(self.Canvas.Pen.Color));
refresh;
end;
begin
Changing;
RequiredState(csAllValid);
Result := FHandle;
end;procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
NeededState: TCanvasState;
begin
NeededState := ReqState - State;
if NeededState <> [] then
begin
if csHandleValid in NeededState then
begin
CreateHandle;
if FHandle = 0 then
raise EInvalidOperation.CreateRes(@SNoCanvasHandle);
end;
if csFontValid in NeededState then CreateFont;
if csPenValid in NeededState then CreatePen;
if csBrushValid in NeededState then CreateBrush;
State := State + NeededState;
end;
end;procedure TCanvas.CreateFont;
begin
SelectObject(FHandle, Font.GetHandle);
SetTextColor(FHandle, ColorToRGB(Font.Color));
end;
或者用变量,或者用另外一个设备句柄。总之得有起暂存作用的对象来保存原来的值。