Auf Desktop zeichnen...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Gerade weil es eine Desktop-Application ist, sollte die Belastung so gering als möglich ausfallen. Das ist doch sehr wichtig!
Wenn das stellen der Uhr in einer TimerProc stattfindet, welches wie ein Callback funktioniert und von Windows direkt angesprochen wird, ist dies gegeben. Bei Delay ist die Belastung auch bei 250ms zu hoch, würde ich niemals im Hintergrund laufen lassen :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag von Daniel P. »

Also bei meinen ersten Anläufen, mit der GDI auf den Desktop zu pinseln, hatte ich ein Delay von gerade mal 5 Millisekunden angegeben und mein Prozessor (1 GHz) hat kaum ausgeschlagen. Aber ich kenne mich in diesen Sachen nicht wirklich gut aus, von daher glaube ich dir einfach mal :lol:
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Die Windows Timer API ist doch extra für sowas gedacht. Und solange Dein
Code unter Linux usw. sowieso nicht läuffähig ist, ist es doch das sinnvollste!
Delay sollte man nur dann verwenden, wenns keine andere Alternative gibt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Hi,
Da hat TS-Soft recht, hab den Code eben mal auf 500 MHZern laufen lassen, teilweise hats den Rechner richtig ruckeln lassen......

mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag von Daniel P. »

@125:
Ich habe gestern abend noch etwas mit den Transparenz-Modi herumgespielt. Hast du auch das Problem, dass die Schrift, wenn der Fensterhintergrund auf transparent gesetzt ist, einen Rand mit der Farbe des Fensterhintergrunds bekommt? Windows möchte anscheinend die Schrift im TextGadget "weich" zeichnen, sodass sie mit dem Fensterhintergrund verschmilzt. Allerdings vergisst es, dass der Fensterhintergrund gar nicht da ist und macht diesen unschönen Rand an die Buchstaben...
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Hi,
kanns gerade nicht testen aber auf meinen Testrechnern in der Schule hatte ich das Problem nicht. Allerdings muss ich meinen Code nochmal anpassen, so wie er ist läuft er nur auf nicht geskinnten XP, (für mein WoW Design müsste ich dann ja ne andere RGB eintragen...) kann man die Farbe irgendwie schnell und zuverlässig ermitteln?

mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag von Daniel P. »

Ich habe in meinem Code einfach die Fensterfarbe auf Rosa gesetzt und die ausgeschnitten. Das Problem mit dem Rand um die Schrift taucht übrigens nicht mit der Standard-Schrift von DrawText (<- ist das die richtige Funktion /:-> ) auf, sondern nur mit Extrawurst-Schriftarten. Der gleiche Fehler taucht übrigens bei den DrawText-Funktionen der GDI auf. Schätze, dass PB auf diese Funktionen zurückgreift - korrigiert mich, wenn ich hier falsch liege. Im englischen Forum habe ich mir einen Art Wrapper für GDI+ besorgt, vielleicht klappt es damit besser. GDI+ kennt ja Transparenz und sollte daher diese auch als Hintergrundfarbe unterstützen...
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Hi Habe mir eben mal den Post durchgelesen.
Was eure sache mit dem Delay und / oder Timer angeht würde ich es einfach in nen Thread packen, so sollte die CPU Last auch runter gehen.

Dann noch was zu der eigentlichen sachen und zwar auf den Desktop zeichnen (hinter die icons) das is auch ohne extra Fenster möglich.

Siehe hierzu auch den link http://www.greenfoxsoft.com/index.html

und hier mal ein beispiel (in C++) DX Overlay

Das ganze is recht einfach mit DirectX zu realisieren da DX diese möglichkeit schon mitbringt.

Ich bin versuche selber gerade mit OpenGL hinter die Icon´s zu zeichnen (was leider nit so einfach ist wie mit DX) und bin bei suchen im Web auf das beispiel gestossen. hoffe es hilft euch

Gruß,
Nico
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag von Daniel P. »

Mir ging es allerdings darum, nur kleine Bereiche des Desktops zu bepinseln ohne das Windows diese sofort wieder übermalt, sobald diese Bereiche neugezeichnet werden. Dafür ist die Fensterlösung allemal perfekt. Vor allem, weil es mit drei Zeilen Code umsetzbar ist. Trotzdem ist der Tipp, den gesamten Desktop zu animieren, goldwert. Als ich auf der Suche nach meiner Fensterlösung war, habe ich auch immer wieder diese Frage gefunden, wie man den gesamten Hintergrund animiert.
Ich habe übrigens gestern abend noch den GDI+-Wrapper ausprobiert. Die unterstützt tatsächlich "richtige" Transparenz als Schrifthintergrund...
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

@Daniel

das habe ich wohl glat überlesen das du nur nen bestimmten bereich "bemalen" willst.

Deine lösung mit dem Layered Window hilft mir aber bei meinem prob mit OpenGL da ja wie gesagt die sache in OpenGL nit so einfach ist wie mit DirectX.

Mal sehen was bei raus kommt. Werde das ergebniss dann mal posten
Antworten