我继承了TGraphicControl类做了一个控件,要把内容擦除,恢复透明状态,我已经参照了TShape的做法,可是还是不行,不知为何,请指点,代码如下:
Pen.Style := psClear;
Pen.Width := 1;
Pen.Mode := pmCopy;
Brush.Style := bsClear;
Rectangle(Rect);
Pen.Style := psClear;
Pen.Width := 1;
Pen.Mode := pmCopy;
Brush.Style := bsClear;
Rectangle(Rect);
解决方案 »
- 祝大家新年快乐散分咯
- 高人指点下这样的驱动用什么做最方便?
- DELPHI对DBF表操作!多答再加分~
- Delphi是不是可以直接应用c++的头文件的?
- 这本书怎么样,适合初学者吗?
- 关于常量问题
- 关于richedit控件所显示的内容保存的问题?
- TreeView 中怎样最快找到所有一个节点下所有子结点?
- 关于WebBrowser多页面浏览器的问题
- 请问各位,谁会用ftDateTime?我想时间类型中输入的时候自动有 - -,听说ftDateTime可以,可老提示有错
- 数据采集过程中,拖动窗体采集则停止
- 我的access数据库中有个ole字段,在quickreport中用TQRDBText显示其内容可以吗?用TQRDBRichText有些字符如φ会有问题
TTempGraphic = class(TGraphicControl)
protected
procedure Paint; override;
end;{ TTempGraphic }procedure TTempGraphic.Paint;
begin
inherited;
// Canvas.Pen.Style := psClear;//如果有这条就是全部透明了~~ Canvas.Brush.Style := bsClear;
Canvas.Rectangle(Rect(0, 0, Width, Height));
end;{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
begin
with TTempGraphic.Create(Self) do begin
Parent := Self;
Width := 100;
Height := 100;
end;
end;
//不明白你的意思,随便灌灌~~
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
TTempGraphic = class(TGraphicControl)
protected
procedure Paint; override;
end;var
Form1: TForm1;
xx: TTempGraphic;
d: Boolean = true;implementationprocedure TTempGraphic.Paint;
begin
inherited;
// Canvas.Pen.Style := psClear;//如果有这条就是全部透明了~~ Canvas.Brush.Style := bsClear;
Canvas.Rectangle(Rect(0, 0, Width, Height));
if d then
begin
Canvas.Pen.Style := psSolid;
Canvas.Rectangle(Rect(10, 10, 20, 20));
end
else
begin
Canvas.Pen.Style := psClear;//如果有这条就是全部透明了~~
Canvas.Rectangle(Rect(10, 10, 20, 20));
end;
end;
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
xx := TTempGraphic.Create(Self);
with xx do begin
Parent := Self;
Width := 100;
Height := 100;
end;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
d := True;
xx.Paint;
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
d := False;
xx.Paint;
end;
TTempGraphic = class(TGraphicControl)
private
FTransparent: Boolean;
procedure SetTransparent(const Value: Boolean);
protected
procedure Paint; override;
public
property Transparent: Boolean read FTransparent write SetTransparent;
end;type
TForm1 = class(TForm)
Label1: TLabel;
CheckBox1: TCheckBox;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
FTempGraphic: TTempGraphic;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TTempGraphic }procedure TTempGraphic.Paint;
begin
inherited;
Canvas.Brush.Style := bsClear;
Canvas.Rectangle(Rect(0, 0, Width, Height));
if not FTransparent then Canvas.Brush.Style := bsSolid;
Canvas.Rectangle(Rect(10, 10, 20, 20));
end;procedure TTempGraphic.SetTransparent(const Value: Boolean);
begin
if FTransparent = Value then Exit;
FTransparent := Value;
Repaint;
end;{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
begin
FTempGraphic := TTempGraphic.Create(Self);
with FTempGraphic do begin
Parent := Self;
Width := 100;
Height := 100;
end;
end;procedure TForm1.CheckBox1Click(Sender: TObject);
begin
FTempGraphic.Transparent := TCheckBox(Sender).Checked;
end;
Value值改变后原来的没有擦除:(unit Unit1;interfaceuses SysUtils, Classes, Types, Controls, Graphics, Windows;type
TTest = class(TGraphicControl)
private
FValue: Integer; procedure SetValue(Value: Integer);
public
protected
procedure Paint; override;
published
property Value: Integer read FValue write SetValue;
end;
procedure Register;implementationprocedure TTest.Paint;
var
R: TRect;
begin
inherited;
Canvas.Brush.Style := bsClear;
Canvas.Rectangle(Rect(0, 0, Width, Height)); Canvas.Font.Size := 24; R.Top := 0;
R.Right := 0;
R.Right := Width;
R.Bottom := Height;
DrawText(Canvas.Handle, PChar(IntToStr(FValue)), Length(IntToStr(FValue)), R, DT_EXPANDTABS);
end;procedure TTest.SetValue(Value: Integer);
begin
FValue := Value;
Paint;
end;procedure Register;
begin
RegisterComponents('Test', [TTest]);
end;end.
begin
FValue := Value;
Paint; //Paint替换成Repaint; //画布更改了,还要显示在屏幕上~~
end;