Autor Beitrag
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Di 07.09.04 13:06 
Weiß einer wieso Shapes so langsam sind? Wenn ich 80 Shapes auf dem Formular bewege, dann ruckelt es schon ziemlich stark. Wer es sehen will, der kann das Beispiel am Ende ausprobieren. Da bin ich schneller wenn ich auf Canvas zeichne. Die Frage die mich interresiert ist, ob pro Shape-Änderung das ganze Formular neu gezeichnet wird. Anders kann ich mir das nicht vorstellen. Wird also nur der kleine Bereich um die Änderung neu gezeichnet oder 80 mal das Formular?

Wer es mal teste will, hier ein schnellgemachtes Beispiel:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
implementation

{$R *.DFM}

type
  TSh = record
    Shape: TShape;
    xr: Integer;
    yr: Integer;
  end;

var
  Sh: array[0..150] of TSh;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  HorzScrollBar.Visible := False;
  VertScrollBar.Visible := False;

  for i := Low(Sh) to High(Sh) do
  with Sh[i] do begin
    Shape := TShape.Create(self);
    Shape.Parent := self;
    Shape.Shape  := stCircle;
    Shape.Width  := 5;
    Shape.Height  := 5;
    xr := Random(16);
    yr := Random(16);
  end;

  Timer1.Interval := 100;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: Integer;
  r: TRect;
  rw, rh: Integer;
begin
  r := Canvas.ClipRect;
  rw := r.Right - r.Left;
  rh := r.Bottom - r.Top;

  for i := Low(Sh) to High(Sh) do
    with Sh[i] do
    begin
      Shape.Left := Shape.Left - xr;
      Shape.Top := Shape.Top - yr;

      if (Shape.Left < 0) or ((Shape.Left + 5) > rw) then xr := -xr;
      if (Shape.Top < 0) or ((Shape.Top + 5) > rh) then yr := -yr;
    end;
end;

_________________
Gruß
Martin
WASEO
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win98, Win2000, WinXP
D6 Prof, D7 Prof
BeitragVerfasst: Di 07.09.04 14:19 
Hi Martin!

Die Shapes sind nicht langsam, sondern Dein Timer. Stell den Intervall mal auf 10 ein. Dann sollten sich die
Shapes in Deinem Beispiel schön flüssig bewegen (hab's gerade ausprobiert.) :).

Grüsse
Thorsten

_________________
Erstaunlich sind nicht die Dinge, die wir nicht kennen, sondern die wir kennen und die nicht so sind.