Gui | Link | gif | Position

  • Hey, ich habe hier 2 Fragen zum Thema Gui.

    1. Wie kann ich ein Link machen, sodass er anklickbar ist?
    2. Wie kann ich ein animiertes Gif einfügen?
    Mit CtreatePic geht es nicht, erlaubt nur .gif welche nicht animiert sind.

    //Edit
    3. Wie kann ich einstellen, dass es immer am Rand des Bildschirmes ist?
    Daher, ich mach ein Gui mit der grösse 100*100 und will es immer unten rechts im Ecken.

    Greetz
    Fr34k

  • zu 1) du könntest on event mode benutzen

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    GUICreate("Mein GUI",100,100,@DesktopWidth - 100, @DesktopHeight - 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    $label = GUICtrlCreateLabel("Klick mich", 10, 30) ; Erste Zelle, Breite 80
    GUICtrlSetOnEvent($label, "LabelKlick")

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

    GUISetState() ; Zeigt eine leere Dialogbox an

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

    ; GUI starten, bis der Dialog beendet wird
    While 1
    Sleep(1000) ; Im Leerlauf bummeln
    WEnd

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

    Func LabelKlick()
    ;Beachte: an diesem Punkt wäre @GUI_CTRLID gleich $okbutton,
    ;und @GUI_WINHANDLE wäre gleich $mainwindow
    MsgBox(0, "GUI Event", "Du hast auf das Label geklickt geklickt!")
    EndFunc

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

    Func CLOSEClicked()
    Exit
    EndFunc

    [/autoit]

    2) ka^^

    3) meinst du das was im oberen bsb zu sehen is? so ca.. musst nur noch den rahmen beachten

    EDIT:
    zu 2.)
    vllt hilft dir das hier

    Einmal editiert, zuletzt von Kijan (23. November 2010 um 11:24)

  • 1. Ok, werde ich damit machen :D
    2. ... Werds mir anschauen.. :D
    3. Öhm, und wie mache ich das?^^
    Ich will immer genau über der Taskbar sein...

    Edit: Habe vergessen mich bei dir zu bedanken ;D
    Edit2: Nope, 2. hilft mir nix...

    Lg

    Einmal editiert, zuletzt von Fr34k (23. November 2010 um 11:33)

  • Spoiler anzeigen
    [autoit]

    GUICreate("Mein GUI","Breite","Höhe","Linker Rand", "Oberer Rand")
    @DesktopWidth Breite des Desktops
    @DesktopHeight Höhe des Desktops

    [/autoit]

    als linker Rand nimmste dann die Desktopbreite minus deine Fensterbreite und den Ramen solltest auch mit einbeziehen
    als oberer Rand nimmste die Desktophöhe minus Fensterhöhe und Rahmen

  • Welcher Rand?!
    Die Taskbar?
    Wie erkenne ich, ob die Taskbar vorhanden ist, bzw. wie erkenne ich wie gross diese ist?

    Greetz

  • ich meinte den rand deines guis^^ das sind 5 pixel glaub
    und dann die Taskbar von 50 pixel zumindest bei mir
    macht dann
    GUICreate("Mein GUI",100,100,@DesktopWidth - 105, @DesktopHeight - 155)
    aber wie du feststellst ob die taskbar da is weis ich nit

  • Hi,
    1)
    Ich hab dir mal folgendes gemacht.

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)
    Global $Setted
    $hGUI = GUICreate("", 633, 454, -1, -1)
    GUISetOnEvent(-3, "_Exit")
    $Label = GUICtrlCreateLabel("Klick", 128, 144,30, 17)
    GUICtrlSetFont($Label, 10,400)
    GUICtrlSetOnEvent($Label,"Label")
    GUISetState(@SW_SHOW)

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

    While 1
    $aInfo = GUIGetCursorInfo($hGUI)
    If UBound($aInfo) < 5 Then ContinueLoop
    If $Setted = $aInfo[4] Then ContinueLoop
    If $aInfo[4] = $Label Then
    GUICtrlSetFont($Label, 10, 400, 4)
    GUICtrlSetColor($Label, 0x0000FF)
    $Setted = $aInfo[4]
    Else

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

    GUICtrlSetFont($Label, 10, 400, 0)
    GUICtrlSetColor($Label, 0x000000)
    $Setted = $aInfo[4]
    EndIf
    WEnd

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

    Func Label()
    MsgBox(0, "", "Hallo Welt")
    EndFunc ;==>Label

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    2) Dafür gibt es folgende Funktion

    Spoiler anzeigen
    [autoit]

    Func GuiCtrlCreateGif($pic_dir, $left, $up, $right, $down, $border = 0)
    $oIE = ObjCreate("Shell.Explorer.2")
    GUICtrlCreateObj($oIE, $left, $up, $right, $down)
    $oIE.navigate ("about:blank")
    $oIE.document.body.style.border = $border&"px"
    $oIE.document.body.background = $pic_dir
    $oIE.document.body.scroll = "no"
    EndFunc

    [/autoit]


    3)
    So ist das GUI an der Seite

    [autoit]

    $GuiBreite = 500
    $GuiHoehe = 500
    GUICreate("TestGUI", $GuiBreite, $GuiHoehe, @DesktopWidth - $GuiBreite)
    GUISetState(@SW_SHOW)
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • @Sprenger
    zu 3.)
    so hast du aber wie ich schon gesagt habe den Rand nicht berücksichtigt.
    Sprich dein rand ist auserhalb des Bildes.
    Da dein Fenster nich 500 groß ist sondern deine Fläche, die du bearbeiten kannst.
    Enthalten ist dort nicht die Titelleiste und der Rahmen und schon gar nicht die Taskbar.

    Das kannste im folgenden Bsp sehen.

    Spoiler anzeigen
    [autoit]

    $GuiBreite = 500
    $GuiHoehe = 500
    GUICreate("TestGUI", $GuiBreite, $GuiHoehe, @DesktopWidth - $GuiBreite, @DesktopHeight - 500)
    GUICtrlCreateLabel("Siehst du mich?", 10, 480)
    GUISetState(@SW_SHOW)
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Ja genau, und dies ist ja auch das Problem... Wie löse ich das denn nun?!
    Ich will es immer am Bildschirmrand unten, aber oberhalb der Taskbar.

    Lg

  • Konnte es nur unter XP testen, schau mal ob's geht.

    Spoiler anzeigen
    [autoit]

    #Include <WinAPI.au3>

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

    $SPI_GETWORKAREA = 0x0030
    $SM_CXFRAME = 32
    $SM_CYFRAME = 33
    $SM_CYCAPTION = 4

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

    $Rect = DllStructCreate("uint[4]")
    _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($Rect))

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

    $Frame_H = _WinAPI_GetSystemMetrics($SM_CXFRAME)
    $Frame_W = _WinAPI_GetSystemMetrics($SM_CYFRAME)
    $WorkArea_H = DllStructGetData($Rect, 1, 4)
    $WorkArea_W = DllStructGetData($Rect, 1, 3)
    $Caption_H = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
    $Gui_H = 500
    $Gui_W = 500
    GUICreate("TestGUI", $Gui_W, $Gui_H, $WorkArea_W - $Gui_W - $Frame_W, $WorkArea_H - $Gui_H - $Frame_H - $Caption_H)
    GUICtrlCreateLabel("Siehst du mich?", 10, 480)
    GUISetState(@SW_SHOW)
    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Lg

  • Shit, doch nicht -.-
    Dein Beispiel funktioniert... nur nicht in meinem File...


    [autoit]


    #Include <WinAPI.au3>

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

    #region
    $SPI_GETWORKAREA = 0x0030
    $SM_CXFRAME = 32
    $SM_CYFRAME = 33
    $SM_CYCAPTION = 4

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

    $Rect = DllStructCreate("uint[4]")
    _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($Rect))

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

    $Frame_H = _WinAPI_GetSystemMetrics($SM_CXFRAME)
    $Frame_W = _WinAPI_GetSystemMetrics($SM_CYFRAME)
    $WorkArea_H = DllStructGetData($Rect, 1, 4)
    $WorkArea_W = DllStructGetData($Rect, 1, 3)
    $Caption_H = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
    #endregion

    [/autoit]

    Fehler

    Code
    12) : ==> Cannot assign values to constants.:
    $SM_CXFRAME = 32
    ^ ERROR
    >Exit code: 1    Time: 0.538

    Nun, warum?^^

  • Ich hätte die Variablen mal noch Deklarieren können^^

    [autoit]

    #Include <WinAPI.au3>

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

    #region
    Global Const $SPI_GETWORKAREA = 0x0030
    Global Const $SM_CXFRAME = 32
    Global Const $SM_CYFRAME = 33
    Global Const $SM_CYCAPTION = 4

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

    Global $Rect = DllStructCreate("uint[4]")
    _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($Rect))

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

    Global $Frame_H = _WinAPI_GetSystemMetrics($SM_CXFRAME)
    Global $Frame_W = _WinAPI_GetSystemMetrics($SM_CYFRAME)
    Global $WorkArea_H = DllStructGetData($Rect, 1, 4)
    Global $WorkArea_W = DllStructGetData($Rect, 1, 3)
    Global $Caption_H = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
    #endregion

    [/autoit]
  • Nope, liegt ned an dem... hätte auch ned viel sinn gemacht, denn bei deinem Script läuft es...

    Wenn ich deinen neuen Code nehme

    Code
    ==> Can not redeclare a constant.:
    Global Const $SM_CXFRAME = 32
    Global Const ^ ERROR
    >Exit code: 1    Time: 0.650

    //Edit
    Hmmm, kann es sen dass es an den restlichen Includes liegt?!

  • Hi Fr34k

    die Fehlermeldung besagt, das die Variable

    [autoit]

    $SM_CXFRAME

    [/autoit]

    bereits vorher schon mit

    [autoit]

    Global Const $SM_CXFRAME

    [/autoit]

    Deklariert wurde!
    Da es sich um eine Konstante

    [autoit]

    Const

    [/autoit]

    handelt, kann man der Variablen NUR einmal einen Wert zuweisen.
    Versuchst du es dann nochmal, dann kommt diese Fehlermeldung ;)

    Lösung:
    Deine Zeile auskommentieren, und nachschauen welchen Wert

    [autoit]

    $SM_CXFRAME

    [/autoit]

    überhaupt hat.

    [Edit]
    Zu langsam... :(