1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. UPIA

Beiträge von UPIA

  • GPS-Koordinaten in 2D-Karte eintragen - oder Workaround.

    • UPIA
    • 6. Januar 2026 um 10:51

    hi. danke für den Tipp. Habe es ausprobiert, entspricht leider nicht dem was ich brauche.
    ich werde hier mein python-problem lösen müssen.

  • GPS-Koordinaten in 2D-Karte eintragen - oder Workaround.

    • UPIA
    • 17. Dezember 2025 um 14:41

    okay, hab jetzt die richtigen libs. und läuft.
    ich habe inzwischen die richtigen formeln für das umrechnen in python gefunden (wie du auch schon gesagt hattest).
    nur ist die lib dafür irgendwie in pyproj versteckt. und ich schaffe es nicht das pyproj modul zu installieren mit den 9-Jahre alten Anleitungen im Netz

    Edit: So also an dieser Stelle 1000Dank für das astreine Script. Habe alle Daten damit konvertiert! Muss die Tage mal schauen wie ich die ins Bild bekomme und wie das ausschaut.
    Das "Projekt" muss ich zeittechnisch jetzt erstmal parken.

  • GPS-Koordinaten in 2D-Karte eintragen - oder Workaround.

    • UPIA
    • 17. Dezember 2025 um 12:11

    Wow. okay also mit GPS meinte ich Geographische Koordinaten (Lon, Lat) dezimal (WGS84). Mit UTM zone 32N (das ist das Zielformat / Backgroundkartenformat).
    woher hast du das script? mir fehlen 2 au3: JSON.au3, BinaryCall.au3 musste ich erst suchen - und funktionieren nicht richtig (_JSON_Parse($sResponse) Unknown Function Name)...
    woher zieht man sich diese au3's offiziell, wenn man sie nicht aus irgendeinem Forum-post nimmt?
    Bis dato teste ich nochmal mein Pythonscript gegen den Online-Umrechner :)

  • GPS-Koordinaten in 2D-Karte eintragen - oder Workaround.

    • UPIA
    • 16. Dezember 2025 um 17:03

    *das bezog sich nur auf die wahl der lage des referenzpunktes, damit ich zunächst mal nicht mit negativen koordinaten zu tun habe.

    die berechnung ist auf alle fälle der richtige weg. aber für eine seite grafik war der aufwand jetzt schon enorm. egal, ich lass das mal sacken.
    immer noch offen für Alternativen!

    EDIT:
    während einer tasse tee ließ ich mal den rudimentären bot nach roten punkten suchen und das sieht schon mal sehr viel besser aus. ich muss das nur noch skalieren.
    für das projekt reicht mir der schlenker. ich benötige aber immer noch für die Zukunft eine Lösung mit GPS auf 2D (wenn mgl UTM).

  • GPS-Koordinaten in 2D-Karte eintragen - oder Workaround.

    • UPIA
    • 16. Dezember 2025 um 15:10

    Ich habe den Fundstellen in einem Buch ein Zeitalter und eine PLZ-Ort zugeordnet. Das war der Anfang um es darzustellen. Es gibt einen Bezahlservice, wo ich das mit Mapcode erledigen kann (teuer und entspricht nicht dem was ich möchte). Dann hab ich mir über die PLZ-Ort die GPS gezogen.

    Du hast die Komplexität gut erklärt. Ich hatte die Geographische Ansicht aus der ich die Koordinaten hatte als Hintergrund (Bild 2). Das Latitüdenproblem in der Umrechnung hatte ich erwartet (Y-Achse verzerrt), aber irgendwie passt auch die X-Achse nicht.
    Ich habe über einen Referenzpunkt gerechnet - mal unten links (0,0)*, dann zentral um die Latitüdenverzerrung zu verringern. Würde ich mehrere Referenzpunkte (z.b. ein Raster) wählen und immer zum nächsten prüfen, wäre ich wohl genauer. aber da will ich auch nicht in die Kartographie einsteigen.
    *bei GPS ist ja der Breitengrad oben größer im gegensatz zum image

    Hahaha. je mehr ich grüble, desto mehr lacht mich der Ansatz mit dem roten Punkt aus der UTM-Karte wieder in die UTM-Karte an.

    Aber ja, das ist mein Dilemma. Bekomme ich das in python überhaubt ausreichend genau hin. Vor 50 Jahren hätte ich eine Karte gemalt und Schnipsel ausgeschnitten und mit der Polaroid dokumentiert. Heut zu tage stell ich mich irgendwie blöd an :party1:

  • GPS-Koordinaten in 2D-Karte eintragen - oder Workaround.

    • UPIA
    • 16. Dezember 2025 um 12:42

    hi leute.
    ich hab 215 Orte, die ich in eine Reliefkarte eintragen möchte. Ich habe mir die GPS-Koordinaten dazu geladen um diese dann auf die Karte zu projizieren (vllt. schon falsch abgebogen). Ach ja witzige Anekdote, hatte zwischendurch mal ChatGPT gefragt, ob er anhand von PLZ und Ortsnamen diese Punkte auf einer Landkarte eintragen könnte:

    zurück zum Thema: ich habe mir dann mit python ein svg erstellt, dass ich dann über die Karte legen wollte. Ergebnis war ernüchternd. Es sind wohl zu viele Ungenauigkeiten bei meiner Umrechnung. Versuch hier:

    Jetzt habe ich einen weiteren zweifelhaften, aber möglichen Ansatz gefunden, indem ich die Punkte plotte und mir dann die 2D-x,y-pixel mit PixelSearch() suche. und das ganze in einem Macro laufen lasse: (der kleine rote Kreis)


    Daher vorab Frage an Euch:
    Übershe ich eine viel einfachere Lösung/Tool/App?
    Lohnt es sich die GPS-2D-Umrechnung zu verfeineren LatExactCalc? (hat da jmd Erfahrung)?

    Anmerkung: ich hab natürlich versucht auch die Punkte manuell auf eine Karte zu schieben, aber ich bekomme keine große Karte wo ich die Ortschaften sehe und diese später ausblenden kann - sonst wäre ich schon fertig :) monetäre Lösungen wie mapcode usw kommen für mich nicht in Frage.

    Ich weiß, ist sehr weit vom Schuss (auch im Offtopic) aber wo wenn nicht hier finde ich jemand der überhaupt weiß von was ich spreche :theke:

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 12. Dezember 2025 um 19:48
    Zitat von Hilmi

    Verstehe ich nicht ganz. Gehe ich auf das Fenster vom DCS kann ich die F3 ausführen. Lege ich die F3 auf eine Mouse-Taste dann führt die die Mouse-Taste als F3 aus. Hoffe, du meinste das.

    Es ging mir nur drum zu testen ob es an autoit liegt, dass die tasten nicht erkannt werden. Oder ob das Programm generell etwas gegen generierte tastendrücke hat. Daher wäre es wichtig zu wissen, ob du mit einer 3rd-Party Software funktioniert (also nicht autoit am laufen ist).

    Alles weiterführende um das Programm "auszutricksen" ist zeit- und nervenaufwändig (und hier auch fehl am Platz - da gibt es andere Foren). Da würde ich mir lieber eine Makro-Tastatur kaufen.

    Aber berichte gerne, wenn du neue erkenntnisse hast!

    EDIT: oops, hab da zwei beiträge übersehen/übersprungen ..

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 12. Dezember 2025 um 14:34

    .. ja du müsstest das Windows-Handle herausfinden und dann versuchen der Anwendung direkt die Tasten zu schicken, was aber nicht immer einfach ist und vor allem nicht immer funktionieren muss.

    Hast du auch Punkt 1. versucht? Das ist wirklich wichtig, damit wir ausschließen können dass der DCS Autoit verwehrt!
    (ich hab schon öfter erlebt, dass Anwendungen Autoit-Keys blockieren/verzögern, konnte diese dann aber über 3rd Party Software senden (diese wurden akzeptiert) .. soll kein Lösungsansatz sein - nur dir evtl viel mühe ersparen!)

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 12. Dezember 2025 um 12:54

    da hast du dir ja ein hartes nüsschen für den anfang rausgesucht :S das fällt mir noch ein:
    1. Als Erstes müsstest du mal versuchen ob du nicht die F3-Taste mit einer anderen Software binden kannst (z.B. deiner Maus-Software) und ob das im Spiel funktioniert.
    2. Du solltest auch mal (falls möglich) versuchen das Spiel im Randlos oder Windows Modus zu setzen (also NICHT vollbild) ob die tasten da ankommen.
    3. Compiliere mal dieses Script zu einer .exe (mit Tools > Compile) und erstelle eine Verknüpfung auf den Desktop. Es wartet 5 Sekunden bis es F3 drückt.
    (also wenn du im Spiel bist - Randlos Modus: Auf den Desktop, die Verknüpfung klicken, zurück ins Spiel, dort mehrfach ins Fenster klicken und warten ob F3 wirkt. Danach Fenster-Moduns, dann Vollbild-Modus)

    Edit: (vergaß er):

    Code
    Sleep(5000)				; warte 5 sekunden bis ich im Anwendungsfenster bin
    Send("{F3 down}")		; drücke F3 runter
    Sleep(222)				; für 222ms
    Send("{F3 up}")			; lasse F3 los
    Exit					; ende

    Ansonsten wären es nicht mehr ganz triviale Ansätze wie Aspirinjunkie aufzeigt, ControlSend-Versuche etc. daher empfehle ich nochmal die 3 basic steps zu versuchen ob wir da nicht irgendein muster erkennen :)

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 11. Dezember 2025 um 22:42

    das ist die standardmeldung. ist alles okay.
    du musst aber auch den code posten
    am besten im code-block (2 links vom zitat)
    sonst kann ich nicht helfen.

    da hilft nur viel testen und die übersicht behalten, welcher key gerade gedrückt ist usw...

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 11. Dezember 2025 um 21:48

    Ist das Fenster des Simulators aktiv (also hast du vorher reingeklickt)?
    sonst empfängt es die tasten von send() nicht.
    Ansonsten versuche mal: Opt ("SendKeyDownDelay", 120)

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 11. Dezember 2025 um 19:58
    Zitat

    Ich rufe also meine gespeicherte Datei xxx.au3

    also im Editor (Scite) F5 Drücken oder im Menü "Go"?

    dann sollte das script laufen.

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 11. Dezember 2025 um 17:20

    schicke am besten immer das aktuelle script in code-block [<>] verpackt, dann ist es einfacher.

    Code
    ;Hotkey Macros
    Opt ("SendKeyDelay", 40)	 ; default: 5 / Zeit zwischen gesendeten tastendrücken
    Opt ("SendKeyDownDelay", 70) ; default: 5  / Zeit wie lange eine taste gerdückt wird
    
    Global $hotkey_x = "{PAUSE}"  		; Pause/Unterbechung - beendet dieses programm (oder über taskleiste!)
    Global $hotkey_1 = "{NUMPAD0}"      ; Beispiel für einen Hotkey
    Global $run = 1
    
    HotKeySet($hotkey_x, Stop)			; macro-funktion der Taste zuweisen
    HotKeySet($hotkey_1, Macro_C)
    
    Func Macro_C() 						; Funktion mit Macro
    	Send("{!C}")
    	Sleep(1000)
    	Send("{RSHIFT}{C}")
    	MsgBox(0,"HotkeyTest", "Macro wurde ausgeführt")
    EndFunc
    
    Func Stop()
    	$run = 0
    EndFunc
    
    While $run = 1
    	Sleep(20)
    WEnd
    Exit
    Alles anzeigen

    um erstmal den hotkey zu prüfen kannst du zb. eine Messagebox einbauen, damit du sicher bist, dass der hotkey das macro auslöst (s.o.)
    EDIT: Sollte kein Fenster aufpoppen wenn du den Hotkey drückst dann versuche einen anderen Hotkey!

    jetzt musst du dein programm genau kennen (lernen) welche tasten es registriert. einige erkennen NUMPAD0 nicht als 0, dann kann man da macros drauflegen ...
    es kann auch sein, dass die tastendrücke eine mindestdauer haben um registriert zu werden. das habe ich mal in den obersten beiden zeilen reingesetzt (musst du ggf anpassen)

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 11. Dezember 2025 um 14:05

    Tippt der Ziffernblock denn eine 0 wenn du ihn drücks (also ist NUM eingeschaltet) ? Ansonsten versuche es erstmal mit einem anderen Hotkey der dich nicht stört (und auch die Anwendung nicht).

  • Anfängerfrage zum Ausführen einer Datei

    • UPIA
    • 11. Dezember 2025 um 10:58

    Hallo Hilmi,

    du hast dich ja schon vorgestellt und offensichtlich den teil mit den spielen und bots in den regeln gelesen.
    wenn du dir mehrere macros für ein programm basteln möchtest würde ich mal so beginnen:

    Code
    ;Hotkey Macros 
    Global $hotkey_x = "{PAUSE}"  		; Pause/Unterbechung - beendet dieses programm (oder über taskleiste!)
    Global $hotkey_1 = "{NUMPAD0}"      ; Beispiel für einen Hotkey 
    Global $run = 1
    
    HotKeySet($hotkey_x, Stop)			; macro-funktion der Taste zuweisen
    HotKeySet($hotkey_1, Macro_C)
    
    Func Macro_C() 						; Funktion mit Macro
    	Send("{!C}")
    	Sleep(1000)
    	Send("{RSHIFT}{C}")
    EndFunc
    
    Func Stop()
    	$run = 0
    EndFunc
    
    While $run = 1
    	Sleep(20)
    WEnd
    Exit
    Alles anzeigen

    die frage ist wie viele hotkeys du brauchst und auf welche freien (gut zugängliche) tasten du das legen willst ...

  • ColorChangeIconButton - BugWorkaround?

    • UPIA
    • 7. Dezember 2025 um 12:14

    hi.
    Sehe jetzt erst, deine überarbeitete wm_notify. Funzt einwandfrei bei mir!
    ich bin auf win11. danke für die info! Jetzt kapier ich auch wie dieses Script funktioniert, dass ich eine zeitlang her gefunden habe:

    Code
    Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3)
       Dim $pos, $ret, $ret2
       $pos = WinGetPos($h_win)
        $ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long",  $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3,  "long", $i_y3)
       If $ret[0] Then
          $ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1)
          If $ret2[0] Then
             Return 1
          Else
             Return 0
          EndIf
       Else
          Return 0
       EndIf
    EndFunc;==>_GuiRoundCorners
    Alles anzeigen

    Schönen Sonntag!

  • ColorChangeIconButton - BugWorkaround?

    • UPIA
    • 6. Dezember 2025 um 13:14
    Zitat von Velted

    der 'echte' Button liefert bei NM_CUSTOMDRAW den 'Hover' Status automatisch.

    okay, mächtig! das wm_notify zu lesen ist wirklich schick. letztenendes muss halt doch der Farbeimer ran und das Icon wieder draufgeballert werden - dafür aber vollends kompatibel!

    Ich hab die Buttons auf die Schnelle nicht abrunden können wie den Default. Das sollte aber doch mit den Styles gehen?!

  • ColorChangeIconButton - BugWorkaround?

    • UPIA
    • 5. Dezember 2025 um 18:58

    jetzt weiß ich wofür diese wm_notify geschichte gut ist :) große erkenntnis für das button-handling, sehr geil! 8|
    mir ist ab diesem punkt nicht klar, welchen nachteil es hat ob mein button ein label, grafikhandle oder ein echter button ist!
    "Das Zeichnen des Buttons könnte man noch verfeinern bzw. an Win 11 anpassen"
    das würde mich auch interessieren (habe die gui-stlyes probiert aber die sind nicht wirklich der bringer.
    hat der echte button hier vorteile, weil er besser dargestellt werden kann?

  • ColorChangeIconButton - BugWorkaround?

    • UPIA
    • 4. Dezember 2025 um 20:41

    wenn ich für meine "methode" einfach ein label auf der hGUI unter die subGUI platzieren kann ich den hover-status mit GUIGetCursorInfo($hGUI) auslesen. damit reduziert sich der button-handling code auch wesentlich. letztenendes wird sich aber doch jeder der mehrere OnMouseOver Buttons kontrollieren will einen button-händler basteln.

    das noch zur ergänzung, meine Buttons etwas schlanker mit einem zusätzlichen Label:

    AutoIt
    #include <GUIConstants.au3>
    
    Example() ; compare multiple buttons fixing the icon-gui-bug
    
    Func Example()
    	Local $winbg = 0x666666
        Global $hGUI = GUICreate("GuiTest", 300, 400)
    	GUISetBkColor($winbg, $hGUI)
    
    	; Press this button to "solve" the problem
        Local $idButton_bg = GUICtrlCreateButton("Change BG!", 210, 370, 85, 25)
    
    	;upia
    	Local $idIcon7 = GuiSubButtonCreate($hGUI, "", 30, 250, 48, 48, "C:\Windows\System32\imageres.dll", -132, 32, 32, 8, 8, 0xff8888, 0xffbbbb, 0xffcccc)
    	Local $idIcon8 = GuiSubButtonCreate($hGUI, "", 100, 250, 48, 48, "C:\Windows\System32\imageres.dll", -132, 32, 32, 8, 8, 0x8888ff, 0xbbbbff, 0xccccff)
    	Local $idIcon9 = GuiSubButtonCreate($hGUI, "", 170, 250, 48, 48, "C:\Windows\System32\imageres.dll", -132, 32, 32, 8, 8, 0x88ff88, 0xbbffbb, 0xccffcc)
    
        GUISetState(@SW_SHOW, $hGUI)
    
        ; Loop until the user exits.
        While 1
    		Local $gmb = GUIGetMsg(1)
    		Local $gm = $gmb[0]
    		Local $h = $gmb[1]
    		Local $c = $gmb[2]
            Switch $gm
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    			Case $idButton_bg
    				If $winbg = 0xcccccc Then
    					$winbg = 0x666666
    					GUISetBkColor($winbg, $hGUI)
    					GUISetState()
    				ElseIf $winbg = 0x666666 Then
    					$winbg = 0xcccccc
    					GUISetBkColor($winbg, $hGUI)
    					GUISetState()
    				EndIf
                Case $idIcon7[1]								; check subgui-buttons on [1] hSUB Label
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon8[1]
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon9[1]
    				ConsoleWrite("Works!" & @CRLF)
    			Case $GUI_EVENT_NONE
    				; Button handling of the SubGui's with cursorinfo
    				Local $nfo = GUIGetCursorInfo($hGUI)						; use this to check hover and out on [3] (hGUI-Label)
    				Local $hover = $nfo[4]
    				Switch $hover
    					Case $idIcon7[3]
    						$idIcon7 = GuiSubButtonSet($idIcon7, 1)
    					Case $idIcon8[3]
    						$idIcon8 = GuiSubButtonSet($idIcon8, 1)
    					Case $idIcon9[3]
    						$idIcon9 = GuiSubButtonSet($idIcon9, 1)
    					Case 0														; check - no hover => release any if state is hover
    						If $idIcon7[7] = 1 Then $idIcon7 = GuiSubButtonSet($idIcon7, 0)
    						If $idIcon8[7] = 1 Then $idIcon8 = GuiSubButtonSet($idIcon8, 0)
    						If $idIcon9[7] = 1 Then $idIcon9 = GuiSubButtonSet($idIcon9, 0)
    				EndSwitch
            EndSwitch
        WEnd
        GUIDelete($hGUI)
    EndFunc   ;==>Example
    
    Func GuiSubButtonCreate($hGUI, $strText, $xPos, $yPos, $bWidth, $bHight, $iconFile, $iconIndex, $iconSizeX, $iconSizeY, $iconXoff, $iconYoff, $staticCol, $overCol, $pressCol)
    	Local $ctrlID = -1, $icon
    	GUISwitch($hGUI)
    	Local $xLayer = GUICtrlCreateLabel("", $xPos, $yPos, $bWidth, $bHight) ; <<--------------------------- Trick? this triggers GUIGetCursorInfo($hGUI) - no sub-check
    	Local $hChild = GUICreate("", $bWidth, $bHight, $xPos, $yPos, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
    	GUISwitch($hChild)
    	GUISetState(@SW_DISABLE, $hChild)
    	GUISetState(@SW_HIDE, $hChild)
    	$ctrlID = GUICtrlCreateLabel($strText, 0, 0, $bWidth, $bHight)
    	GUISetBkColor($staticCol, $hChild)												;set state static
    	GUICtrlSetBkColor($ctrlID, $staticCol)
    	$icon = GUICtrlCreateIcon($iconFile, $iconIndex, 0+$iconXoff, 0+$iconYoff, $iconSizeX, $iconSizeY, Default)
    	GUISetState(@SW_ENABLE, $hChild)
    	GUISetState(@SW_SHOW, $hChild)
    	Local $ret[8] = [$hChild, $ctrlID, $icon, $xLayer, $staticCol, $overCol, $pressCol, 0]
    	GUISwitch($hGUI)
    	Return $ret
    EndFunc
    Func GuiSubButtonSet($aID, $state)
    	Local $stateL = $aID[7]
    	If $stateL <> $state Then
    		Local $i = $state + 4
    		Local $c = $aID[$i]
    		GUISetBkColor($c, $aID[0])
    		GUICtrlSetBkColor($aID[1], $c)
    		GUISetState(@SW_SHOW)
    		$aID[7] = $state;?!
    	EndIf
    	Return $aID
    EndFunc
    Alles anzeigen
  • ColorChangeIconButton - BugWorkaround?

    • UPIA
    • 4. Dezember 2025 um 19:18

    Velted wow, dass ergebnis sieht gleich aus wie bei Kanashius nur mit weniger code.

    Kann mir jemand das bitte noch final bestätigen:
    "Man kann einen .ico file nicht so manipulieren, dass er in AutoIt per GUICtrlCreateIcon() geladen wird und nicht den Transparenz-Bug aufweist!"

    EDIT: hab das erst jetzt kapiert!
    Velted zeichnet das Icon einfach richtig (ohne bug mit WinAPI) auf ein Label.
    Kanashius Weg "repariert" die transparenten Pixel auf einem GraphicHandle.
    Und mein "Workaround" zeichnet eine neue sub-gui die ihren wahren BG nie zeigt und der Button ist auch nur ein Label.
    Das funktioniert zwar, ohne Einsatz von extra-Bibliotheken aber auf Kosten von Programmierkomfort.

    Tendentiell ist für mich die Methode von Velted am geeignetsten. Ich werde mal die Tage einen Performance-Test für alle 3 Methoden machen und berichten!

    ich hab hier mal alle 3 Versionen hinzugefügt und mit OnMouseOver Effekten belegt. Funzen alle super!
    Besonders beim Button-Handling zeigt sich aber der Mehraufwand meiner Methode (da wäre eine Handler-Funktion sinnvoll - im nächsten Post verbessert.)

    GUI-Button-Test: (Originale, Kanashius, Velted, UPIA)

    Der Code:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPIShellEx.au3>
    #include <WinAPISysWin.au3>
    
    #include <StaticConstants.au3> ;velted
    Global Const $SS_REALSIZEIMAGE = 0x0800 ; fehlt in StaticConstants.au3
    
    
    Example() ; compare multiple buttons fixing the icon-gui-bug
    
    Func Example()
    	Local $winbg = 0x666666
        Global $hGUI = GUICreate("GuiTest", 300, 400)
    	GUISetBkColor($winbg, $hGUI) ;$winbg
    
        ; Create a button control. - from examples working perfectly with trans icon on Default Color (No GUISetBkColor!) but has no color!
        Local $idButton_1 = GUICtrlCreateButton("", 30, 30, 48, 48, $BS_ICON)
    	GUICtrlSetTip ( $idButton_1, "DefBtn", "")
    	Local $idIcon_1 = GUICtrlSetImage($idButton_1, "C:\Windows\System32\imageres.dll", -82, 1)
    
    	; The same but with color => not showing .ico file
        Local $idButton_2 = GUICtrlCreateButton("ColBtn", 100, 30, 48, 48, $BS_ICON)
    	GUICtrlSetTip ( $idButton_2, "no ico!", "")
    	GUICtrlSetBkColor($idButton_2, 0x666666)
    	Local $idIcon_2 = GUICtrlSetImage($idButton_2, "C:\Windows\System32\imageres.dll", -82, 1)
    
    	; Createing a color label with the icon as pseudo-button works ONLY if GUI-BG-color is  same as the icons background
        Local $idButton_3 = GUICtrlCreateLabel("", 170, 30, 48, 48)
    	GUICtrlSetTip ( $idButton_3, "bad ico", "")
    	GUICtrlSetBkColor($idButton_3, 0x666666)
    	Local $idIcon_3 = GUICtrlCreateIcon("C:\Windows\System32\imageres.dll", -82, 178,38, 32,32)
    
    
    	; Press this button to "solve" the problem
        Local $idButton_bg = GUICtrlCreateButton("Change BG!", 210, 370, 85, 25)
    
    	;kanashius
    	Local $idIcon1 = GuiCtrlCreateIconEx("C:\Windows\System32\imageres.dll", -82, 30, 110, 48, 48, 32,32)
    	GUICtrlSetBkColor(-1, 0x8888ff)
    	GUICtrlSetTip ( $idIcon1, "Kanashius", "")
    	Local $idIcon2 = GuiCtrlCreateIconEx("C:\Windows\System32\imageres.dll", -82, 100, 110, 48, 48, 32,32)
    	GUICtrlSetBkColor(-1, 0xff8888)
    	GUICtrlSetTip ( $idIcon2, "Kanashius", "")
    	Local $idIcon3 = GuiCtrlCreateIconEx("C:\Windows\System32\imageres.dll", -82, 170, 110, 48, 48, 32,32)
    	GUICtrlSetBkColor(-1, 0x88ff88)
    	GUICtrlSetTip ( $idIcon3, "Kanashius", "")
    
    	;velted
    	Local $idIcon4 = GuiCtrlCreateIcon2("", 30, 180, 48, 48, "C:\Windows\System32\imageres.dll", 4)
    	GUICtrlSetBkColor(-1, 0x8888ff)
    	GUICtrlSetTip ( $idIcon4, "Velted", "")
    	Local $idIcon5 = GuiCtrlCreateIcon2("", 100, 180, 48, 48, "C:\Windows\System32\imageres.dll", 4)
    	GUICtrlSetBkColor(-1, 0xff8888)
    	GUICtrlSetTip ( $idIcon5, "Velted", "")
    	Local $idIcon6 = GuiCtrlCreateIcon2("", 170, 180, 48, 48, "C:\Windows\System32\imageres.dll", 4)
    	GUICtrlSetBkColor(-1, 0x88ff88)
    	GUICtrlSetTip ( $idIcon6, "Velted", "")
    
    	;upia
    	Local $idIcon7 = GuiSubButtonCreate($hGUI, "", 30, 250, 48, 48, "C:\Windows\System32\imageres.dll", -132, 32, 32, 8, 8)
    	GuiSubButtonSet($idIcon7, 0x8888ff)
    	GUICtrlSetTip ( $idIcon7[1], "UPIA", "")
    	Local $idIcon8 = GuiSubButtonCreate($hGUI, "", 100, 250, 48, 48, "C:\Windows\System32\imageres.dll", -132, 32, 32, 8, 8)
    	GuiSubButtonSet($idIcon8, 0xff8888)
    	GUICtrlSetTip ( $idIcon8[1], "UPIA", "")
    	Local $idIcon9 = GuiSubButtonCreate($hGUI, "", 170, 250, 48, 48, "C:\Windows\System32\imageres.dll", -132, 32, 32, 8, 8)
    	GuiSubButtonSet($idIcon9, 0x88ff88)
    	GUICtrlSetTip ( $idIcon9[1], "UPIA", "")
    
    	;_WinAPI_SetLayeredWindowAttributes($hGUI, $winbg, 255)
    
        GUISetState(@SW_SHOW, $hGUI)
    
        Local $iPID = 0
    
    	Local  $lastH[2] = [-1,-1] ; for button control (regular)
    	Local  $lastB[2] = [-1,-1] ; for gui-buttons
    
        ; Loop until the user exits.
        While 1
    		Local $gmb = GUIGetMsg(1)
    		Local $gm = $gmb[0]
    		Local $h = $gmb[1]
    		Local $c = $gmb[2]
    		;If $gm <> 0 Then ConsoleWrite($gm & " - Handle: " & $h & " - Control: " & $c & " -------> lH: " & $lastH[0] & @CRLF)
            Switch $gm
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    			Case $idButton_bg
    				If $winbg = 0xcccccc Then
    					$winbg = 0x666666
    					GUISetBkColor($winbg, $hGUI)
    					GUISetState()
    				ElseIf $winbg = 0x666666 Then
    					$winbg = 0xcccccc
    					GUISetBkColor($winbg, $hGUI)
    					GUISetState()
    				EndIf
               Case $idButton_1
                    MsgBox(0,"Default Button", "ico is transparent, but surface has fix color!")
                Case $idButton_2
                    MsgBox(0,"Default Button with Color", "Color set with GUICtrlSetBkColor() prevents ico")
                Case $idButton_3
    				If $winbg = 0xcccccc Then
    					$winbg = 0x666666
    					GUISetBkColor($winbg, $hGUI)
    					GUISetState()
    				ElseIf $winbg = 0x666666 Then
    					$winbg = 0xcccccc
    					GUISetBkColor($winbg, $hGUI)
    					GUISetState()
    				EndIf
                Case $idIcon1
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon2
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon3
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon4
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon5
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon6
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon7[1]								; check subgui-buttons
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon8[1]
    				ConsoleWrite("Works!" & @CRLF)
                Case $idIcon9[1]
    				ConsoleWrite("Works!" & @CRLF)
    			Case $GUI_EVENT_NONE
    				; Button handling of the SubGui's with cursorinfo
    				Local $CHECK = $idIcon7
    				Local $ci = GUIGetCursorInfo($CHECK[0])
    				If $ci[4] = $CHECK[1] Or $ci[4] = $CHECK[1]+1 Then
    					If $lastB[0] <> $CHECK[1] Then
    						GuiSubButtonSet($CHECK, 0xbbbbff)
    						$lastB[0] = $CHECK[1]
    						$lastB[1] = $CHECK[0]
    					EndIf
    				Else
    					If $lastB[0]  = $CHECK[1] Then
    						GuiSubButtonSet($CHECK, 0x8888ff)
    						$lastB[0] = 0
    						$lastB[1] = 0
    					EndIf
    				EndIf
    				Local $CHECK = $idIcon8
    				Local $ci = GUIGetCursorInfo($CHECK[0])
    				If $ci[4] = $CHECK[1] Or $ci[4] = $CHECK[1]+1 Then
    					If $lastB[0] <> $CHECK[1] Then
    						GuiSubButtonSet($CHECK, 0xffbbbb)
    						$lastB[0] = $CHECK[1]
    						$lastB[1] = $CHECK[0]
    					EndIf
    				Else
    					If $lastB[0]  = $CHECK[1] Then
    						GuiSubButtonSet($CHECK, 0xff8888)
    						$lastB[0] = 0
    						$lastB[1] = 0
    					EndIf
    				EndIf
    				Local $CHECK = $idIcon9
    				Local $ci = GUIGetCursorInfo($CHECK[0])
    				If $ci[4] = $CHECK[1] Or $ci[4] = $CHECK[1]+1 Then
    					If $lastB[0] <> $CHECK[1] Then
    						GuiSubButtonSet($CHECK, 0xbbffbb)
    						$lastB[0] = $CHECK[1]
    						$lastB[1] = $CHECK[0]
    					EndIf
    				Else
    					If $lastB[0]  = $CHECK[1] Then
    						GuiSubButtonSet($CHECK, 0x88ff88)
    						$lastB[0] = 0
    						$lastB[1] = 0
    					EndIf
    				EndIf
    
    				Local $nfo = GUIGetCursorInfo($hGUI)						; use this to check hover and out - regular buttons/ctrlid's
    				Local $hover = $nfo[4]
    				;If $hover <> 0 Then ConsoleWrite("............ " & $hover)
    				Switch $hover
    					Case $idIcon1
    						If Not $lastH[0] = $idIcon1 Then
    							GUICtrlSetBkColor($idIcon1,0xbbbbff)
    							$lastH[0] = $idIcon1
    							$lastH[1] = 1
    						EndIf
    					Case $idIcon2
    						If Not $lastH[0] = $idIcon2 Then
    							GUICtrlSetBkColor($idIcon2,0xffbbbb)
    							$lastH[0] = $idIcon2
    							$lastH[1] = 1
    						EndIf
    					Case $idIcon3
    						If Not $lastH[0] = $idIcon3 Then
    							GUICtrlSetBkColor($idIcon3,0xbbffbb)
    							$lastH[0] = $idIcon3
    							$lastH[1] = 1
    						EndIf
    					Case $idIcon4
    						If Not $lastH[0] = $idIcon4 Then
    							GUICtrlSetBkColor($idIcon4,0xbbbbff)
    							$lastH[0] = $idIcon4
    							$lastH[1] = 1
    						EndIf
    					Case $idIcon5
    						If Not $lastH[0] = $idIcon5 Then
    							GUICtrlSetBkColor($idIcon5,0xffbbbb)
    							$lastH[0] = $idIcon5
    							$lastH[1] = 1
    						EndIf
    					Case $idIcon6
    						If Not $lastH[0] = $idIcon6 Then
    							GUICtrlSetBkColor($idIcon6,0xbbffbb)
    							$lastH[0] = $idIcon6
    							$lastH[1] = 1
    						EndIf
    					Case 0														; regular buttons/ctrlid's check - no hover => release any
    						If Not $lastH[0]  = 0 Then
    							Local $cid = $lastH[0]
    							Switch $cid
    								Case $idIcon1
    									GUICtrlSetBkColor($idIcon1,0x8888ff)
    								Case $idIcon2
    									GUICtrlSetBkColor($idIcon2,0xff8888)
    								Case $idIcon3
    									GUICtrlSetBkColor($idIcon3,0x88ff88)
    								Case $idIcon4
    									GUICtrlSetBkColor($idIcon4,0x8888ff)
    								Case $idIcon5
    									GUICtrlSetBkColor($idIcon5,0xff8888)
    								Case $idIcon6
    									GUICtrlSetBkColor($idIcon6,0x88ff88)
    							EndSwitch
    							$lastH[0] = 0
    							$lastH[1] = 0
    						EndIf
    				EndSwitch
            EndSwitch
        WEnd
        GUIDelete($hGUI)
        If $iPID Then ProcessClose($iPID)
    EndFunc   ;==>Example
    
    Func GuiCtrlCreateIconEx($sFilename, $iIconIndex, $iLeft, $iTop, $iWidth = Default, $iHeight = Default, $iIconWidth = Default, $iIconHeight = Default, $iStyle = Default) ;kanashius
    	If $iIconWidth = Default Then $iIconWidth = $iWidth
    	If $iIconHeight = Default Then $iIconHeight = $iHeight
    	Local $idGraphic = GUICtrlCreateGraphic($iLeft, $iTop, $iWidth, $iHeight, $iStyle)
    	_GDIPlus_Startup()
    	Local $hIcon = _WinAPI_ShellExtractIcon($sFilename, $iIconIndex, $iIconWidth, $iIconHeight)
        Local $hBitmap = _GDIPlus_BitmapCreateFromHICON($hIcon)
    	Local $iColorPrev = -1, $iImgWidth=_GDIPlus_ImageGetWidth($hBitmap), $iImgHeight = _GDIPlus_ImageGetHeight($hBitmap)
    	Local $iLeftSpace = (_WinAPI_GetClientWidth(GUICtrlGetHandle($idGraphic))-$iImgWidth)/2, $iTopSpace = (_WinAPI_GetClientHeight(GUICtrlGetHandle($idGraphic))-$iImgHeight)/2
    	For $x=0 To $iImgWidth
    		For $y=0 To $iImgHeight
    			Local $iColor = _GDIPlus_BitmapGetPixel($hBitmap, $x, $y)
    			If BitAND($iColor, 0xFF000000)<>0 Then
    				$iColor = BitAND($iColor, 0xFFFFFF)
    				If $iColor<>$iColorPrev Then
    					GUICtrlSetGraphic($idGraphic, $GUI_GR_COLOR, $iColor, $iColor)
    					$iColorPrev = $iColor
    				EndIf
    				GUICtrlSetGraphic($idGraphic, $GUI_GR_PIXEL, $iLeftSpace+$x, $iTopSpace+$y, 40, 30, 270)
    			EndIf
    		Next
    	Next
    	; export here once to _ffccff
    	_GDIPlus_BitmapDispose($hBitmap)
    	_GDIPlus_Shutdown()
    	return $idGraphic
    EndFunc
    
    Func GuiCtrlCreateIcon2($tx, $pX, $pY, $iW, $iH, $sIconFileName, $IconIndex, $iBtnStyle=BitOR($SS_CENTERIMAGE, $SS_ICON, $SS_NOTIFY, $SS_REALSIZEIMAGE) ) ;velted
    	; Createing a color label with the icon as pseudo-button
        Local $idButton = GUICtrlCreateLabel($tx, $pX, $pY, $iW, $iH, $iBtnStyle)
    	GUICtrlSetTip(-1, "nice ico", "")
    	Local $hIcon = _WinAPI_ShellExtractIcon($sIconFileName, $IconIndex, 32, 32)
    	GUICtrlSendMsg(-1, $STM_SETICON, $hIcon, 0)
    	Return $idButton
    EndFunc
    
    Func GuiSubButtonCreate($hGUI, $strText, $xPos, $yPos, $bWidth, $bHight, $iconFile, $iconIndex, $iconSizeX, $iconSizeY, $iconXoff, $iconYoff, $initCol=0xf0f0f0)
    	Local $ctrlID = -1, $icon
    	Local $hChild = GUICreate("", $bWidth, $bHight, $xPos, $yPos, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
    	GUISwitch($hChild)
    	GUISetState(@SW_DISABLE, $hChild)
    	GUISetState(@SW_HIDE, $hChild)
    	$ctrlID = GUICtrlCreateLabel($strText, 0, 0, $bWidth, $bHight)
    	GUISetBkColor($initCol, $hChild)												;set state static
    	GUICtrlSetBkColor($ctrlID, $initCol)
    	$icon = GUICtrlCreateIcon($iconFile, $iconIndex, 0+$iconXoff, 0+$iconYoff, $iconSizeX, $iconSizeY, Default)
    	GUISetState(@SW_ENABLE, $hChild)
    	GUISetState(@SW_SHOW, $hChild)
    	Local $ret[2] = [$hChild, $ctrlID]
    	Return $ret
    EndFunc
    Func GuiSubButtonSet($aID, $col)
    	GUISetBkColor($col, $aID[0])
    	GUICtrlSetBkColor($aID[1], $col)
    	GUISetState(@SW_SHOW)
    EndFunc
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™