Aber auch diese Variante ist vom Grundsatz falsch:
Wenn du einen String als Parameter erwartest, dann solltest du bei optionaler Vorbelegung des Parameters diesen logischerweise auch mit einem String belegen. Und dann gibt es auch keine Probleme mit Typumwandlung.
Beiträge von BugFix
-
-
Da 8 auf 3 sowieso nicht geht brauchst du immer n*3 8er Pakete, sonst geht es ja nicht auf. Insofern halte ich das eh für wenig sinnhaft, da diese Bedingung deinen Ausgangsdaten vorgegeben werden muß.
Aber um es in 3er Blöcke zu setzen:
einfach alle 8er als String zusammenklöppeln und anschließend mit StringTrimLeft(STRING-8, 3) in 3er Blöcke zerlegen oder einfacher mit Regex "([10]{3})" zerlegen. -
Wenn man das Pattern etwas ändert, erhältst du auch gleich alle anderen Daten der INI-Sektion in einem Aufwasch:
Spoiler anzeigen
[autoit]$SerNum = "YLS01123548"
[/autoit] [autoit][/autoit] [autoit]
$SearchPattern = "\[(\w+)\]\r\nuser=(\w+)\r\nip=([\d\.]+)\r\n\w+=" & $SerNum;~ $sRead = FileRead('Deine.INI')
[/autoit] [autoit][/autoit] [autoit]$sRead = _
[/autoit] [autoit][/autoit] [autoit]
"[Computername_A]" & @CRLF & _
"user=xyz" & @CRLF & _
"ip=10.1.0.2" & @CRLF & _
"ser_moni=YLS01123548" & @CRLF & _
@CRLF & _
"[Computername_B]" & @CRLF & _
"user=abc" & @CRLF & _
"ip=10.1.0.3" & @CRLF & _
"ser_moni=YLS01123666" & @CRLF$aRet = StringRegExp($sRead, $SearchPattern, 3)
[/autoit]
ConsoleWrite('+> Monitor mit der SerNr: ' & $SerNum & @LF)
ConsoleWrite('>> PC-Name ' & $aRet[0] & @LF)
ConsoleWrite('>> User-Name ' & $aRet[1] & @LF)
ConsoleWrite('>> IP-Adresse ' & $aRet[2] & @LF) -
Auch mit der INI geht das recht einfach:
[autoit]
[/autoit][autoit][/autoit][autoit]
$SerNum = "YLS01123548"
$SearchPattern = "\[(\w+)\]\r\nuser=[\w]+\r\nip=[\d\.]+\r\n\w+=" & $SerNum;~ $sRead = FileRead('Deine.INI')
[/autoit][autoit][/autoit][autoit]$sRead = _
[/autoit][autoit][/autoit][autoit]
"[Computername_A]" & @CRLF & _
"user=xyz" & @CRLF & _
"ip=10.1.0.2" & @CRLF & _
"ser_moni=YLS01123548" & @CRLF & _
@CRLF & _
"[Computername_B]" & @CRLF & _
"user=abc" & @CRLF & _
"ip=10.1.0.3" & @CRLF & _
"ser_moni=YLS01123666" & @CRLF$aRet = StringRegExp($sRead, $SearchPattern, 3)
[/autoit]
ConsoleWrite($aRet[0] & @LF) -
Btw.
[autoit]
Dieses in deinem CodeLocal $Useopt = Opt("GUIOnEventMode")
[/autoit]
Opt("GUIOnEventMode", 0)ist identisch mit diesem
[autoit]Local $Useopt = Opt("GUIOnEventMode", 0)
[/autoit]
Wird eine Option gesetzt kommt als Rückgabewert immer der vorherige Optionswert, somit brauchst du bei der Zuweisung den Return nur aufzufangen.
-
Mit diesen Funktionen geht das:
[autoit]_GUICtrlListView_GetHeader($hWnd)
[/autoit]
_GUICtrlHeader_GetItemText($hWnd, $iIndex) -
-
-
Wenn du die Zeit anzeigen möchtest, warum verwendest du nicht die Makros?
Da du die Variable $sTime nicht speicherst, hast du keinen Vergleichswert (Du erstellst die Variable bei jedem Aufruf neu). Und du setzt in der Statusbar die Variable $cdeUhr ohne dass deren Wert die Zeit annimmt.Ich würde das so lösen:
[autoit]
[/autoit]
Func Timer()
Local $sTime = @Hour & ":" @Min & ":" & @Sec
Local Static $sLastTime = $sTime
If StringRight($sLastTime, 2) <> @Sec Then
$sLastTime = $sTime
_GUICtrlStatusBar_SetText($cdeStatus, $sTime, 2)
EndIf
EndFunc ;==>Timer -
Hättest doch einfach mal die Makros anschauen müssen - steht direkt dort drin:
[autoit]@HomeDrive & @HomePath
[/autoit] -
Ist natürlich ein grenzwertiges Thema und ich denke, das sollte nicht allzusehr vertieft werden.
Nur ein abschließender Tipp: Schau dir doch mal die Funktion _Ispressed direkt an (also was sie eigentlich tut). Das sollte dich zur Lösung deines Problems bringen. -
Ich verwende in der Regel als Sprachdateien in INI-Form. Die Lösung sieht damit so aus.
-
Dann zeige bitte mal, wie du in die DB speicherst. Das Query allein gibt keine Auskunft über den Inhalt. Speicherst du wirklich die ID des jeweiligen Labels?
-
Du mußt natürlich auch jedem Label den neuen Wert zuweisen [ GuiCtrlSetData($Label, 'NeuerText') ], ich sehe nur eine Zuweisung für die Combobox.
-
Raupi, deinen Post dazwischen hatte ich glatt übersehen.
Habe aber jetzt mal deinen Tipp umgesetzt und zusätzlich erweitert auf Prüfung De-/Aktivierung einer Checkbox per Spacebar.
Nun ist es so, wie ich es wollte - fein.
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>$hGui = GUICreate('test')
[/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), BitOR($LVS_EX_CHECKBOXES,$LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth($hListView, 0, 146)
_GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
For $i = 1 To 10
GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom = $hWndListView Then
Switch $iCode
Case $LVN_ITEMCHANGED ; == Item geändert
Local $aHit = _GUICtrlListView_HitTest($hWndListView)
If $aHit[0] > -1 And $aHit[4] Then
ConsoleWrite('Klick-Index ' & $aHit[0] & ' Check: ' & _GUICtrlListView_GetItemChecked($hWndListView, $aHit[0]) & @LF)
EndIf
Case $LVN_KEYDOWN ; == Checkbox per Spacebar De-/Aktiviert
Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
If DllStructGetData($tInfo, "VKey") = 32 Then
Local $iIndex = _GUICtrlListView_GetSelectedIndices($hWndListView)
ConsoleWrite('Space-Index ' & $iIndex & ' Check: ' & Not _GUICtrlListView_GetItemChecked($hWndListView, $iIndex) & @LF)
EndIf
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Danke
Nachdem ich deinen Code gelesen habe ist mir das sonnenklar und ich frage mich, wieso ich das nicht ebenso gelöst habe.
-
Hi,
ich suche nach einer Möglichkeit direkt mit dem Klick (oder De-/Aktivieren per Spacebar) festzustellen ob eine Checkbox im Listview-Item gecheckt ist oder nicht. Dazu ist der Index des Listview-Item erforderlich.
Wenn das Item selektiert ist, ist das kein Problem - aber ein Klick auf eine Checkbox eines nicht selektierten Item führt nicht zu dessen Selektion.
Laut MSDN soll mit Senden der "LVM_HITTEST" Message der Index des Items, in dessen Bereich geklickt wurde ermittelt werden können. Ich habe das in folgendem Bsp.Skript mal nachvollzogen - aber als Index erhalte ich immer 0.Bitte keine evtl. Lösungsvorschläge, wie man das anders lösen könnte (es gibt keine wirklich sinnvollen
- nur riesig aufgeblähte Workarounds über sechs Ecken).Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>$hGui = GUICreate('test')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), BitOR($LVS_EX_CHECKBOXES,$LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth($hListView, 0, 146)
_GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
For $i = 1 To 10
GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
Next
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom = $hWndListView Then
Switch $iCode
Case $LVN_ITEMCHANGED ; == Item geändert
Local $old = Opt('MouseCoordMode', 2), $aPos = MouseGetPos(), $tPOINT = DllStructCreate($tagPOINT)
Opt('MouseCoordMode', $old)
DllStructSetData($tPOINT, 1, $aPos[0])
DllStructSetData($tPOINT, 2, $aPos[1])
Local $tITEM = DllStructCreate('struct; int; endstruct'), $tLVHITTESTINFO = DllStructCreate($tagLVHITTESTINFO)
DllStructSetData($tLVHITTESTINFO, 1, DllStructGetPtr($tPOINT)) ; == Mauskoordinaten im Client
DllStructSetData($tLVHITTESTINFO, 'Flags', $LVHT_ONITEMSTATEICON) ; == Flag für "The position is over the state image of a list-view item"
DllStructSetData($tLVHITTESTINFO, 'Item', DllStructGetPtr($tITEM)) ; == Rückgabewert Listview Item-Index
; == LVM_HITTEST Message senden ( http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx )
Local $ret = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hGui, "uint", $LVM_HITTEST, "wparam", 0, "lparam", DllStructGetPtr($tLVHITTESTINFO))
;~ ConsoleWrite($ret[0] & ' err: ' & @error & @LF)
ConsoleWrite('Index changed = ' & DllStructGetData($tITEM, 1) & @LF)
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Irgendwas an deinem PDF-Format ist faul. Das "PDF-XChange Viewer Netscape Gecko Plugin" zeigt nur eine leere Seite.

-
Also das mit Schnittmengen zu vergleichen ist kein optimaler Vergleich.
Das Pattern selbst stellt erst mal gar keine Menge dar und kann insofern auch keine Schnittmengen bilden.
Das Pattern ist ein Suchmuster - und String(bestandteile), die mit dem Suchmuster übereinstimmen bilden den Match. Mehr Erklärung bedarf es doch gar nicht.
-
Die _WinAPI_GetFontResourceInfo() ist mir bekannt, sie hat allerdings einen ganz großen Nachteil...
sie liefert den Schriftgrad des Fonts in Anhängigkeit der Regionaleinstellung zurück
Versuch doch folgende Lösung: Switche die Regionaleinstellung für die Dauer der Abfrage auf US / EN. Dann sollte das identsich sein. Die Regionaleinstellungen findest du im Schlüssel "HKCU\Control Panel\International". Einfach mal per Hand wechseln und die Änderungen in den Werten dann als Parameter für das automatische Switchen verwenden.