Autor Beitrag
geronimo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Fr 06.12.02 14:38 
also ich hab hier ein programm, das später einmal ca 1000 objekte verwalten soll (autos, die auf einer strasse fahren).
zur zeit laufen nur 6 objekte und es gibt schon probleme...

also ich hab da 2 images, die das strassenbild bilden (2pixel weiss, 36 px grau, 2px weiss , das ganze mal 2). darüber liegt eine paintbox, in die ich jede sekunde 10 mal die neue position eintrage.
wenn ich jetzt die paintbox refreshe, flimmert es extrem. deshalb zeichne ich jedes mal in der farbe der strasse das auto weg :roll: .
wenn es jetzt über den mittelstreifen fährt ist der mittelstreifen also weg.

wo soll ich da ein doublebuffered:=true; anwenden?

mfg geronimo
Nightwalker_Z
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 06.12.02 15:31 
HiHo
Also .. DoubleBuffered:=True ist schon mal ganz gut (dann flackert es wenigstens nicht mehr).

ABER: :lol:
Wenn du eine Paintbox benutzt um was zu zeichnen und irgendein beliebiges Objekt über deine bereits gezeichneten Komponenten zieht / zeichnest / bewegst / wasauchimmer, verschwindet dein Kunstwerk.
Ist halt nun mal so.
Eine Alternative ist statt ner Paintbox ein Image als Zeichenfläche zu benutzen.

Einige Beispiele:
ausblenden Quelltext
1:
 Paintbox1.Canvas.Lineto(x,y)					


würdest du jetzt so machen:

ausblenden Quelltext
1:
 Image1.Picture.Bitmap.Canvas.Lineto(x,y)					


Damit das funktioniert musst du in der Prozedur TForm1.FormCreate
folgende Einträge hinzufügen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
var Bitmap: TBitmap;
begin
  Bitmap:=TBitmap.Create;
  Bitmap.Width:=Image1.Width;
  Bitmap.Height:=Image1.Height;
  image1.Picture.Graphic:=Bitmap;


Dann sollte auch alles funktionieren.
(Aber nicht DoubleBuffered:=True) vergessen

Hoffe ich konnte helfen
Greetz
Nightwalker
Nightwalker_Z
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 06.12.02 15:33 
Ahso ... nochmal wegen dem Doublebuffered
(hab ich vorhin überlesen)

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.FormShow(Sender: TObject);
begin
DoubleBuffered := True;
end;


So dürfte alles funzen :think:

Gruß
Nightwalker_Z
Postbote
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 06.12.02 19:12 
Je nachdem wie komplex dein Programm wird, würde ich dir folgendes empfehlen : du zeichnest deine Bitmaps mit BitBlt (siehe winapi sdk) oder benutzt DirectDraw.
geronimo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Mo 09.12.02 22:16 
Ok Danke! Ich werd jetzt mal das Zeichnen auf ein Image versuchen. 8)
Nightwalker_Z
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 10.12.02 10:31 
Jupp mach das - ich denke damit wird es schon klappen :)

Greetz
Nightwalker_Z