Aktuelle Zeit: 21.05.2013 10:45

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Direkt auf Desktop zeichnen
BeitragVerfasst: 15.07.2010 18:51 
Offline

Registriert: 01.03.2010 20:01
Hi,

Wie der Betreff schon sagt versuch ich gerade was direkt (also ohne Fenster oder so) auf dem Desktop zu zeichnen (zb. so wie mit 2d-Drawing auf Fenstern und Screens). Ich hab schon die Forensuche bemüht, und hab auch einen kleinen Beispielcode von Stargate gefunden:
Zitat:
Code:
Global DesktopOutput_Memory = AllocateMemory(1024)
Procedure.l DesktopOutput()
PokeL(DesktopOutput_Memory, 1)
ProcedureReturn DesktopOutput_Memory
EndProcedure
StartDrawing(DesktopOutput())
Repeat
  Plot(Random(1023), Random(767), RGB(Random(255), Random(255), Random(255)))
Until GetAsyncKeyState_(27)
StopDrawing()

Der Produziert bei mir aber nur IMAs...

hat jemand ne idee, warum? oder wie ich das anders lösen könnte?
ich benutze PB 4.5


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 15.07.2010 20:17 
Offline
Benutzeravatar

Registriert: 03.06.2007 14:36
Wohnort: Unterfranken
Hallo TeamO,

Du musst

Code:
StartDrwaing()
Plot(...)
Stopdrawing()


direkt hintereinander in der Schleife haben.

Also z.B. so: (an Deinen Code angelehnt):

Code:
Global DesktopOutput_Memory = AllocateMemory(1024)

Procedure.l DesktopOutput()
  PokeL(DesktopOutput_Memory, 1)
  ProcedureReturn DesktopOutput_Memory
EndProcedure


  Repeat
    StartDrawing(DesktopOutput())
    Plot(Random(1023), Random(767), RGB(Random(255), Random(255), Random(255)))
    StopDrawing()
    Delay(10)
  Until GetAsyncKeyState_(27)





Grüße
NicknameFJ

_________________
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 15.07.2010 20:32 
Offline

Registriert: 01.03.2010 20:01
Danke, hatte ich übersehen.
Der Invalid Memory Access Error kommt aber auch im verbesserten code...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 15.07.2010 20:55 
Offline
Benutzeravatar

Registriert: 03.06.2007 14:36
Wohnort: Unterfranken
Oops,

hatte da wohl was anderes im Gedächtnis, nämlich, dass wenn man sich über API ein Handle für Drawing zu einem Fenster holt, dieses nur im gleichen MainLoop Durchlauf gültig ist.

Hatte meinen Code mit 4.10 getestet, da geht es

mit 4.4 geht´s nicht mehr.

Sry.

_________________
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 15.07.2010 21:30 
Offline
Benutzeravatar

Registriert: 12.06.2005 11:15
Wohnort: Germany
Ich verstehe nicht wirklich wie das funktioniert mit dem Desktop und warum du da 1024 Byte allozierst.
Zeichnest du in DesktopOutput_Memory rein?
Dann ist klar das du IMA's bekommst, den allozierst du nur mit 1024 Byte. Laut deinem Random-Code greifst du aber auf 1024 * 767 * 3 = 2356224 Byte zu, möglicherweise noch mehr, wenn der Pitch > 1024 * 3

_________________
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 15.07.2010 21:56 
Offline
Benutzeravatar

Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte
Dieser Trick funktioniert nicht mehr seitdem die Drawing-Lib aktualisiert wurde.

Benutze einfach API:

Code:
hdcDesktop = GetDC_(GetDesktopWindow_())

Repeat
  SetPixel_(hdcDesktop,Random(1023), Random(767), RGB(Random(255), Random(255), Random(255)))
Until GetAsyncKeyState_(27)

ReleaseDC_(0,hdcDesktop)

_________________
Bild
Windows 7, 64-Bit, PB v4.51


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 16.07.2010 11:48 
Offline

Registriert: 01.03.2010 20:01
Danke für die Antworten!

@NicknameFJ:
NicknameFJ hat geschrieben:
Hatte meinen Code mit 4.10 getestet, da geht es mit 4.4 geht´s nicht mehr.

Kann das das sein, was Fluid Byte gemeint hat? Mit der Aktualisierung der Drawing-Lib?

@Thorium:
Ich versteh auch nicht was da gemacht wird.
Wie gesagt: Ich hab den Code von Stargate kopiert...

@Fluid Byte:
Das funktioniert bei mir irgendwie auch nicht.
es gibt zwar keine Fehlermeldung, aber halt auch keine Ausgabe....
ich muss aber auch zugemen, dass ich nicht versteh, was du da machst.
SetPixel_(...) ist ja relativ vielsagend, aber was macht die erste Zeile?

Achso, ich nutze noch XP. Kann es daran liegen?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 16.07.2010 12:27 
Offline
Benutzeravatar

Registriert: 03.06.2007 14:36
Wohnort: Unterfranken
Zitat:
Kann das das sein, was Fluid Byte gemeint hat? Mit der Aktualisierung der Drawing-Lib?


Ja, glaube auch dass die LIB dazwischen geändert wurde.

Zitat:
ich muss aber auch zugemen, dass ich nicht versteh, was du da machst.
SetPixel_(...) ist ja relativ vielsagend, aber was macht die erste Zeile?


In der ersten Zeile holst Du dir ein Handle zum DeviceContext des Desktop(Fensters), in der zweiten findet das Drawing auf diesen DeviceContext statt und in der letzten gibst Du den Context wieder frei.

Habe XP, kann bestätigen dass das Prog von Fluid hier auch nicht klappt

Grüße NicknameFj

_________________
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 16.07.2010 12:33 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
nochmal mit textausgabe
Code:
hdc = GetWindowDC_(GetShellWindow_())
text$ = "Kacke nee "
SetTextColor_(hdc,#Cyan)
SetBkColor_(hdc,#Red)
TextOut_(hdc,0,0,text$,Len(text$))
ReleaseDC_(GetShellWindow_(),hdc)

der fette nachteil ist hier die platformabhängigkeit

_________________
‮pb 4.x & 3.94 (windoof) /om84 (2)
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Direkt auf Desktop zeichnen
BeitragVerfasst: 16.07.2010 19:41 
Offline

Registriert: 01.03.2010 20:01
cool, funktioniert!
Danke!

Jetzt kommt mir noch ne andere Idee: Gibt es ne möglichkeit über alles, sozusagen direkt hinter dem "Glas" des Monitors, zu zeichnen?
wenn nicht, würde ich es mit einem unsichtbaren Fenster machen, das immer im Vordergrund ist, aber dann müsste ich noch den rgb wert eines beliebigen Pixels auszulesen (in der vordersten Ebene, also entweder auf einem Fenster oder dem Desktop)

hat jemand ne idee?

Grüße,
TeamO


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye