Da war ich etwas zu wortkarg ![]()
Eigentlich wollte ich nur drauf aufmerksam machen, dass = 1 bei Funktionen die 0 bei Fehler/Mißerfolg zurückgeben auch eingespart werden kann. ![]()
Beiträge von BugFix
-
-
Das ist aber kein INI-Format.
Eine INI sieht so aus:Könnte bei dir etwa so aussehen:
ID deshalb, weil über Name+... keine eineindeutige Identifizierung gesichert ist. Ich hatte schon mal zwei Klaus Müller unter derselben Adresse und auch noch demselben Geburtstag. Sowas kommt häufiger vor als man denkt.Wenn es mehr Daten werden solltest du evtl. über den Einsatz von SQLite nachdenken.
Beitrag # 4.444
-
Until WinActive ("Neues Dokument scannen", "Voreinstellung für das Scannen") = 1 or WinActive("Neues Dokument scannen", "Das Scannen ist aufgrund eines") = 1
Etwas zu viel des Guten.
-
Angenommen ich habe ein Chatfenster, welches sich dauernd wieder erneuert weil einer der beiden Partner schreibt.
Ich vermute mal:
- Du liest den Text in Intervallen aus.
- Das, was du bisher schon ausgelesen hast, möchtest du nicht mehr im aktuellen Text drin haben.
Wenn dem so ist:
Der Text enthält doch mit Sicherheit Zeilenumbrüche. Also:
- Gesamten Text lesen und an den Zeilenumbrüchen splitten. Nun hast du ein Array mit den Zeilen.
- Die letzte Zeile (letzter Eintrag im Array) speicherst du in einer Vergleichsvariablen. (Beim Programmstart ist diese leer)
- Mit For-Schleife vom letztem zum ersten Element durch das Array iterieren und vergleichen ob aktuelle Zeile identisch mit Vergleichsvariable. Ausnahme: Vergleichsvariable ist leer - dieser dann den letzten Eintrag zuweisen und den gesamten Inhalt verwenden
- Wenn Übereinstimmung Variable=ArrayEintrag sind alle Arrayeinträge vor und diesem alte Sachen. -
Ich würde gerne beim Eintragen der Werte individuelle Tooltipps setzen.
Ja, mein Bsp. sollte auch nur den Weg zeigen, wie du an Zeilen- und SpaltenIndex des HotItems kommst. Individuelle Tooltipps müßtest du dann in einem separaten Array ablegen.
Dabei wirst du evtl. auf ein Problem stoßen: Was passiert, wenn z.B. Elemente eingefügt, gelöscht werden oder das Listview sortiert wird?
Dann stimmt deine Zuordnung aus dem Array nicht mehr.
Das kannst du umgehen, indem du
- entweder alle Aktionen, die im Listview stattfinden auch auf dein Array anwendest um dort den selben Status zu haben - seeehr aufwändig
oder
- du nutzt (so, wie ich es in ListviewFormat getan habe) iParam zum Speichern eines Verweises zum Array. Dann sind Veränderungen im Listview nicht relevant. Allerdings mußt du für SimpleSort die von mir modifizierte Version verwenden, damit auch iParam mitsortiert wird. -
Dafür gibt es LVN_HOTTRACK:
Spoiler anzeigen
[autoit]#include <ListViewConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>$gui = GUICreate('test')
[/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200)
_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")
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSEFunc ListView_HOTTRACK($iSubItem)
[/autoit] [autoit][/autoit] [autoit]
Local $HotItem = _GUICtrlListView_GetHotItem($hListView)
If $HotItem <> -1 Then _ToolTipMouseExit("Überfahrenes Item: " & $HotItem & " SubItem: " & $iSubItem & @CRLF & _
'Inhalt: ' & _GUICtrlListView_GetItemText($hListView, $HotItem, $iSubItem), 500)
EndFunc ;==>ListView_HOTTRACKFunc _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
[/autoit] [autoit][/autoit] [autoit]
If $TIME = -1 Then $TIME = 3000
Local $start = TimerInit(), $pos0 = MouseGetPos()
If ($x = -1) Or ($y = -1) Then
ToolTip($TEXT, $pos0[0], $pos0[1], $TITLE, $ICON, $OPT)
Else
ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
EndIf
Do
Sleep(50)
$pos = MouseGetPos()
Until (TimerDiff($start) > $TIME) Or _
(Abs($pos[0] - $pos0[0]) > 10 Or _
Abs($pos[1] - $pos0[1]) > 10)
ToolTip('')
EndFunc ;_ToolTipMouseExitFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
ListView_HOTTRACK(DllStructGetData($tInfo, "SubItem"))
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Hier mal ein Ausschnitt, aus einem Programm von mir. Hier wird der deutsche Text verwendet, sofern die vom OS verwendete Sprache eine der deutschen ist. Anderenfalls kommt der englische Text zum Einsatz. Dazu hinterlege ich alle Texte in einem 2D-Array und greife über den Index ($iLang) auf deutsch oder englisch zu:
Spoiler anzeigen
[autoit]Global $iLang=1
[/autoit]
If StringInStr("0407 0807 0c07 1007 1407", @OSLang) Then $iLang = 0
Global $aText[18][2] = [ _
["Schließen","Close"],['FEHLER','ERROR'], _
["Die Datei 'xyz.exe' konnte nicht gefunden werden.","File 'xyz.exe' couldn't found."], _
['Das Programm wird beendet.','The program will close.'], _
["Ferneinstellungssoftware ","Remotesoftware "],["Hilfe","Help"],["Über","About"], _
["Neues Fenster","New Instance"],['Raum|Notiz|Status','Room|Note|State'],["Notiz","Note"], _
["COM-Port wählen","Choose COM-Port"],["Bett ","Bed "],["Notiz eintragen","Set Note"], _
["Geben Sie hier den neuen Titel ein: ","Set here new title: "],[" aktuelles Fenster:"," current window:"], _
["Starte Fernbedienung","Run Remote"],["Dieser Fenstername existiert bereits.","This window title always exists."], _
["Verbindung besteht bereits.","Connection always exists."]] -
Von den Posts die auf meinen folgenden habe ich allerdings die Hälfte nicht verstanden.
Mal ganz salopp gesagt: Da Jos der Meinung ist, dass eine andere Nation unfähig ist die Hilfe komplett zu übersetzen ohne auf halbem Weg aufzugeben, ist es ihm gelinde gesagt wohl schei..egal ob und was in dieser Richtung getan wird.
Es ist also nicht unbedingt davon auszugehen, dass der aktuelle Link von Jos eingearbeitet wird.
-
Hier findest du Bsp. dazu: Auto-Ersetzen u. Input-Check mit Hook
-
-
Kann mir jemand sagen, welche Frequenz etc. welcher Ton hat? also: c, d, e, f, g, a, h,... + länge eines Viertel Tons.... etc.
Guckst du: Beep Komponist
-
Ich habe mal eine Auflistung der meisten meiner Skripte und UDF in Post 1 mit Verlinkung eingestellt. Dann habt ihr es leichter (und ich auch
) nach etwas zu suchen. -
Denkst du ich probiere nichts selber?
Da hast du dich aber geschnitten! Du "Profi"Bleib bitte auf dem Teppich und halte dich an die Netiquette!
Der Einwurf von blubbstar ist völlig berechtigt: Wenn du nicht weiterkommst, dann zeig uns bitte, was du bisher versucht hast. Dann können wir auch ganz gezielt helfen. -
Kleiner Tipp:
Ich würd die Tastenkombination Alt+Tab auch blockieren, Genauso wie Windows + m und Alt+F4.
Was bringt sonst, wenn Taskmanager nicht möglich zu öffnen ist, aber die Sperre per Alt+F4 umgänglich ist?
Ehe du mühselig alle Tastenkombinationen mit ALT und WIN unterdrückst, setze einfache einen Hook auf die ALT- und die WIN- Taste. -
wolltet ihr nicht schon immer alle Dateien und / oder Ordner eines Pfades ermitteln?
Haben wir das nicht auch schon getan...?
Rekursive Datei/Ordner Auflistung per Objekt
_RecursiveFileListToArray (mit StringRegExp)
..einen hab ich noch. Schon etwas älter und muß wohl mal wieder auf die aktuelle AutoIt-Version angepaßt werden:
Dateien / Ordner rekursiv lesen -
So sieht die Funktionskopfzeile zum Formatieren aus.
[autoit]_GUICtrlListView_FormattingCell($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)
[/autoit]
[autoit]
Und wenn du in die Funktionsbeschreibung schaust: dort steht nirgendwo, dass man auf ein Item mit '-1' Bezug nehmen kann.
Du mußt schon die Indexwerte für Item(Zeile) und SubItem(Spalte) angeben.
Wenn du die Werte für alle Spalten einer Zeile mit denselben Werten setzen möchtest, mach es in einer Schleife:For $i = 0 To $Index_letzteSpalte
[/autoit]
_GUICtrlListView_FormattingCell($hWnd, $iItem, $i, ... )
NextWenn du aber nur 2 Farben im Wechsel auf die Zeilen anwenden möchtest, das geht einfacher:
Spoiler anzeigen
[autoit]#include <GuiListView.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
GUICreate('Test')$ListView1 = GUICtrlCreateListView("Col 1|Col 2", 15, 15, 300, 250)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor(-1, 0xFF4400) ; Color odd row
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
_GUICtrlListView_SetColumnWidth($ListView1, 0, 148)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 148)For $i = 1 To 30
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateListViewItem(Random(10000, 1000000, 1) & '|' & Random(10000, 1000000, 1), $ListView1)
GUICtrlSetBkColor(-1, 0xFFFF23) ; Color even row
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit]
Until GUIGetMsg() = -3 -
Dem Manne kann geholfen werden

