Autor Beitrag
reallyOne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro
D7 Prof
BeitragVerfasst: So 29.09.02 14:15 
Ich habe ein Form (800x600px), auf dem ist ein TImage, bei dem jede 10tel sekunde die helligkeit verändert wird. Dieses TImage ist auf Vollbild gezogen (align=clClient)
Jetzt habe ich noch zwei weitere TImages (ca 40x40px), die sich mit einem Timer über das Hintergrundimage bewegen.

Das kanze ist ziemlich prozessorlastig und flackert sehr doll.
Ich hab bereits hier gelesen, dass man zuerst in ein Image die einzelnen Bilder reinzeichen soll und dann das bearbeitete Imag ausgeben soll. (mit Canvas)

Aber auf den Forum-Threads+FAQ bin ich nicht so schlau gewurden.
Kann mir jetzt jemand ein Beispiel geben, bei dem Ich ein Hintergrundbild hab, auf dem ein anderes Bild (mittels Timer oder so) von links nach rechts "fliegt"???

Danke schon mal im Vorraus

_________________
*aus rechtlichen Gründen distanziere ich mich hiermit von dem Inhalt dieses Postings :-) *
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: So 29.09.02 16:18 
Setze mal Form1.DoubleBuffered auf True, dann sollte das Flackern ein Ende haben...

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
reallyOne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro
D7 Prof
BeitragVerfasst: So 29.09.02 18:16 
Sorry, das geht nicht, weil ja das Bild der Hintergrund ist und nicht die Form.

_________________
*aus rechtlichen Gründen distanziere ich mich hiermit von dem Inhalt dieses Postings :-) *
reallyOne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro
D7 Prof
BeitragVerfasst: So 29.09.02 19:43 
ausblenden Quelltext
1:
2:
3:
4:
  Sonne.Width:=34;
  Sonne.Width:=35;
  Sonne.Transparent:=true;
  BMP.Canvas.Draw(0,200,Sonne);


Jetzt hab ich ein fenster, mit dem Hintergrundbild und dem Bild Sonne, dessen Breite aber über das komplette Fenser geht (auch nicht ganz zentiert), die höhe ist die von original. Und der Abstand von oberen Rand beträgt 200px.
Ich will aber das Bild SONNE In Originalgröße aufm Hintergrund haben.

BMP Ist das Hintergrundbild von Typ TBitmap
Sonne ist ein Bild 34x35px (TBitmap), was ich gerne auf dem BMP haben will.

Was mache ich falsch?
bei BMP.Canvas.Draw(0,200,Sonne) //Draw(X,Y,Graphic)
Sobld ich X größer als die Breite des Bildes setze, verschwindet das Bild.
Mit Y kann ich ohne Probleme den TOP Wert verändern.

_________________
*aus rechtlichen Gründen distanziere ich mich hiermit von dem Inhalt dieses Postings :-) *
Tantalus
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 28.10.02 17:59 
Titel: DoubleBuffered
Das mit dem DoubleBuffered funzt trotzdem... eben weil es zu Form1 gehört. Mit dem Befehl weist du einfach nur einen größeren Speicherbereich der Form zu.

:arrow: Dann flackerts auch nicht mehr, wie der Kollege dir ja schon geschrieben hat!

MfG
Tantalus
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 28.10.02 18:13 
Manches Mal reicht ein einfach Form1.DoubleBuffered aber nicht (wenn du z.B. mit Panels arbeitest, um Sachen auszurichten).

Dann ist es sinnvoll, bei jedem TWinControl-Nachfahren DoubleBuffered zu setzen (Code in die OnCreate-Routine des Formulars):
ausblenden Quelltext
1:
2:
3:
4:
Self.DoubleBuffered:=True;
  for i:=0 to ComponentCount-1 do
    if Components[i].InheritsFrom(TWinControl) then
      TWinControl(Components[i]).DoubleBuffered:=True;


Cu, :)
Udontknow