Mehrzeiliger Button mit mehreren Bildern drin

  • Hey, ich versuche grade irgendwie einen mehrzeiligen Button mit mehreren Bildern drin zu realisieren ;)...

    Am Besten geht das dann wohl mit Child-GUIs?! Aber habe damit noch nicht soviel gemacht und das dann mit OnEvent zu steuern und so ;)...
    Hatte auch erst dran gedacht, das in einem ListView zu machen, aber das auch nicht mehrzeilig hin bekommen...


    Würde mir da jemand ein Beispiel zu machen :D? Wäre super^^!...


    LG

    Einmal editiert, zuletzt von Acanis (2. August 2010 um 17:06)

  • Ehm, sorry, aber das Hilft mir gar nicht weiter... xD

    Hätte ich wohl gemacht, wenn das ne Lösung wäre Oo...

    Es soll so ca sein, wenns geht ->

    TEXT Text
    Bild - Text - Bild - Text - Bild - Text
    Bild - Text

  • Dann mach dir doch mit einem Bildbearbeitungsprogramm den Button als ein einziges Bild, ist ja wohl nicht so schwer und dann zeigt du es als Pic an und fertig

    mfg. Jam00

  • ...
    Was klar sein sollte, ist, dass sich die Daten verändern! -.-
    Warum wollt ihr mir das abschwatzen? Ich weiss genau, was ich brauche, kanns nur noch nicht so ganz umsetzen Oo...
    Wenn ich das mit einem Bild machen könnte, würde ich das doch wohl tun?! oO


    LG

  • Du meinst, auf einen Button drauf malen?...
    Ich kann ihn ja trotzdem nicht mehrzeilig machen...
    Bilder sind ja nicht DAS Problem, habe Beispiele gefunden, wie man die auf Buttons, ListViews, etc... setzt... Auf Child-GUIs ist es eh kein Problem...^^
    Nur die "Mehrzeilig"-keit bereitet mir Probleme, nur bei der Child-GUI nicht und da weiss ich nicht, wie ich das mache, dass die Child-GUI als Control funktioniert, also die KOMPLETTE, ohne ein Control zu "haben" und trotzdem die Main-GUI keine Einschränkungen hat...

    Ich möchte auch, dass man die GUI noch bewegen kann, dass der "Button" immer an der Stelle bleibt und verschiedene Werte(Bilder bleiben gleich) annehmen kann.


    LG

  • Wie wäres mal mit in der Hilfe gucken? ;)
    Ich hab nach 10 Sekunden das hier gefunden:

    [autoit]

    #include <ButtonConstants.au3>
    $hGUI = GUICreate("$BS_MULTILINE Beispiel", 408, 243, 192, 124)
    $Button1 = GUICtrlCreateButton("1.Zeile"&@CRLF&"2.Zeile", 128, 144, 169, 57, $BS_MULTILINE)
    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ah, okey, danke Oo... Muss ich übersehen haben^^... Mit CRLF habe ichs auch versucht und eig. auch alle Styles durchgeschaut, strange...^^
    Auf einen Button kriegt man aber nur ein Bild, oder? ;D Ein Hintergrundbild oder ein Icon...
    Soweit ich das gefunden habe...

    Ist also SUPER NICE TO KNOW, also danke, aber nicht das, was meine Lösung ist ;)...


    LG

  • Ich kann dir nicht ganz folgen ;D...
    Aaaaalso meinst du, ich kann mit GDI+ auf den Buttons zeichnen(geht ja überall drauf?!^^) und muss halt die Koords so genau nehmen, dass das genau zwischen Text passt, den ich bei den Buttons frei lasse?!...^^
    Wäre ne Idee...
    Zumal der Button nicht unbedingt eine "Druck-Animation" braucht...

    *grübel*
    Aber ich würde auch z.B. gerne verschiedene Fonts usw. auf einem Button nutzen können... Also wäre mir das mit ner Child-Lösung etwas "lieber" ;)...


    LG

  • Nein, wir meinen, dass du EIN Bild generierst, in dem sich alle Bilder und Texte die auf dein Button sollen befinden. Dann hast du ein fertiges Bild, das du nurnoch als verwenden musst.

  • Die Texte ändern sich aber, auch auf dem Button selber ab und an... Und kann vorher nicht festlegen, was da mal steht...^^


    LG

  • Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

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

    Local $sName, $sNachname, $sInfos
    Local $hGraphics, $hBitmap, $hBuffer
    Local $hExtraPic

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

    $hGUI = GUICreate("", 400, 190)
    $cName = GUICtrlCreateInput("Name", 20, 20, 200, 20)
    $cNachname = GUICtrlCreateInput("Nachname", 20, 50, 200, 20)
    $cInfos = GUICtrlCreateInput("Infos", 20, 80, 200, 20)

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

    $cEintragen = GUICtrlCreateButton("Bild auf den Button", 20, 110, 200, 60)
    $cZielButton = GUICtrlCreateButton("", 230, 20, 150, 150,0x0080)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cEintragen
    $sName = GUICtrlRead($cName)
    $sNachname = GUICtrlRead($cNachname)
    $sInfos = GUICtrlRead($cInfos)

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

    ;~ Wir erstellen jetzt zuerstmal die Bitmap, in der wir "zeichnen" werden.
    ;~ Danach laden wir das Bild, oder die Bilder wenn du mehrere willst, in den Speicher.

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(130, 130, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    $hExtraPic = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Briefcase-32x32.png")

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

    ;~ Jetzt zeichnen wir ganz normal ein Bild, das später auf den Button kommt.
    _GDIPlus_GraphicsClear($hBuffer,0xFFFFFFFF)
    _GDIPlus_GraphicsDrawString($hBuffer, $sName, 5, 5)
    _GDIPlus_GraphicsDrawString($hBuffer, $sNachname, 5, 35)
    _GDIPlus_GraphicsDrawString($hBuffer, $sInfos, 5, 105)
    _GDIPlus_GraphicsDrawImage($hBuffer, $hExtraPic, Random(20,70,1), 55)

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

    ;~ Und speichern das, um es auf den Button zu setzen

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

    _GDIPlus_ImageSaveToFile($hBitmap, @TempDir & "\~buttonpic.bmp")

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

    _GDIPlus_ImageDispose($hExtraPic)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()

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

    GUICtrlSetImage($cZielButton, @TempDir & "\~buttonpic.bmp")

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

    EndSwitch
    WEnd

    [/autoit]
  • Also schau Dir einfach mal nachfolgende Beispiele an.

    Ich habe die Bilder und die Scripte in der Anlage beigefügt.

    Bsp. 1 ; ganz einfach:

    Spoiler anzeigen
    [autoit]


    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>

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

    $1 = "1.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden
    $2 = "2.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden
    $3 = "3.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden
    $4 = "4.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden

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

    $BspGUI = GUICreate("Beispiel", 500, 100, 193, 125)
    $Pic1 = GUICtrlCreatePic("E:\1.jpg", 0, 0, 100, 100)
    $Button1 = GUICtrlCreateButton($1 &@CRLF& $2, 120, 25, 60, 50, $BS_MULTILINE)
    GUICtrlSetFont(-1, 6, 400, 0, "MS Sans Serif")
    $Pic2 = GUICtrlCreatePic("E:\2.jpg", 201, 0, 100, 100)
    $Button1 = GUICtrlCreateButton($3 &@CRLF& $4, 320, 25, 60, 50, $BS_MULTILINE)
    GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
    $Pic3 = GUICtrlCreatePic("E:\3.jpg", 400, 0, 100, 100)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    EndSwitch
    WEnd

    [/autoit]

    Bsp. 2 ; normal mit transparentem Button:

    Spoiler anzeigen
    [autoit]


    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>

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

    $1 = "1.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden
    $2 = "2.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden

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

    $BspGUI = GUICreate("Beispiel", 300, 100)
    $Pic1 = GUICtrlCreatePic("E:\1.jpg", 0, 0, 100, 100)
    $Button1 = GUICtrlCreateButton($1 &@CRLF& $2, 10, 10, 80, 80, $BS_MULTILINE)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    _GuiCtrlMakeTrans(-1) ; hiermit geht es auch durchsichtig !!!!
    $Pic2 = GUICtrlCreatePic("E:\2.jpg", 196, 0, 105, 103)
    GUICtrlSetFont(-1, 24, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    EndSwitch
    WEnd

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

    ; Funktion von: http://www.autoitscript.com/forum/index.ph…36&#entry533136
    Func _GuiCtrlMakeTrans($iCtrlID,$iTrans=125)

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

    Local $pHwnd, $nHwnd, $aPos, $a

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

    $hWnd = GUICtrlGetHandle($iCtrlID);Get the control handle
    If $hWnd = 0 then Return SetError(1,1,0)
    $pHwnd = DllCall("User32.dll", "hwnd", "GetParent", "hwnd", $hWnd);Get the parent Gui Handle
    If $pHwnd[0] = 0 then Return SetError(1,2,0)
    $aPos = ControlGetPos($pHwnd[0],"",$hWnd);Get the current pos of the control
    If @error then Return SetError(1,3,0)
    $nHwnd = GUICreate("", $aPos[2], $aPos[3], $aPos[0], $aPos[1], 0x80000000, 0x00080000 + 0x00000040, $pHwnd[0]);greate a gui in the position of the control
    If $nHwnd = 0 then Return SetError(1,4,0)
    $a = DllCall("User32.dll", "hwnd", "SetParent", "hwnd", $hWnd, "hwnd", $nHwnd);change the parent of the control to the new gui
    If $a[0] = 0 then Return SetError(1,5,0)
    If NOT ControlMove($nHwnd,'',$hWnd,0,0) then Return SetError(1,6,-1);Move the control to 0,0 of the newly created child gui
    GUISetState(@SW_Show,$nHwnd);show the new child gui
    WinSetTrans($nHwnd,"",$iTrans);set the transparency
    If @error then Return SetError(1,7,0)
    GUISwitch($pHwnd[0]);switch back to the parent Gui

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

    Return $nHwnd;Return the handle for the new Child gui

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

    EndFunc

    [/autoit]

    Bsp. 3 ; sehenswert zum Verständnis:

    Spoiler anzeigen
    [autoit]


    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>

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

    $1 = "1.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden
    $2 = "2.Zeile" ; Wert kann ja auch aus einer Datei gelesen werden

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

    $BspGUI = GUICreate("Beispiel", 300, 100)
    $Pic1 = GUICtrlCreatePic("E:\1.jpg", 0, 0, 100, 100)
    $Button1 = GUICtrlCreateButton($1 &@CRLF& $2, 50, 10, 80, 80, $BS_MULTILINE)
    GUICtrlSetFont(-1, 12, 400, 1, "MS Sans Serif")
    _GuiCtrlMakeTrans(-1,200) ; hiermit geht es auch durchsichtig !!!! 200 gleich der "Transwert"
    $Pic2 = GUICtrlCreatePic("E:\2.jpg", 196, 0, 105, 103)
    GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    EndSwitch
    WEnd

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

    ; Funktion von: http://www.autoitscript.com/forum/index.ph…36&#entry533136
    Func _GuiCtrlMakeTrans($iCtrlID,$iTrans)

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

    Local $pHwnd, $nHwnd, $aPos, $a

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

    $hWnd = GUICtrlGetHandle($iCtrlID);Get the control handle
    If $hWnd = 0 then Return SetError(1,1,0)
    $pHwnd = DllCall("User32.dll", "hwnd", "GetParent", "hwnd", $hWnd);Get the parent Gui Handle
    If $pHwnd[0] = 0 then Return SetError(1,2,0)
    $aPos = ControlGetPos($pHwnd[0],"",$hWnd);Get the current pos of the control
    If @error then Return SetError(1,3,0)
    $nHwnd = GUICreate("", $aPos[2], $aPos[3], $aPos[0], $aPos[1], 0x80000000, 0x00080000 + 0x00000040, $pHwnd[0]);greate a gui in the position of the control
    If $nHwnd = 0 then Return SetError(1,4,0)
    $a = DllCall("User32.dll", "hwnd", "SetParent", "hwnd", $hWnd, "hwnd", $nHwnd);change the parent of the control to the new gui
    If $a[0] = 0 then Return SetError(1,5,0)
    If NOT ControlMove($nHwnd,'',$hWnd,0,0) then Return SetError(1,6,-1);Move the control to 0,0 of the newly created child gui
    GUISetState(@SW_Show,$nHwnd);show the new child gui
    WinSetTrans($nHwnd,"",$iTrans);set the transparency
    If @error then Return SetError(1,7,0)
    GUISwitch($pHwnd[0]);switch back to the parent Gui

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

    Return $nHwnd;Return the handle for the new Child gui

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

    EndFunc

    [/autoit]

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Danke schon mal, Seu, ich schau mir das noch an, Alina, habe deins mal getestet...
    ( wobei ich natürlich noch den Pfad ändern musste ;)... -> @ScriptDir & ;) )

    Klappt aber leider nicht, was du gepostet hast Oo...
    Die Bilder sind ja HINTER dem Button, was ich gar nicht wollte...
    Die "Zeile 1" etc. die auf den Button sollen... Da postet er mir nur den Pfad, als String, kein Bild...
    Da kann man/ich keine Datei anhängen...


    LG


    *edit*
    SEuBo: Klappt auch nicht bei mir xD... Irgendwie zeichnet er nur "weiß" auf den Button, mit der Schrift drüber noch...
    Und wenn man

    [autoit]

    GUICtrlSetImage($cZielButton, @TempDir & "\~buttonpic.bmp")

    [/autoit]

    nutzt, dann wird das doch eh nur der Hintergrund des Buttons, oder? Es sollen ja mehrere kleine Bilder auf EINEN Button...


    LG

    Einmal editiert, zuletzt von Acanis (2. August 2010 um 06:01)


  • Warum das bitte? Oo
    Steht nichts dagegen in den Regeln und das sind doch sehr differenzierte Communitys.
    Schade ich damit jemandem? Oo Wenn ich hier ne Lösung finde, poste ich die auch dort, wenn dort, dann hier...
    Das "hilft" beiden Communitys, da die Antwort bei beiden zu finden ist, wenn jemand anderes sie sucht.
    Und ich habe eine größere Chance auf Hilfe ;). Im engl. Forum wartet man immer EWIG, wenn überhaupt ne Antwort zur allgemeinen Hilfe kommt(bei UDFs läufts da besser) und hier, ja...

    Ich war vielleicht etwas ungeduldig :p... Und dachte, dass es dort vielleicht eher ne UDF zu so etwas gibt(da gibts ja fast alles als UDF...^^)
    Tut mir leid, wenn ich damit gegen irgendjemandes Moral verstoßen habe, kann für mich aber keinen Fehler dabei erkennen.

    LG

    • Offizieller Beitrag

    Es geht schlicht und einfach darum, dass in zwei Foren sich Leute Gedanken machen ohne zu wissen, dass dieselbe Frage bereits gestellt wurde.
    Es ist ein Gebot der Höflichkeit den anderen mitzuteilen: "..ich habe bereits hier (Link) diese Frage gestellt.."
    Dann werden doppelte Antworten vermieden.

  • Alles klar, danke ;)... Verstanden, gemerkt und wird nächstes Mal umgesetzt^^... (wobei allg. Fragen im engl. Forum wirklich keinen Sinn zu machen scheinen Oo)
    Falls das wieder vor kommt, poste ich den Link.
    Kann mich nur höflichst dafür entschuldigen, wenn ich dir damit auf die Füße getreten bin.


    LG