如何能达到这个效果(100分)

  • 主题发起人 主题发起人 pander
  • 开始时间 开始时间
P

pander

Unregistered / Unconfirmed
GUEST, unregistred user!
NetAnts主窗体中的区块、日志、信息、连接选择时
内容的从左向右的展现,而不会发生抖动
我用timer作了,但效果不好,有抖动现象

另外:我用鼠标选择Timage的某一区域时,同样也有抖动现象(区域选择模仿葵花宝殿做的)
请教如何解决。
 
doublebuffered=true;
 
抖动的原因可能在画的过程中,你试着先在内存中构造好图片,再画到TImage上
 
问题1、

const
DisplayText = '卷起千堆雪tyn';
var
Done : Boolean;

procedure TForm1.Button2Click(Sender: TObject);
var
I :Integer;
Bitmap :TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.Width := Width;
Bitmap.Height := 40;
Bitmap.Canvas.Font.Name := 'Arial Bold';
Bitmap.Canvas.Font.Size := 16;
Bitmap.Canvas.Brush.Color := clSilver;
Bitmap.Canvas.FillRect(Rect(0, 0, Width, 40));
Done := False;
while not Done do begin
for I := -Bitmap.Canvas.TextWidth(DisplayText)
to Pred(Width) do begin
Application.ProcessMessages;
if (Done) then
Break;
Sleep(10);
Bitmap.Canvas.Font.Color := clGray;
Bitmap.Canvas.Brush.Style := bsClear;
Bitmap.Canvas.TextOut(2, 12, DisplayText);
Bitmap.Canvas.Font.Color := clBlack;
Bitmap.Canvas.Brush.Style := bsClear;
Bitmap.Canvas.TextOut(0, 10, DisplayText);
Canvas.Draw(I, 0, Bitmap);
end;
end;
Bitmap.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Done := True;
end;

问题2、

var
Draw :Boolean;
Sp,Ep :TPoint;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Draw :=False;
DoubleBuffered :=True; //在D6下加上这句
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Draw :=True;
Sp :=Point(x,y);
Ep :=Sp;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Draw then
begin
with Image1.Canvas do
begin
Pen.Mode :=pmNotXor;
Brush.Style :=bsClear;
Rectangle(Sp.x,Sp.y,Ep.x,Ep.y);
Ep :=Point(x,y);
Rectangle(Sp.x,Sp.y,Ep.x,Ep.y);
end;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Draw then
begin
with Image1.Canvas do
begin
Rectangle(Sp.x,Sp.y,Ep.x,Ep.y);
Pen.Mode :=pmCopy;
Rectangle(Sp.x,Sp.y,x,y);
end;
end;
Draw :=False;
end;
 
use api:AnimateWindow
 
TO:卷班主:
1。移动的如果是包含组件的容器呢,比如Panel,这种方法似乎不能用啊。
2。图形的区域选择始终只有一个,不是可以画若干个矩形,我用了DrawFocusRect,
这个东东画出来的矩形没有那么显眼,而且奇怪的是,它同样能画若干个。
 
有一点很奇怪,在向右移动的过程中(NetAnts),按PrintScreen拍下来的照片,都是已经移动好了的,拍不到移动过程!!
卷兄,这个怎么回事?
 
我也想知道什么回事
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部