![]() |
DoubleBuffered funktioniert nicht
Moin Moin,
ich habe verschiebe in meinem Programm ein Label (Laufschrift) jedoch flimmert es stark beim Verschieben. Also hab ich versucht das Problem mit
Code:
zu lösen. Mein Delphi 3 jedoch sagt 'Unbekannter Bezeichner DoubleBuffered'. Was is da los? Gibs noch ne andere Möglichkeit ?
Form1.doublebuffered := True;
Vielen Dank, |
Re: DoubleBuffered funktioniert nicht
Hi,
Delphi 3 kennt DoubleBuffered leider noch nicht |
Re: DoubleBuffered funktioniert nicht
Zitat:
Gibs da net noch ne andere Methode denn wenn das Label so flackert sieht es in meinem Spiel echt dämlich aus... |
Re: DoubleBuffered funktioniert nicht
Hi,
Du könntest das WM_PAINT Deiner Labels umbiegen und dann selber erst auf ein Bitmap (CreateCompatibleBitmap) zeichnen und das dann mit BitBlt darstellen, so wie es die VCL macht. Wenn Du magst, kann ich Dir teile des entsprechenden Codes der Vcl mal per PN schicken (falls das erlaubt ist...) mfG mirage228 |
Re: DoubleBuffered funktioniert nicht
Zitat:
Greetz alcaeus |
Re: DoubleBuffered funktioniert nicht
sofort nach dem Label.Caption := 'xyz'; ein Label.Update; aufrufen.
Gruß Hagen |
Re: DoubleBuffered funktioniert nicht
Zitat:
Ich hab zwei Labels dir wie "von Geisterhand" geschrieben werden sollen. Also das erste Label fängt an, wenn der String dann vollständig da ist, fängt das Label2 an. Beim Label1 ist alles ok, nur das zweite flackert dann heftig. Kann einer helfen ? Hier mal der Source:
Code:
var
i,h : integer; procedure form1.timer1timer (Sender: TObject); const anfang = 'Herzlich Willkommen bei EliteHacker ! Unsere Firma sucht stets nach neuen Mitarbeitern!'; anfang1 = 'Bitte erstellen Sie ein neues Konto oder laden Sie ihren Spielstand. Viel Spass!'; begin i := i + 1; if i < 83 then label1.caption := label1.caption + anfang[i]; if label1.caption = 'Herzlich Willkommen bei EliteHacker ! Unsere Firma sucht stets nach neuen Mitarbeitern!' then begin h := h + 1; if h < 86 then label2.caption := label2.caption + anfang[h]; end end; |
Re: DoubleBuffered funktioniert nicht
Dann nimm unter Delphi3 eine TPaintBox statt der Labels. Die Texte in eigene Strings und mit PaintBox.OnPaint() direkt in deinem Timer neugezeichnet. Im .OnPaint Event deiner Paintbox nun diese Strings mit DrawText(Canvas.Handle, ...) zeichnen. Dabei ist es wichtig das du NUR ZU BESTIMMTEN Zeitpunkten vorher mit Canvas.FillRect() den Text löschst. Achso: vor dem Zeichnen mit DrawText() noch SetBkMode(Canvas.Handle, TRANSPARENT); aufrufen.
Könnte alsoso aussehen:
Delphi-Quellcode:
Gruß Hagen
type
TForm1 = class(TForm) PaintBox1: TPainBox; PaintBox2: TPainBox; private FLabel1, FLabel2: String; procedure PaintBox1Paint(Sender: TObject); procedure PaintBox2Paint(Sender: TObject); procedure Timer1Timer(Sender: TObject); protected procedure DoPaintBoxPaint(Sender: TObject; const Text: String; Erase: Boolean); end; procedure TForm1.DoPaintBoxPaint(Sender: TObject; const Text: String; Erase: Boolean); var R: TRect; begin with (Sender as TPaintBox), Canvas do begin R := ClientRect; if Erase then FillRect(R); SetBkMode(Handle, Transparent); DrawText(Handle, PChar(Text), Length(Text), @R, dt_Left or dt_SingleLine or dt_VCenter); end; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin DoPaintBoxPaint(Sender, FLabel1, True); end; procedure TForm1.PaintBox2Paint(Sender: TObject); begin DoPaintBoxPaint(Sender, FLabel2, True); end; procedure TForm1.Timer1Timer(Sender: TObject); begin FLabel1 := FLabel1 + ....; DoPaintBoxPaint(PaintBox1, FLabel1, False); if Bumsda then DoPaintBoxPaint(PaintBox2, FLabel2, False); end; |
Re: DoubleBuffered funktioniert nicht
OK, vielen Dank erstmal. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz