Aus DLL eingebunde Icons werden seltsam angezeigt

  • Hallo zusammen,

    habe folgendes Problem:
    Wie man auf dem angehängten Bild sehen kann, habe ich links ein orginal Icon eingebunden und rechts davon (die 0) ein Icon aus einer DLL. Seltsamerweise befindet sich jeweils im oberen und unteren Drittel ein unsichtbarer Strich, der an seinem Verlauf das Bild verschommen macht.
    Vermutlich ist es ein technichsches Problem, da ich in Reshack das Icon perfekt und ohne Schönheitsfehler sehen kann...

    Wäre schön, wenn jemand mir bei der Fehlersuche helfen kann :)

    LG FKFK

    Das Bild meiner GUI: autoit.de/wcf/attachment/8285/
    Die DLL (da keine DLLs erlaubt sind, musste ich sie umbennen): autoit.de/wcf/attachment/8286/

  • Hallo FKFK,
    ich meinte eigentlich, dass Du natürlich auch Dein Script einstellst.
    Es wird sich kaum einer die Mühe machen sich ein Script zu basteln, um dann Deine Icons einzubinden.
    Außerdem kann der Fehler durchaus auch im Aufruf der Icons liegen ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • So, hier ist das Script. Ich hoffe, es ist verständlich :)

    Beispiel-Anwendungsscript
    [autoit]

    #include <PINPad\PINPad.au3>
    ;AutoItSetOption("MustDeclareVars", 1)
    Opt("GUICoordMode", 1)
    _PIN_Win(-1, -1)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "", $_PIN)

    [/autoit]


    mein Script
    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include-once

    [/autoit] [autoit][/autoit] [autoit]

    ;Declares the PIN
    Global $_PIN

    [/autoit] [autoit][/autoit] [autoit]

    #Region GUI/Func
    Func _PIN_Win($left = -1, $top = -1, $timeout = "")
    If Not IsNumber($timeout) And Not $timeout == "" Or $timeout < 0 Then Return SetError(1, 0, 0)
    If $left < -1 Or $top < -1 Then Return SetError(1, 0, 0)
    Local $btn, $msg, $btn1, $btn2, $btn3, $btn4, $btn5, $btn6, $btn7, $btn8, $btn9, $btn0, $E, $OldCoord, $begin, $activate
    $activate = 1
    If $timeout == 0 Or $timeout == "" Then $activate = 0

    [/autoit] [autoit][/autoit] [autoit]

    $OldCoord = Opt("GUICoordMode", 0)

    [/autoit] [autoit][/autoit] [autoit]

    $_PIN = "" ;PIN beeing deleted
    $begin = TimerInit() ;the timer beeing started
    GUICreate("", 109.5, 148, $left, $top)
    ;Button1
    $btn1 = GUICtrlCreateButton("", -1, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B1")
    ;Button2
    $btn2 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B2")
    ;Button3
    $btn3 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B3")
    ;Button4
    $btn4 = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B4")
    ;Button5
    $btn5 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B5")
    ;Button6
    $btn6 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B6")
    ;Button7
    $btn7 = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B7")
    ;Button8
    $btn8 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B8")
    ;Button9
    $btn9 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B9")
    ;Button0
    $E = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "BE")
    ;E-Button
    $btn0 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B0")
    ;C-Button (OK-Button)
    $btn = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "BC")
    GUISetState()
    ;Check which buttons are pressed and react proportionally
    $msg = 0
    While 1
    $msg = GUIGetMsg()
    If $msg == $GUI_EVENT_CLOSE Then Exit
    Select
    Case $msg = $btn
    ExitLoop
    Case $msg = $btn1
    $_PIN &= 1
    Case $msg = $btn2
    $_PIN &= 2
    Case $msg = $btn3
    $_PIN &= 3
    Case $msg = $btn4
    $_PIN &= 4
    Case $msg = $btn5
    $_PIN &= 5
    Case $msg = $btn6
    $_PIN &= 6
    Case $msg = $btn7
    $_PIN &= 7
    Case $msg = $btn8
    $_PIN &= 8
    Case $msg = $btn9
    $_PIN &= 9
    Case $msg = $btn0
    $_PIN &= 0
    Case $msg = $E
    $_PIN = ""
    Case $timeout < TimerDiff($begin) And $activate == 1
    ExitLoop
    EndSelect
    WEnd
    GUIDelete()
    Opt("GUICoordMode", $OldCoord)
    EndFunc
    #EndRegion GUI/Func

    [/autoit]
  • Hi,

    bist du dir sicher, das Höhe und Breite auch zum Icon passen? Nicht das es gestreckt wird oder ähnliches.

    Mega

    Ja, ein "echtes" Icon, was nicht aus einer DLL stammt, kann wie auf meinem Screenshot, perfekt dargestellt werden.
    Das Problem sind nur die Icons, die aus DLLs stammen...
    Ich habe es auch schon mit genau den zu 100% gleichen getestet.

  • Ja, ein "echtes" Icon, was nicht aus einer DLL stammt, kann wie auf meinem Screenshot, perfekt dargestellt werden.
    Das Problem sind nur die Icons, die aus DLLs stammen...
    Ich habe es auch schon mit genau den zu 100% gleichen getestet.


    Du solltest die Icons in der DLL per Icon-Index und nicht mit dem Name ansprechen. Dann sollten sie richtig angezeigt werden.
    Außerdem musst du das Icon im Standardmaß 32x32 erstellen, sonst wird es verzerrt (zumindest quadratisch muss es sein)

  • OK, es hat daran gelegen, das die Icons nicht quadratisch waren. Vielen Dank :)

    Nun gibt es schonwieder ein andres Problem :(

    Es wird für alle Buttons immer die Taste 0 genutzt. Eventuell hat es damit etwas zu tun, dass sie in meiner DLL das erste Icon ist.
    Was ist eigentlich der Icon-Index?

    Hier nochmal der Code, den ich zum Aufruf genutzt habe:

    Spoiler anzeigen
    [autoit]

    ;Button1
    $btn1 = GUICtrlCreateButton("", -1, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B1")
    ;Button2
    $btn2 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B2")
    ;Button3
    $btn3 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B3")
    ;Button4
    $btn4 = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B4")
    ;Button5
    $btn5 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B5")
    ;Button6
    $btn6 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B6")
    ;Button7
    $btn7 = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B7")
    ;Button8
    $btn8 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B8")
    ;Button9
    $btn9 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B9")
    ;Button0
    $E = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "BE")
    ;E-Button
    $btn0 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "B0")
    ;C-Button (OK-Button)
    $btn = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @TempDir & "/Icons.dll", "BC")

    [/autoit]

    Wie gesagt: Die Icons werden jetzt richtig auf den Buttons dargestellt, aber leider immer nur der Gleiche...

    Und anbei die DLL (gif muss als Endung natürlich weggemacht werden): autoit.de/wcf/attachment/8300/

  • Hallo

    der Index ist eine neagtive Zahl von -1 bis Anzahl der Icons *-1.
    [-1] 1. Icon
    [-2] 2. Icon
    [-n] n. Icon

    Das Skript sieh dann so aus:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include-once

    [/autoit] [autoit][/autoit] [autoit]

    ;Declares the PIN
    _PIN_Win(-1,-1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $_PIN

    [/autoit] [autoit][/autoit] [autoit]

    #Region GUI\Func
    Func _PIN_Win($left = -1, $top = -1, $timeout = "")
    If Not IsNumber($timeout) And Not $timeout == "" Or $timeout < 0 Then Return SetError(1, 0, 0)
    If $left < -1 Or $top < -1 Then Return SetError(1, 0, 0)
    Local $btn, $msg, $btn1, $btn2, $btn3, $btn4, $btn5, $btn6, $btn7, $btn8, $btn9, $btn0, $E, $OldCoord, $begin, $activate
    $activate = 1
    If $timeout == 0 Or $timeout == "" Then $activate = 0

    [/autoit] [autoit][/autoit] [autoit]

    $OldCoord = Opt("GUICoordMode", 0)

    [/autoit] [autoit][/autoit] [autoit]

    $_PIN = "" ;PIN beeing deleted
    $begin = TimerInit() ;the timer beeing started
    GUICreate("", 138, 182, $left, $top)
    ;Button1
    $btn1 = GUICtrlCreateButton("", -1, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -2)
    ;Button2
    $btn2 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -3)
    ;Button3
    $btn3 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -4)
    ;Button4
    $btn4 = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -5)
    ;Button5
    $btn5 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -6)
    ;Button6
    $btn6 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -7)
    ;Button7
    $btn7 = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -8)
    ;Button8
    $btn8 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -9)
    ;Button9
    $btn9 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -10)
    ;Button0
    $E = GUICtrlCreateButton("", -74, 37, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -0)
    ;E-Button
    $btn0 = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -11)
    ;C-Button (OK-Button)
    $btn = GUICtrlCreateButton("", 37, -1, 37, 37, 0x0040)
    GUICtrlSetImage(-1, @ScriptDir & "\Icons.dll", -12)
    GUISetState()
    ;Check which buttons are pressed and react proportionally
    $msg = 0
    While 1
    $msg = GUIGetMsg()
    If $msg == $GUI_EVENT_CLOSE Then Exit
    Select
    Case $msg = $btn
    ExitLoop
    Case $msg = $btn1
    $_PIN &= 1
    Case $msg = $btn2
    $_PIN &= 2
    Case $msg = $btn3
    $_PIN &= 3
    Case $msg = $btn4
    $_PIN &= 4
    Case $msg = $btn5
    $_PIN &= 5
    Case $msg = $btn6
    $_PIN &= 6
    Case $msg = $btn7
    $_PIN &= 7
    Case $msg = $btn8
    $_PIN &= 8
    Case $msg = $btn9
    $_PIN &= 9
    Case $msg = $btn0
    $_PIN &= 0
    Case $msg = $E
    $_PIN = ""
    Case $timeout < TimerDiff($begin) And $activate == 1
    ExitLoop
    EndSelect
    WEnd
    GUIDelete()
    Opt("GUICoordMode", $OldCoord)
    EndFunc
    #EndRegion GUI/Func

    [/autoit]

    mfg (Auto)Bert

  • Juhu, vielen Dank!
    Jetzt klappt alles perfekt. Nochmals vielen Dank an euch allen. Werde dann bald die nächste Version veröffentlichen können :)