AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert

Ein Thema von Delphi-Laie · begonnen am 11. Nov 2015 · letzter Beitrag vom 12. Nov 2015
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

AW: Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert

  Alt 12. Nov 2015, 12:13
Seitdem Windows eine komplett DirectX/hardwarebeschleunigte Oberfläche hat (schätze das gilt ab WIndows 7 wegen Direct2D), zeichnen die GDI methoden nun halt nicht mehr direkt. Die genaue Pipeline hab ich aber nicht mehr im Kopf.
Versuch dich mal mit dem Direct2D canvas ab Windows 7 wens wirklich butterweich sein soll.

Ne bitmap dazwischen ist auch ne option, da BitBlt wiederum Hardwarebeschleunigt ist.
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (12. Nov 2015 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert

  Alt 12. Nov 2015, 12:27
Versuch dich mal mit dem Direct2D canvas ab Windows 7 wens wirklich butterweich sein soll.
Nun, das ist wahrscheinlich nicht mehr nötig, denn ich habe es mit Bitmap.Canvas hinbekommen. Das funktioniert zu meiner Zufriedenheit - zwar auch mit einer leicht wahrnehmbaren Verzögerung, aber dieser sporadische elend langsame Bildaufbau ist wohl nunmehr Geschichte.

Leute, Ihr seid großartig, besten Dank!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert

  Alt 12. Nov 2015, 13:00
Ok. Es funktioniert. Dann können wir ja damit anfangen den Code zu verschönern:
Delphi-Quellcode:
procedure linie_zeichnen(x:word;darueber_loeschen:boolean);
begin
application.processmessages;
if ((Form1.ComboBox1.ItemIndex=4) or (Form1.ComboBox1.ItemIndex=20)) and not Form1.Visible
then Form2.Canvas.Pen.Color:=clblack
else Form2.Canvas.Pen.Color:=Menge[x].farbe;
Form2.Canvas.MoveTo(x,pred(Form1.SpinEdit3.Value));
Form2.Canvas.LineTo(x,Form1.SpinEdit3.Value-Menge[x].schluessel);
if darueber_loeschen then
  begin
  Form2.Canvas.Pen.Color:=clWhite;
  Form2.Canvas.LineTo(x,0)
  end;
if sortierung_laeuft and bremse_erlaubt then for x:=1 to bremse do windows.beep(0,0)
end;
Hier hast du mindestens zwei Abhängigkeiten von der Oberfläche drin und zu dem noch von zwei Formularen. Die Wiederverwendbarkeit geht da gegen null. Mach daraus eine Klasse, der du die nötigen Werte übergibst und sag der Funktion auf welchen Canvas sie zeichnen soll. Dann ist es egal, woher die benötigten Werte kommen und auf welchen Canvas das ganze gezeichnet wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert

  Alt 12. Nov 2015, 13:50
Ach Luckie, Du bist so gut zu mir und hast natürlich auch recht. Mein Code ist sicher kaum "semiprofessionell". Von Klassen habe ich aber nun überhaupt keine Ahnung, und wer sollte meinen Code wiederverwenden, wenn nicht mal ich ihn erneut an anderer Stelle gebrauchen könnte? Laß mal gut sein, herzlichen Dank! Meine neue Version ist soeben auch in diesem Forum veröffentlicht worden, und sie tut genau das, was sie soll - jetzt ohne diese Schwachstelle.

Geändert von Delphi-Laie (12. Nov 2015 um 20:48 Uhr)
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#5

AW: Canvas-Methoden ab Windows 6.x / Vista oft sehr verzögert

  Alt 12. Nov 2015, 16:41
Seitdem Windows eine komplett DirectX/hardwarebeschleunigte Oberfläche hat (schätze das gilt ab WIndows 7 wegen Direct2D), zeichnen die GDI methoden nun halt nicht mehr direkt. Die genaue Pipeline hab ich aber nicht mehr im Kopf.
Versuch dich mal mit dem Direct2D canvas ab Windows 7 wens wirklich butterweich sein soll.
Das gilt ab Vista, da wurde der DWM eingeführt. Man braucht nicht mal Direct2D/3D, denn selbst wenn man normal auf Fenster zeichnet, benutzt der DWM Doublebuffering um den Bildaufbau "weicher" zu machen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:31 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 by Thomas Breitkreuz