ListView - SubItem einzeln färben/formatieren, Finale Version!
-
Wenn das Programm beim Installieren eine "uninstall.exe" angelegt hat, brauchst du diese nur mit AutoIt aufrufen.
-
Falls du willst, dass das angeklickte (oder per Tastatur angewählte) TabItem erst nach erfolgreicher Passwortabfrage gezeigt wird, muß man Maus- und Tastatur per Hook abfangen.
Ich habe auch mal dieses Bsp. erstellt:Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiTab.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>Global Const $HC_ACTION = 0
[/autoit] [autoit][/autoit] [autoit]
Global Const $WM_LBUTTONDOWN = 0x201Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
[/autoit] [autoit][/autoit] [autoit]
Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
Global $hHook2 = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
Global $hTab, $lastTab = 0, $checkPass = 0
Global $Passwort = 'pass', $passItem = 2 ; <== Index des PW-geschützten TabItems$Form1_1 = GUICreate("Testfenster", 297, 341, 210, 144)
[/autoit] [autoit][/autoit] [autoit]
$Programme = GUICtrlCreateTab(8, 8, 280, 304)
$hTab = GUICtrlGetHandle($Programme)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$tab1 = GUICtrlCreateTabItem("Tab1")
$tab2 = GUICtrlCreateTabItem("Tab2")
$tab3 = GUICtrlCreateTabItem("Tab3")
$tab4 = GUICtrlCreateTabItem("Tab4")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)Global $hookGUI = $Form1_1, $hookID = $Programme
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
If $checkPass Then _CheckPass()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Programme
Switch GUICtrlRead($Programme)
Case 0
;~ MsgBox(0, '', 'Tab1 aktiviert')
Case 1
;~ MsgBox(0, '', 'Tab2 aktiviert')
Case 2
;~ MsgBox(0, '', 'Tab3 aktiviert')
Case 3
;~ MsgBox(0, '', 'Tab4 aktiviert')
EndSwitch
EndSwitch
WEndFunc _MouseProc($nCode, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
If $nCode < 0 Or (Not _MouseOverTabItem($hookGUI, $hTab, $passItem)) Then
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
If $nCode = $HC_ACTION And $wParam = $WM_LBUTTONDOWN Then
$checkPass = 1 ; Überprüfung aktivieren
Return -1 ; Mausklick wird ignoriert ==> TabItem noch nicht aktiviert
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFuncFunc _CheckPass()
[/autoit] [autoit][/autoit] [autoit]
If InputBox('Passwort', 'Bitte Passwort eingeben:') == $Passwort Then
_GUICtrlTab_SetCurSel($hTab, $passItem)
Else
MsgBox(0, 'Fehler', 'Falsches Passwort!')
EndIf
$checkPass = 0
EndFuncFunc _MouseOverTabItem($GUI, $hWnd, $iTabItem)
[/autoit] [autoit][/autoit] [autoit]
If Not BitAND(WinGetState($GUI),
Then Return False
Local $old = Opt('MouseCoordMode', 2)
Local $posM = MouseGetPos()
Opt('MouseCoordMode', $old)
Local $posC = _GUICtrlTab_GetItemRect($hWnd, $iTabItem)
If ($posM[0] >= $posC[0] And $posM[0] <= $posC[2]) And _
($posM[1] >= $posC[1] And $posM[1] <= $posC[3]) Then
Return True
Else
Return False
EndIf
EndFuncFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $tKEYHOOKS, $vkCode, $ret, $curPos, $curItem
$ret = DllCall("user32.dll","long","GetKeyState","long", 0x14)
If $ret[0] Then $isCapsLock = 1
$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
$curPos = GUIGetCursorInfo($hookGUI) ; <== check, welche ID aktiv
If $nCode < 0 Or $curPos[4] <> $hookID Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
$vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
If $wParam = $WM_KEYDOWN Then
Switch $vkCode
Case 0x25 ; ==> Pfeil li.
If GUICtrlRead($hookID) -1 = $passItem Then
$checkPass = 1
Return -1
EndIf
Case 0x27 ; ==> Pfeil re.
If GUICtrlRead($hookID) +1 = $passItem Then
$checkPass = 1
Return -1
EndIf
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFuncFunc OnAutoItExit()
[/autoit]
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_MouseProc)
_WinAPI_UnhookWindowsHookEx($hHook2)
DllCallbackFree($hStub_KeyProc)
EndFunc ;==>OnAutoItExitEdit: Hatte grad noch einen Fehler beim Positionsvergleich der Maus entdeckt - nun passt es.

-
Das geht so (statt MsgBox dann dein Code):
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
$Form1_1 = GUICreate("Testfenster", 297, 341, 210, 144)
$Programme = GUICtrlCreateTab(8, 8, 280, 304)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$tab1 = GUICtrlCreateTabItem("Tab1")
$tab2 = GUICtrlCreateTabItem("Tab2")
$tab3 = GUICtrlCreateTabItem("Tab3")
$tab4 = GUICtrlCreateTabItem("Tab4")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Programme
Switch GUICtrlRead($Programme)
Case 0
MsgBox(0, '', 'Tab1 aktiviert')
Case 1
MsgBox(0, '', 'Tab2 aktiviert')
Case 2
MsgBox(0, '', 'Tab3 aktiviert')
Case 3
MsgBox(0, '', 'Tab4 aktiviert')
EndSwitch
EndSwitch
WEnd