Imagemap in einem Gui

  • Hallo Leute.

    Erstmal Glückwunsch für das gelungene Design, es gefällt mir sehr.

    Was ich mit imagemap meine:

    Ein imagemap ist ein bereich in einem bild das die funktion eines links hat.

    Was ich schon habe:


    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <array.au3>
    $color = 0xFF0000 Or 0x0000FF Or 0xFCFF00
    Opt("mousecoordmode", 2)
    $gui = GUICreate('Imagemap', 916, 800)
    $pic1 = GUICtrlCreatePic(@ScriptDir & '\System\Imagemap2.bmp', 5, 5,586, 529) ;Image is attached
    GUISetState()
    $pic_hWnd = ControlGetHandle($gui, "", $pic1)
    $pic_hdc = DllCall("user32.dll", "int", "GetDC", "hwnd", $pic_hWnd)
    $hBrush = DllCall("gdi32.dll", "long", "CreateSolidBrush", "int", 0xFF0000) ; fill color1
    $obj_orig = DllCall("gdi32.dll", "int", "SelectObject", "int", $pic_hdc[0], "int", $hBrush[0])
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $pic1 Then
    $mp = MouseGetPos()
    DllCall("gdi32.dll","int","FloodFill","int",$pic_hdc[0],"int",$mp[0],"int",$mp[1],"int",0xFF0000) ; border color
    DllCall("gdi32.dll", "int", "SelectObject", "int", $pic_hdc[0], "int", $obj_orig[0])
    EndIf
    WEnd

    [/autoit]


    Das obenstehende Script färbt den bereich der drum herum ist blau, wenn mann ausserhalb des blauen bereich klickt.

    Wenn man innerhalb des blauen Bereiches klickt, färbt es den inneren bereich blau.


    Nun möchte ich, dass beim klicken in den blauen bereich "func bla1()" passiert.

    beim klicken in den Gelben Bereich, soll "func bla2()" u.s.w. passieren. (die Farben sind unter $color) aufgeführt.


    Ich hoffe ihr versteht, was ich will und könnt mir helfen.

    MfG

    Manu

  • Na dann müsste ich die ganzen Koordinaten angeben, stimmts?

    Die Lösung mit der Farbe wäre doch viel einfacher!?

  • Farbe ist aber komplexer. Wenn du jetzt über die Gebäude eine halbtranparente Farbebene drübersetzt dann haben die Pixel ja alle eine andere Farbe nicht? Und das dann mit Farbanteilen auszurechnen ist schwierig und funktioniert dann vllt. gar nicht

  • Farbe ist aber komplexer. Wenn du jetzt über die Gebäude eine halbtranparente Farbebene drübersetzt dann haben die Pixel ja alle eine andere Farbe nicht? Und das dann mit Farbanteilen auszurechnen ist schwierig und funktioniert dann vllt. gar nicht


    Wenn du das Script ausprobiert hättest, wüsstest du dass es den Teil innerhalb der blauen Linie füllt.

    Es ist egal welche Farbe der inhalt hat, solange sich darin nicht genau 0xFF0000 befinded, was ja logischerweise nicht der Fall ist.


    mfg

    Manu

  • Hallo.

    Also ich finde die Idee echt hammer genial. Auch wenn ich sie nicht brauchen kann, werde ich das hier aufrichtig verfolgen.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hallo.

    Also ich finde die Idee echt hammer genial. Auch wenn ich sie nicht brauchen kann, werde ich das hier aufrichtig verfolgen.

    LG, Lina.

    Hi Lina!

    Danke für deine Unterstützung.

    Ich denke das würde vielen helfen wenn ein solches script zustande kommt.

    mfg

    Manu

  • also du kannst ohne probleme abfragen ob du auf einen bereich geklickt hast indem du in deiner hauptschleife bei jedem durchgang prüfst ob an einer bestimmten coordinate das pixel "blau" wird (so hast du für jeden bereich eine koordinate - ich denk das kannst du verkraften :) ) - und dann kannst du deine entsprechende funktion aufrufen... ein problem wirst dui nur bekommen, und zwar das die funktion jetzt bei jedem schleifendurchlauf aufgerufen wird - das feld bleibt ja blau! dh.: setze in deiner funktion das feld im bild einfach wieder zurück auf eine andere farbe und schon funktionierts ;)

  • Tolle Idee!

    Es ist zwar nicht, was ich mir gewünscht hätte aber es ist eine akzeptable Lösung.

    Wie kann ich denn eine Koordinate auf einem Bild überprüfen? (Auf dem ganzen Bildschirm weiss ichs)

    Vielen Dank

    Manu

  • du musst noch die option

    [autoit]

    Opt("MouseCoordMode", 0)

    [/autoit]

    dann sind die coordinaten bei Funktionen wie

    (die hier brauchst du auch)

    [autoit]

    PixelGetColor(x, y)

    [/autoit]

    immer relativ zum aktiven Fenster (GUI)

    ich hab als ich es getestet hab (mit dem bsp aus dem englischen forum) für jeden staat eine coordinate ausgewählt (hab dazu n pixellineal verwendet) und dann wie gesagt bei jedem schleifendurchlauf die farbe mit if abfragen überprüft -> ist die farbe blau dann mach _deineFunktion und setze die farbe wieder zurück ... so gings bei mir :)

    hoffe ich konnte dir helfen

  • Das einzige Problem, welches ich noch habe ist, dass ich nicht weiss, wie ich verschiedene Bereiche füllbar machen kann...

    EDIT:

    Oliverh, könntest du bitte dein script posten? es würde mir sehr weiterhelfen.

    Einmal editiert, zuletzt von ManuIt (14. Dezember 2007 um 12:36)