Hallo,
gibt es eine Möglichkeit einen Hyperlink (z.B. zur Webseite) in der Statusleiste zu plazieren?
Gruß Gremlin
Hallo,
gibt es eine Möglichkeit einen Hyperlink (z.B. zur Webseite) in der Statusleiste zu plazieren?
Gruß Gremlin
Ja, in der UDF zur Statusbar findest du einen Befehl (EmbedCtrl oder ähnlich). Da bettest du ein Richtext-Ctrl ein, dann kannst du einen echten Link mit entsprechender Darstellung und Verhalten anzeigen.
In einer echten Statusbar ist mir keine Möglichkeit bekannt. Hier aber ein LookLike Workaround:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <StaticConstants.au3>
#include <Date.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <GuiListView.au3>
#include <ListviewConstants.au3>
#include<Easter.au3>
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Global $iColHover=0xAA0000, $iColNormal=0x000000,$iOldHovered=0
Global $aHover[1]
Global $hlstvwHoly = 0
Global $sTitel = 'Beispiele zur Nutzung der UDF _Easter'
Local $hMainGui = GUICreate($sTitel, 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $hMainGui gespeichert
;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PDOWN')
;Verknüpft dem Event $Gui_Event_Close mit der Funktion _End
;Local $hedtYear = GUICtrlCreateInput("", 10, 10, 200, 25, $ES_NUMBER)
;Die Eingabe wird für das zuletzt erstellte Steuerelement auf 4 Zeichen begrenzt
;diese Schreibweise ist auch zulässig: GUICtrlSetLimit($hedtYear, 4)
;GUICtrlSetLimit(-1, 4)
;erzeugt ein Input Steuerelement die zurückgegebe ID wird in der Variablen $hedtYear gespeichert
;es sind nur Zahlen für die Eingabe zugelassen
Local $hedtYear = GUICtrlCreateDate(@YEAR, 110, 10, 90, 25, $DTS_UPDOWN)
;erzeugt ein Date Steuerelement die zurückgegebene ID wird in der Variablen $hedtYear gespeichert
GUICtrlSetFont(-1, 12)
Local $DTM_SETFORMAT_ = 0x1032
Local $style = "yyyy"
GUICtrlSendMsg($hedtYear, $DTM_SETFORMAT_, 0, $style)
;es werde nur Jahreszahlen für die Eingabe angezeigt zugelassen 1752 - 9999
;GUICtrlSetTip($hedtYear, "bitte Jahreszahl nach 1582 eingeben")
;setzt den Tooltip für das InputField
;_getHolyDay (eine vom Skript benutzte UserDefinedFunction funktioniert erst ab dem Jahr 1000
;ab 1583 sind die Rückgabe-Werte auch sinvoll (Kalenderreform in 1582)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
;verankert das Inputfield Links, rechts, oben und fixiert die Höhe
;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite
GUICtrlCreateButton('&zeigen (eigenes Fenster)', 220, 10, 150, 25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
;verankert den Button "Zeigen" rechts und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
GUICtrlSetOnEvent(-1, '_CallEaster')
;Beim Klicken des Buttons wird die Funktion _CallEaster aufgerufen
Local $hlblErgebnis = GUICtrlCreateLabel("hier steht danach das Ergebnis", 12, 50, 200)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
;verankert das Label links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
GUICtrlCreateButton('&berechnen (Label links)', 220, 45, 150, 25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
;verankert den Button "Zeigen" rechts oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
GUICtrlSetOnEvent(-1, '_CallEasterQ')
GUICtrlCreateButton('&in ListView', 220, 80, 150, 25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
GUICtrlSetOnEvent(-1, '_CallEasterA')
GUICtrlCreateButton('Be&enden', 220, 115, 150, 25)
GUICtrlSetOnEvent(-1, '_END')
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
$hlstvwHoly = GUICtrlCreateListView("Feiertag | Datum ", 12, 80, 200, 140, $LVS_REPORT, $LVS_EX_GRIDLINES)
GUICtrlSetResizing($hlstvwHoly, $GUI_DOCKBORDERS)
;verankert das Listview per Namen an allen Ecken, alle Größenänderungen
;der Abstand nach Links,rechts,oben und unten bleibt immer gleich
GUICtrlSetState($hlstvwHoly, $GUI_HIDE + $GUI_DISABLE)
GUICtrlCreateGraphic(0, 230, 400, 2, $SS_BLACKRECT)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM)
Global $hStatus = GUICtrlCreateLabel("https://autoit.de/index.php/Thread/84607-Link-in-Statusbar/?postID=676895#post676895", 5, 235, 400, 25)
GUICtrlSetOnEvent(-1, '_WWW')
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM)
;verankert das Label Links, rechts und unten; fixiert die Höhe
;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite wird angepasst
GUISetState()
$aHover[0]=$hStatus
While 1
_IsWWW()
Sleep(120)
WEnd
Func _www()
ShellExecute(GUICtrlRead($hStatus))
EndFunc
Func _End()
GUIDelete($hMainGui)
Exit
EndFunc ;==>_End
Func _CallEaster()
Local $iYear, $iDay
GUICtrlSetState($hlstvwHoly, $GUI_HIDE + $GUI_DISABLE)
;if $hlstvwHoly<>0 Then
; GUICtrlDelete($hlstvwHoly)
; $hlstvwHoly=0
;EndIf
$iYear = GUICtrlRead($hedtYear)
If $iYear = "" Then $iYear = "0"
If $iYear < 1582 Then
GUICtrlSetData($hlblErgebnis, "")
GUICtrlSetData($hStatus, "Das Jahr muss größer als 1582 sein! (Kalenderreform)")
Return ;_getHolyDay liefert vorher immer den gleichen Wert , ab 1583 sind die Werte auch sinnvoll
EndIf
GUICtrlSetData($hStatus, "")
$iDay = _Easter($iYear, False, 'Osterberechnung für Jahr: ' & $iYear, $hMainGui, $WS_VSCROLL)
;zeigt die eingebaut GUI in :Easter
GUICtrlSetData($hlblErgebnis, "Ostersonntag ist der " & $iDay & ".Tag im Jahr " & $iYear)
;$hlblErgebnis wird upgedatet
Opt('GuiEventOptions', 1)
EndFunc ;==>_CallEaster
Func _CallEasterQ()
Local $iOS, $iYear
GUICtrlSetState($hlstvwHoly, $GUI_HIDE + $GUI_DISABLE)
;if $hlstvwHoly<>0 Then
; GUICtrlDelete($hlstvwHoly)
; $hlstvwHoly=0
;EndIf
$iYear = GUICtrlRead($hedtYear)
If $iYear = "" Then $iYear = "0"
If $iYear = "" Then $iYear = "0"
$iOS = _Easter($iYear, '' & $iYear, True)
;ruft nur die Anzahl der Tage (1.Jan =1) ab und speichert weist diese der Variablen $iOS zu
GUICtrlSetData($hlblErgebnis, "Ostersonntag ist der " & $iOS & ".Tag im Jahr " & $iYear)
;dem Steuerelement mit der ID:$hlblErgebnis wird der Wert der Variablen $iOS zugewiesen
If $iYear < 1582 Then GUICtrlSetData($hStatus, "Der Tag entspricht unserem heutigen Kalender!")
EndFunc ;==>_CallEasterQ
Func _CallEasterA()
Local $iOS, $iYear
$iYear = GUICtrlRead($hedtYear)
If $iYear = "" Then $iYear = "0"
If $iYear < 1582 Then
GUICtrlSetData($hlblErgebnis, "")
GUICtrlSetData($hStatus, "Das Jahr muss größer als 1582 sein! (Kalenderreform)")
Return ;_getHolyDay liefert vorher immer den gleichen Wert , ab 1583 sind die Werte auch sinnvoll
EndIf
GUICtrlSetData($hStatus, "")
;$hlstvwHoly=GUICtrlCreateListView("Feiertag | Datum ",5, 75, 200, 200)
;GUICtrlSetResizing($hlstvwHoly, $GUI_DOCKBORDERS)
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($hlstvwHoly))
;alle Einträhe im ListView werden gelöscht
GUICtrlSetState($hlstvwHoly, $GUI_SHOW + $GUI_ENABLE)
$iOS = _Easter($iYear, 'Osterberechnung für Jahr: ' & $iYear, True)
;ruft nur die Tageszahl ab
GUICtrlSetData($hlblErgebnis, "Ostersonntag ist der " & $iOS & ".Tag im Jahr " & $iYear)
GUICtrlCreateListViewItem(_getHolyday("Karfreitag:|", $iOS - 2, $iYear), $hlstvwHoly)
;fügt der Listview di mit Hilfe der in $hlstvwHoly gesoeicherten ID angesprochen werden kann
;mit dem zurückgegbenen Wert von _getHolyday($sHT,$iDate,$iYear) einen Listeneintrag hinzu
;der Separator ist kann in $sHT entahlten sein, wenn nicht wird er angehängt
GUICtrlCreateListViewItem(_getHolyday("Ostersamstag:|", $iOS - 1, $iYear), $hlstvwHoly)
GUICtrlCreateListViewItem(_getHolyday("Ostersontag:|", $iOS, $iYear), $hlstvwHoly)
GUICtrlCreateListViewItem(_getHolyday("Ostermontag:|", $iOS + 1, $iYear), $hlstvwHoly)
GUICtrlCreateListViewItem(_getHolyday("Christi Himmelfahrt:|", $iOS + 39, $iYear), $hlstvwHoly)
GUICtrlCreateListViewItem(_getHolyday("Pfingstsonntag:|", $iOS + 49, $iYear), $hlstvwHoly)
GUICtrlCreateListViewItem(_getHolyday("Pfingstmontag:|", $iOS + 50, $iYear), $hlstvwHoly)
GUICtrlCreateListViewItem(_getHolyday("Fronleichnam:|", $iOS + 60, $iYear), $hlstvwHoly)
EndFunc ;==>_CallEasterA
Func _IsWWW()
Local $aInfo = GUIGetCursorInfo()
If @error Then Return
GUICtrlSetColor($iOldHovered,$iColNormal)
GUICtrlSetFont($hStatus,12,400,0)
if _ArraySearch($aHover,$aInfo[4]) =-1 Then Return
;If $aInfo[4] = $iOldHovered Then Return
GUICtrlSetColor($aInfo[4],$iColHover)
GUICtrlSetFont($aInfo[4],12,400,4)
$iOldHovered=$aInfo[4]
EndFunc ;==>_IsWWW
Alles anzeigen
Achtung: Easter.au3 wird benötigt. Nur für dieses Skript, interessant für dich sind die Zeilen 20-21, 86-89, 95, 98, 102-104 und 181-191.
In einer echten Statusbar ist mir keine Möglichkeit bekannt.
Ich hatte es doch beschrieben. So wirds gemacht:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <GuiRichEdit.au3>
Global $g_hRichEdit
Example()
Func Example()
Local $hGUI, $idInputUrl, $idSetUrl, $hStatus, $sRead
Local $aParts[3] = [80, 160, -1]
; Create GUI
$hGUI = GUICreate("StatusBar Embed Control", 400, 300)
$idInputUrl = GUICtrlCreateInput('', 10, 10, 345, 20)
GUICtrlSendMsg($idInputUrl, 0x1501, 1, 'Url hier eintragen')
$idSetUrl = GUICtrlCreateButton('Set', 360, 10, 30, 20)
; defaults to 1 part, no text
$hStatus = _GUICtrlStatusBar_Create($hGUI)
_GUICtrlStatusBar_SetMinHeight($hStatus, 20)
GUISetState(@SW_SHOW)
; Initialize parts
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
_GUICtrlStatusBar_SetText($hStatus, "Part 1")
_GUICtrlStatusBar_SetText($hStatus, "Part 2", 1)
; Embed a Richedit
$g_hRichEdit = _GUICtrlRichEdit_Create($hGui, '', 0, 0, -1, -1)
_GUICtrlRichEdit_SetParaAlignment($g_hRichEdit, 'c')
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
_GUICtrlRichEdit_SetEventMask($g_hRichEdit, $ENM_LINK)
_GUICtrlRichEdit_AutoDetectURL($g_hRichEdit, True)
_GUICtrlStatusBar_EmbedControl($hStatus, 2, $g_hRichEdit)
; Loop until the user exits.
While 1
Switch GUIGetMsg()
Case -3
ExitLoop
Case $idSetUrl
$sRead = GUICtrlRead($idInputUrl)
If $sRead <> '' Then
_GUICtrlRichEdit_SetText($g_hRichEdit, $sRead)
EndIf
EndSwitch
WEnd
GUIDelete()
EndFunc ;==>Example
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $iCode, $tNMHDR, $tEnLink, $iCpMin, $iCpMax, $tMsgFilter
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $g_hRichEdit
Select
Case $iCode = $EN_LINK
$tMsgFilter = DllStructCreate($tagMSGFILTER, $lParam)
If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
$tEnLink = DllStructCreate($tagENLINK, $lParam)
$iCpMin = DllStructGetData($tEnLink, "cpMin")
$iCpMax = DllStructGetData($tEnLink, "cpMax")
ShellExecute(_GUICtrlRichEdit_GetTextInRange($g_hRichEdit, $iCpMin, $iCpMax))
EndIf
EndSelect
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Alles anzeigen
Edit: Ein #Include fehlte - ergänzt.
Ich hatte es doch beschrieben.
Îch hatte angefangen zu antworten, dachte eigentlich ein einfaches Label als embeded Control würde genügen. Ein lauffähiges Beispiel hat aber leider nicht geklappt. Dann habe ich mein 1. Skript genommen und dort die "Statusbar" abgeändert. Nach dem Posten habe ich dann erst deinen Beitrag gesehen. Hab deine Lösung gerade getestet und bekomme diese Fehlermeldungen:
>Running AU3Check (3.3.14.2) from:C:\Program Files\AutoIt3 input:C:\Users\Bert\AutoIt3.My\Temp\temp.au3
"C:\Users\Bert\AutoIt3.My\Temp\temp.au3"(33,27) : warning: $WM_NOTIFY: possibly used before declaration.
GUIRegisterMsg($WM_NOTIFY,
~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\Bert\AutoIt3.My\Temp\temp.au3"(65,77) : warning: $WM_LBUTTONUP: possibly used before declaration.
If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\Bert\AutoIt3.My\Temp\temp.au3"(33,27) : error: $WM_NOTIFY: undeclared global variable.
GUIRegisterMsg($WM_NOTIFY,
~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\Bert\AutoIt3.My\Temp\temp.au3"(65,77) : error: $WM_LBUTTONUP: undeclared global variable.
If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\Bert\AutoIt3.My\Temp\temp.au3 - 2 error(s), 2 warning(s)
!>10:31:22 AU3Check ended. Press F4 to jump to next error.rc:2
+>10:31:22 AutoIt3Wrapper Finished.
>Exit code: 2 Time: 1.933
Alles anzeigen
Beim Kopieren die erste Zeile nicht erwischt.
Es fehlt: #include <WindowsConstants.au3>
Vielen Dank für eure Anworten,
sehr nette Funktion BugFix.
Nochmals vielen Dank.
MfG Gremlin78