AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Canvas aktualisieren ohne flackern

Canvas aktualisieren ohne flackern

Ein Thema von Frühlingsrolle · begonnen am 2. Dez 2019 · letzter Beitrag vom 4. Dez 2019
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.363 Beiträge
 
Delphi 2006 Professional
 
#21

AW: Canvas aktualisieren ohne flackern

  Alt 3. Dez 2019, 18:30
Warum setzt du die Bitmap Größe jedes mal im Timer neu?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Frühlingsrolle

Registriert seit: 31. Aug 2019
110 Beiträge
 
#22

AW: Canvas aktualisieren ohne flackern

  Alt 3. Dez 2019, 18:41
Weil die Komponente jederzeit skaliert werden kann, vorallem im Design, daher passe ich das temporäre Bitmap darauf an, sodass es mitskaliert wird und 1:1 übertragen werden kann.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.363 Beiträge
 
Delphi 2006 Professional
 
#23

AW: Canvas aktualisieren ohne flackern

  Alt 3. Dez 2019, 18:44
Ah. Ok. Aber Versuche doch es erst mal ohne diese Gimmicks zum Laufen zu bekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Frühlingsrolle

Registriert seit: 31. Aug 2019
110 Beiträge
 
#24

AW: Canvas aktualisieren ohne flackern

  Alt 3. Dez 2019, 18:57
Es läuft, ohne der Hintergrundgrafik. Dafür muss ich das Problem mit der "Transparenz" lösen.
Miniaturansicht angehängter Grafiken
delphi_clock.png  
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.363 Beiträge
 
Delphi 2006 Professional
 
#25

AW: Canvas aktualisieren ohne flackern

  Alt 3. Dez 2019, 19:03
Na bitte. Sieht doch ganz schick aus. Und jetzt das ganze in eine Klasse packen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.514 Beiträge
 
Delphi 2007 Enterprise
 
#26

AW: Canvas aktualisieren ohne flackern

  Alt 3. Dez 2019, 21:03
BitBlt() kann nicht mit Transparenzen umgehen. Statt dessen müsstest du AlphaBlend() benutzen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Frühlingsrolle

Registriert seit: 31. Aug 2019
110 Beiträge
 
#27

AW: Canvas aktualisieren ohne flackern

  Alt 4. Dez 2019, 01:31
AlphaBlend() macht die gesamte Zeichenfläche transparent/er. Zielführend ist schlussendlich die Funktion TransparentBlt(), die die Hintergrundfarbe (Weiß) des Bitmaps transparent macht.
Wieso es damit funnktioniert und mit der Eigenschaft TBitmap.TransparentColor nicht funktionierte, bleibt mir ein Rätsel.
Und ja, ich hatte die Eigenschaft TBitmap.Transparent auf true gesetzt.

Thema abgeschlossen!
Miniaturansicht angehängter Grafiken
delphi_clock.png  

Geändert von Frühlingsrolle ( 4. Dez 2019 um 02:04 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.514 Beiträge
 
Delphi 2007 Enterprise
 
#28

AW: Canvas aktualisieren ohne flackern

  Alt 4. Dez 2019, 08:57
AlphaBlend() macht die gesamte Zeichenfläche transparent/er.
Das hängt davon ab, was du als BlendFunction einsetzt.

Zitat:
Wieso es damit funnktioniert und mit der Eigenschaft TBitmap.TransparentColor nicht funktionierte, bleibt mir ein Rätsel.
Und ja, ich hatte die Eigenschaft TBitmap.Transparent auf true gesetzt.
Weil, wie gesagt, BitBlt sich einen feuchten um diese Eigenschaft kümmert.

Zitat:
Thema abgeschlossen!
Sieht schmuck aus!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.513 Beiträge
 
#29

AW: Canvas aktualisieren ohne flackern

  Alt 4. Dez 2019, 14:21
Ich weiß es ist gelöst, aber evtl. auch für die Zukunft würde ich nochmal raten, woran das flackern lag:
Delphi-Quellcode:
procedure TfrCustomClock.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_ERASEBKGND : Message.Result := 1;
    WM_PAINT : DoPaint;
  end;
end;
das inherited ruft doch bestimmt Paint; auf (was alles leer malt?) und bei einem WM_PAINT kommt direkt danach nochmal DoPaint; an die Reihe? Kann das sein?
  Mit Zitat antworten Zitat
Frühlingsrolle

Registriert seit: 31. Aug 2019
110 Beiträge
 
#30

AW: Canvas aktualisieren ohne flackern

  Alt 4. Dez 2019, 15:06
In Delphi 2006 kennt die Klasse TControl keine Paint() Methode oder ein entsprechendes OnPaint Ereignis. Ob mit der Nachricht WM_PAINT zuvor etwas gemalen wird, ist für mich auch nicht ersichtlich.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf