Koordinaten der Verknüpfungen auf dem Desktop

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Koordinaten der Verknüpfungen auf dem Desktop

Beitrag von uweb »

Hallo,

ich will ein Programm schreiben, daß das Hintergrundbild des Desktops dynamisch generiert.
Es handelt sich um eine Art Landkarte, die in mehrere Zonen unterteilt sein soll.

Wenn ich nun wüßte ob über einer Zone min. ein Teil einer Verknüpfung (Icon oder Text) liegt könnte ich diese Zone mit weniger
Details (Gewässer, Grenzen, ...) ausstatten.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ich wüsste z. Zt. keine Möglichkeit. Denn selbst wenn du weißt, das an der Koordinate 50,60 das Arbeitsplatzsymbol ist, weißt du a) bei geänderten einstellungen nicht, wie breit/hoch das Icon ist und wie lang und hoch der darunterstehende Text ist.

Aber vielleicht hilft es dir ja weiter, indem du folgendes versuchst:

hier im Forum gibt es einen Code, der Screenshots vom ganzen Bildschirm machen kann. Bevor du mit deinem PB-Programm ein Screenshot machst, setzt du die Hintergrundfarbe z. B. auf rot. Jetzt machst du einen Screenshot und untersuchst jeden Pixel (!) mit Point() (s. Hilfe), ob der jeweilige Pixel nicht rot ist. Wenn ja, dann muss an der Stelle auf dem Desktop logischerweise irgendein Icon oder Text sein. Bedenke aber, das du die Taskleiste nicht mitwerten darfst!

Was hälst du davon? Ich habe hier einen Code, der Pixel für Pixel ausliest, ungetestet, aber falls falsch, kannst du dir ja die Idee übernehmen. Benutz bitte Bilder (Images), keine Sprites oder Fanta's!

Code: Alles auswählen

bild=useImage(#bild) ; Die Bild ID des zu scannenden Bildes
hoehe=ImageHeight()
breite=ImageWidth()

StartDrawing(ImageOutput())
   For y=1 To hoehe
      For x=1 To breite
         Debug Point(x, y) ; Farbwert zum Test ausgeben (nachher rauslassen)
         If Point(x, y) <> RGB(255, 0, 0) ; Wenn ungleich rot
            Debug "Koordinate "+Str(x)+","+Str(y)+" ist nicht rot!"
         EndIf
      Next
   Next
StopDrawing()
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Super !

Die Grundidee ist genial einfach.
Da hätte ich auch selbst drauf kommen können. Aber, manchmal sieht man den Wald vor lauter Bäumen nicht.
Da die Icons ja vor meinem eigenen Hintergrund sitzen kann ich mir das rot sparen und den Screenshot direkt mit
meinem Hintergrund vergleichen. Vorher muß ich noch alle Fenster schließen.
Ich glaube da habe ich die entsprechenden Routinen irgendwo (Oh jeh ...) auf meiner Platte.
Veränderungen sind auch nicht kritisch - schlimmstenfalls ändert sich das Hintergrundbild eben zeitversetzt.

Danke !
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

uweb hat geschrieben:Super !

Die Grundidee ist genial einfach.
Dankeschön!

Ich denke halt manchmal so um die Ecke, weil ich das so gewohnt bin.
Wenn man kein PhotoShop hat, um eine Grafik zu zeichnen, denkt man eben ein wenig komplizierter: Öffne Paint, male, öffne es in Microsoft Photo Editor und füge dort Tranzparenz hinzu.

Nur ein Beispiel. Trotzdem freue ich mich, das dich meine idee so gut überzeugt hat, du hast aber schon recht: Manhcmal sieht man den Wald vor lauter bäumen nicht... :roll:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten