Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Flimmern! (https://www.delphipraxis.net/7348-flimmern.html)

Knut 10. Aug 2003 00:24


Flimmern!
 
habe mit nem timer images übers bild laufen aber das flimmern is unerträglich.

liegt des jetz an meinem pc oder gibts ein trick um des abzuschalten.

Luckie 10. Aug 2003 00:26

Re: Flimmern!
 
http://www.luckie-online.de/files/de...reenbitmap.zip

Knut 10. Aug 2003 01:31

Re: Flimmern!
 
also,

hab jetz mal ein wenig probiert ich bekomms zwar hin, die images auf den bildschirm zu zaubern aber mit der bewegung da hab ich noch probs.

ich kenne dieses BitBlt nicht...

was muss cih also machen das sich die bilder bewegen (richtung nach unten)

mfg knut

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ImgList;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    ImageList1: TImageList;
    PaintBox1: TPaintBox;
    //procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1 : TForm1;
  image : array[0..9] of TImage;
  pb   : TPaintBox;
  stein : TGraphic;
  l    : Integer = 0;
  i    : Integer = 0;
  k    : Integer = 0;
  bmp  : TBitmap;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (k=0) or
     ((k mod 2) = 0) then begin
       image[i] := TImage.Create(Form1);
       image[i].Picture.LoadFromFile('stein.bmp');
       image[i].Height := 49;
       image[i].Width := 49;
       image[i].Stretch := true;
       image[i].Transparent := true;
       imagelist1.Add(image[i].Picture.Bitmap,image[i].Picture.Bitmap);
       bmp.Canvas.Draw((Random((Width-image[i].Width))),(image[i].Height),image[i].Picture.Graphic);
       BitBlt(PaintBox1.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bmp.Canvas.Handle,
    0, 0, SrcCopy);
       //image[i].Left := Random((Width-image[i].Width));
       //image[i].Parent := Form1;
       //image[i].Top := -image[i].Height;
       Inc(i);
     end
     else
     begin
      Inc(k);
     end;
      if i = 10 then timer1.Enabled := false;
 end;

 {procedure TForm1.WMEraseBkgnd(var Message: TMessage);
begin
  // verhindert Löschen des Hintergrundes und damit das Flimmern
  Message.Result := 1;
end;}

procedure TForm1.Timer2Timer(Sender: TObject);
var
 j : integer;
begin
for j:= 0 to (i-1) do
begin
BitBlt(PaintBox1.Canvas.Handle, 0, l, bmp.Width, bmp.Height, bmp.Canvas.Handle,
    0, l, SrcCopy);
    Inc(l);
{image[j].Top := image[j].Top + 1;
if image[j].Top >= Height then begin
image[j].top := -Image[j].Height;
image[j].Left := random(Width-Image[j].Width);
end;
}end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
bmp := TBitmap.Create;
bmp.Canvas.Brush.Color := clblack;
bmp.Width := Paintbox1.Width;
bmp.Height := Paintbox1.Height;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
 l : integer;
begin
for l:=0 to 9 do image[l].Free;
end;

end.
ich weiß auch nicht ob der rest so gut ist also vom syntax her??
die bewegung soll mit timer2 realisiert werden wenn dass so möglich ist

Luckie 10. Aug 2003 02:00

Re: Flimmern!
 
Von der Syntax her? Versuch mal die ganzen globalen Variablen los zu werden bzw. mach sie wenigsten zu Feldern der TForm-Klasse. Dein Code hat mit OOP nicht viel gemein.

Aya 10. Aug 2003 02:05

Re: Flimmern!
 
Hi,

um das Flackern des Bildes wegzubekommen, mach mal DoubleBuffered:=true;

also:
Delphi-Quellcode:
procedure TForm1.Form1Create(...);
begin
  DoubleBuffered:=True;
  //Sollten die Bilder auf nem Panel o.ä. liegen auchnoch:
  Panel1.DoubleBuffered:=true;
end;
Au'revoir,
Aya~

Knut 10. Aug 2003 12:46

Re: Flimmern!
 
thx. werd ich sofort testen :coder:

Affje800 10. Jan 2004 17:47

Re: Flimmern!
 
vielen dank, du hast auch mir sehr geholfen!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz