Mauszeiger Hardflag? ... wo trifft der Mauszeiger?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Mauszeiger Hardflag? ... wo trifft der Mauszeiger?

Beitrag von Xaby »

meistens stört ja der Mauszeiger auf einem Bild.

Aber was ist, wenn man in einem Programm einen richtig coolen Mauszeiger hat, und genau davon mal ein Bild machen möchte ...

wie kann ich einen ScreenShot mit Mauszeiger machen?

PB-Code wäre auch cool :roll:

Dank euch.

:allright:

Das Problem des Ermittelns eines Mauszeigers ist gelöst.
Aber nun gibt es ja auch Mauszeiger, die zum Beispiel wie ein Fadenkreus aussehen. Also man nicht mit der Ausrichtung 0, 0 auf einen Knopf drücken kann, sondern vielleicht irgendwo in der Mitte ...

wie bekomme ich diese Verschiebung heraus?

Was genau gibt hCursor an?

Gruß, Folker :allright:
Zuletzt geändert von Xaby am 21.11.2007 17:25, insgesamt 3-mal geändert.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Den Cursor kannst du so bekommen (ab W98) :

Code: Alles auswählen

Structure CURSORINFO
    cbSize.l
    flags.l
    hCursor.l
    ptScreenPos.point
EndStructure

ci.CURSORINFO
ci\cbSize = SizeOf(CURSORINFO)
GetCursorInfo_(ci)


OpenWindow(0,0,0,200,200,"")

StartDrawing(WindowOutput(0))
  DrawImage(ci\hCursor,0,0)
StopDrawing()

Repeat :Until WaitWindowEvent() = #WM_CLOSE
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

@edel

ich will ein Kind von dir :allright: :allright: :allright:

Du bist echt genial. Besser hätte es nicht sein können.
Kurz und knapp, verständlich und es funktioniert.

Bin beeindruckt. Dank dir. :allright:
Kinder an die Macht http://scratch.mit.edu/
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

???

Tja, hab dich zwar gelobt ...

aber irgendwie bekomme ich das nicht hin, dass ich den Coursor auf einem #Image habe ...

Wenn ich den Output ändere, ist das Bild leer.

Versuche ich es irgendwie anders, ist es schwarz oder es gibt ohne Ende Fehlermeldungen ...

Wie setze ich solche Bilder auf ein #Image?

Vielen Dank im Voraus. :?
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Xaby hat geschrieben:Tja, hab dich zwar gelobt ...
Ist klar, dass edel Dir nicht den kompletten Code vorkaut. Es gibt demzufolge
auch keinen Grund, Dein Lob nun zu revidieren.
Xaby hat geschrieben:Wie setze ich solche Bilder auf ein #Image?
-> CreateImage()

-> Startdrawing auf ImageOutput

-> ImageGadget mit ImageID Deines mit CreateImage erzeugten Bildes.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Hej Pappnase (nicht so gemeint) /:->
Muss ich echt mal so sagen ...

Liest du eigentlich, was ich schreibe?

Vielleicht hast es noch nicht gemerkt, aber ich poste nicht zum ersten Mal :mrgreen:

Ich habe ein Image mit CreateImage erzeugt!!!!
xaby hat geschrieben:Wenn ich den Output ändere, ist das Bild leer
Wenn ich statt:

Code: Alles auswählen

StartDrawing(WindowOutput(0))
>>>>>>

Code: Alles auswählen

StartDrawing(ImageOutput(0))
Nutze, und natürlich mit CreateImage ...

Mmmm :? ... ach ich weiß auch nicht, gestern ging es so nicht ... /:->
Und jetzt geht es ohne Probleme, hab bestimmt irgendwo eine "0" oder was weiß ich vergessen, oder ein ImageID() ... :roll:

Code: Alles auswählen



Structure CURSORINFO
  cbSize.l
  flags.l
  hCursor.l
  ptScreenPos.point
EndStructure

ci.CURSORINFO
ci\cbSize = SizeOf(CURSORINFO)
GetCursorInfo_(ci)


OpenWindow(0,0,0,200,200,"")

CreateImage(0,200,200)
StartDrawing(ImageOutput(0))
DrawImage(ci\hCursor,0,0)
StopDrawing()

StartDrawing(WindowOutput(0))
DrawImage(ImageID(0),0,0)
StopDrawing()

Repeat :Until WaitWindowEvent() = #WM_CLOSE  
:?
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Xaby hat geschrieben:Liest du eigentlich, was ich schreibe?
Du nimmst mir die Worte aus dem Mund:
Kiffi hat geschrieben:-> ImageGadget mit ImageID Deines mit CreateImage erzeugten Bildes.
a²+b²=mc²
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Sag mal ...

Wie kann ich auf ein #Image

Bilder mit Alphakanal malen?

Ich würde gern ein paar Kreise übereinander malen, aber die sollen so halb durchschimmernd sein ...

Mit Sprites wäre das kein Problem ... aber wie kann man das mit Images machen?

Vorweg, ein Grafikmodus mit DirectX wäre für meine Aplikation overdressed :mrgreen:

Dann frage ich mich auch noch, wenn ich viereckige #Images habe (ist ja die Regel) ... ich aber nur einen Kreis benötige ...

wie sieht das mit einer transparenten Farbe aus? Wäre das weiß oder schwarz? Oder kann man das einstellen?

Ich bin mir sicher, es gibt bestimmt ne LIB dazu ...

aber bei so grundlegenden Dingen, wundere ich mich immer wieder, dass es die nicht von Hause aus in PB gibt ...

Code: Alles auswählen

DrawAlphaImage(ImageID, x, y)
Oder wie kann ich onTheFly so eine 32 Bit Datei erstellen?
Ohne erst über eine Datei zu gehen?

Dank dir. :roll: :allright:

Sch**ße, fast zwei Jahre schon hier /:->
Und immer noch die gleichen Fragen und Probleme ...
http://www.purebasic.fr/german/viewtopi ... a+blending

Wie lange ich an meinen Projekten sitze :freak:

>>>>> Ich glaube, das ist ein Befehl, der mir helfen kann ...
aber das API-English ist so ... :?

Code: Alles auswählen

BitBlt_(...)


Oder ich müsste mit Memory und Buffern ... irgendwie die zwei Bilder verrechnen ... aber das Rad brauch ja nicht neu erfunden werden, und schnell und sicher soll es auch sein ...

Und ich weiß auch nicht, wie ich ein Image in einen Buffer schiebe und dann alle Pixel gleich habe ... hab sie sonst immer mit Plot und Point ... zwischendurch umgewandelt ... oder in ein Array geschrieben ...

aber das kann ja nicht die Lösung sein ... :oops:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

"Blend-Demo"

Beitrag von Xaby »

Code: Alles auswählen

;/ Folker Linstedt, 2007|11|21 Blenden


Dim Feld(64,64) ; Image 64 x 64 Pixel im Array (wohl noch nicht die idealste Lösung)
  
CreateImage(0,64,64)
StartDrawing(ImageOutput(0))
  Box(0,0,64,64,RGB(255,255,255)) ; weiß grundiert
  Box(10,2,30,40,RGB(0,128,255)) ; blau
  Box(0,50,64,14,RGB(255,255,0)) ; blau
StopDrawing()

CreateImage(1,64,64)
  StartDrawing(ImageOutput(1)) ; 
  Box(0,0,64,64,RGB(255,0,255)) ; Magenta grundiert
  Circle(36,36,25,RGB(255,0,0)) ; rot
  StopDrawing()

  StartDrawing(ImageOutput(1)) ; Farbe des Kreises wird ermittelt
For i=0 to 63
  For i2=0 to 63
    Feld(i2,i)=Point(i2,i) 
  Next
Next
StopDrawing()
  
Q=128; Transparenz 0 ist gar nicht durchsichtig, 255 komplett durchsichtig
  
StartDrawing(ImageOutput(0)) ; Zusammenfügen von Bild 0 und Bild 1

xM=32
yM=32

For i=0 to 63
  For i2=0 to 63
    If Feld(i2,i)<>RGB(255,0,255)
      If xM-32>=0 and yM-32>=0
        
        F=Point(xM-32+i2,yM-32+i)
        C=Feld(i2,i)
        ;(255*255-(255-255)*125)/256
        
        R=(Red(F)*(255-Q)+(Red(C))*Q)/255
        G=(Green(F)*(255-Q)+(Green(C))*Q)/255
        B=(Blue(F)*(255-Q)+(Blue(C))*Q)/255 
        
        F=RGB(R,G,B); (F+C)/2 = 50% 
        Plot(xM-32+i2,yM-32+i,F)
      EndIf
    EndIf
  Next
Next  
StopDrawing()

OpenWindow(0,0,0,200,200,"") 

StartDrawing(WindowOutput(0)) 
DrawImage(ImageID(0),0,0) 
StopDrawing() 

Repeat :Until WaitWindowEvent() = #WM_CLOSE 
:allright:

Wenn man das irgendwie schneller (ordentlicher) hinbekommt ...
Das wäre cool :roll:
Kinder an die Macht http://scratch.mit.edu/
Antworten