2) Du kannst das per GUICtrlRead() auslesen
und
1) Dann mit _WeekNumberISO() die Woche ausrechnen ![]()
2) Du kannst das per GUICtrlRead() auslesen
und
1) Dann mit _WeekNumberISO() die Woche ausrechnen ![]()
Ok ich schau mal was ich so in meiner Freizeit machen kann. ![]()
Soll das ganze in einer GUI landen oder sind 2 getrennte so richtig? ![]()
Hallo MrB,
wenn du den Text löschen willst musst du Prinzipiell alles löschen und neu zeichnen.
Schau dir dazu mal
an.
Je nachdem was du vor hast ist es auch recht simpel alles neu zu Zeichnen.
Wie soll es denn am Ende aussehen?
Edit. Hab gerade gesehen, dass du GraphicsClear schon verwendet hast.
Aber es ist wesentlich Zeitintensiver alles in ne Datei zu schreiben als meine Funktion xD
So sieht das Ergebnis aus:
Funktion: 0.0845777885178144ms
Datei: 2.65026700320851ms
Meine Funktion ist 33mal schneller ![]()
Probiers mal damit:
EDIT: Hab noch ne abfrage hinzugefügt die Überprüft ob es wirklich 2 1D-Arrays sind
Func _Array_Add($a1, $a2)
If Not IsArray($a1) Or Not IsArray($a2) Then Return -1
If UBound($a1, 2) > 1 Or UBound($a2, 2) > 1 Then Return -1
Local $u_a1 = UBound($a1)
Local $u_a2 = UBound($a2)
Local $aNew[($u_a1 > $u_a2 ? $u_a1 : $u_a2)][2]
For $i = 0 To ($u_a1 > $u_a2 ? $u_a1 : $u_a2)
If $u_a1 > $i Then $aNew[$i][0] = $a1[$i]
If $u_a2 > $i Then $aNew[$i][1] = $a2[$i]
Next
Return $aNew
EndFunc
Alles anzeigen
ok danke ich habs jetzt hingekriegt xD
So,
hier mal der Code wie es aussieht.
Wenn man auf Column2 Klickt erscheint ein Edit-Feld neben der Zahl dort soll man eine postive oder negative Zahl eingeben und die wird dann auf die schon dort stehende addiert. Mit Tab kann man die eingabe beenden und die Aktion durchführen lassen. Nun sollte es aber erstens mit enter machbar sein UND wenn ein Item mit den Pfeiltasten ausgewählt wird und dann enter drückt soll dasselbe passieren wie bei einem Mausklick auf dasselbe item.
#include <GUIListView.au3>
#include <WindowsConstants.au3>
#include <GUIEdit.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = -1
$hGUI = GUICreate("", 500, 500)
$hListView = GUICtrlCreateListView("", 10, 10, 480, 480)
_GUICtrlListView_AddColumn($hListView, "Column1", 200)
_GUICtrlListView_AddColumn($hListView, "Column2", 100, 2)
For $i = 1 To 4
$iIndex = _GUICtrlListView_InsertItem($hListView, "Item" & $i)
_GUICtrlListView_AddSubItem($hListView, $iIndex, $i, 1)
Next
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()
While Sleep(10)
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $aHitTest
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo, $hWndEdit
$hWndListView = $hListView
$hWndEdit = $hEdit
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
;$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $aHit = _GUICtrlListView_SubItemHitTest($hWndListView)
If ($aHit[0] <> -1) And ($aHit[1] > 0) Then
$Item = $aHit[0]
$SubItem = $aHit[1]
$bDisableUpdates = True
Local $iSubItemText = _GUICtrlListView_GetItemText($hWndListView, $Item, $SubItem)
Local $iLen = _GUICtrlListView_GetStringWidth($hWndListView, $iSubItemText)
Local $aRect = _GUICtrlListView_GetSubItemRect($hWndListView, $Item, $SubItem)
$hEdit = _GUICtrlEdit_Create($hGUI, "", 20 + $aRect[0], 13 + $aRect[1], $iLen + 10, 17, BitOR($WS_CHILD, $WS_VISIBLE, $ES_CENTER, $ES_AUTOHSCROLL))
_GUICtrlEdit_SetSel($hEdit, 0, -1)
_WinAPI_SetFocus($hEdit)
$hDC = _WinAPI_GetWindowDC($hEdit)
$hBrush = _WinAPI_CreateSolidBrush(0)
FrameRect($hDC, 0, 0, $iLen + 10, 17, $hBrush)
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func FrameRect($hDC, $nLeft, $nTop, $nRight, $nBottom, $hBrush)
Local $stRect = DllStructCreate("int;int;int;int")
DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)
DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "hwnd", $hBrush)
EndFunc ;==>FrameRect
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $iCode = BitShift($wParam, 16)
Switch $lParam
Case $hEdit
Switch $iCode
Case $EN_KILLFOCUS
Local $iText = _GUICtrlEdit_GetText($hEdit)
_GUICtrlListView_SetItemText($hListView, $Item, Int($iText) + Int(_GUICtrlListView_GetItemText($hListView, $Item, $SubItem)), $SubItem)
_WinAPI_DeleteObject($hBrush)
_WinAPI_ReleaseDC($hEdit, $hDC)
_WinAPI_DestroyWindow($hEdit)
GUICtrlSetState($hListView, 256)
_GUICtrlListView_SetItemSelected($hListView, $Item, True, True)
$Item = -1
$SubItem = -1
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Alles anzeigen
Ok danke schonmal für die Ansätze. Bin gerade nicht an meinem PC und werde euch später den Code schicken.
Ich habe eine Funktion die aufgerufen wird wenn man auf ein listview item klickt. Nun soll dass aber auch bei einem markierten item mit enter passieren. Da die vorherigen versuche ein enter-event abzufangen fehlgeschlagen sind wollte ich mal fragen ob man nicht einen klick so senden kann.
In meinem Script intern xD
Hallo liebe Community,
habt ihr eine Ahnung wie man an ein ListView einen Klick senden kann OHNE MouseClick()?
Vlt. mit GuiCtrlSendMsg()? doch wie soll dann der Syntax aussehen?
LG
naja nicht nur kosmetisch ist der Fehler bei mir. Ich habe eine manuelle updatesuche gestartet und nachdem dann die automatische suche sich während dem update nochmal gemeldet hat kann ich KEIN update mehr starten er bricht sofort mit einem Fehler ab obwohl er noch ein Update findet.
Soweit ich mich erinnern kann wurde mal ein Bug behoben, dass beim Manuellen überprüfen von Updates manchmal ein weiteres Fenster mit der automatischen überprüfung geöffnet wurde, in der version vom 11.8.2015 ist dieser Bug immernoch vorhanden wurde der in der vom 14.9.2015 behoben?
Achja
sorry hatte nen denkfehler ... es ist zu früh am morgen ![]()
aber wo ist es eine schande dass die Schleife abgebrochen wird? für größere dateien ist es doch viel sinnvoller weil, wenn ich den eintrag in zeile 10 gefunden habe brauche ich doch die anderen 20000 auch nicht überprüfen... das verhindert kurze hänger im Skript
@DasIch Außerdem ist mir in deinem Skript ein Fehler aufgefallen... du überprüfst durch Ubound() - 1 nie das letzte Element deines Arrays etweder du nimmst nur Ubound oder das hier:
#include <File.au3>
$iZeile = __DurchsucheDateiNach("test", @DesktopDir & "\test.txt")
Func __DurchsucheDateiNach($sWort, $sDateipfad)
Local $aRead
_FileReadToArray($sDateipfad, $aRead)
For $i = 1 To $aRead[0]
If $aRead[$i] == $sWort Then Return $i
Next
Return -1
EndFunc
Alles anzeigen
Denn in $aDatei[0] befindet sich schon der Wert den Ubound($aDatei) zurückgeben würde
Probier es doch mal mit:
oder soetwas hier:
#include <File.au3>
$iZeile = __DurchsucheDateiNach("test", @DesktopDir & "\test.txt")
Func __DurchsucheDateiNach($sWort, $sDateipfad)
Local $hFile = FileOpen($sDateipfad)
For $i = 1 To _FileCountLines($sDateipfad)
If FileReadLine($hFile, $i) == $sWort Then
FileClose($hFile)
Return $i
EndIf
Next
FileClose($hFile)
EndFunc
Alles anzeigen
EDIT: für größere Dateien hab ich es mal angepasst mit FIleOpn und FileClose!
Hey ISI360,
ich hätte einen kleinen Bug bzw. einen Verbesserungsvorschlag. Und zwar wenn man eingestellt hat, dass alle zuletzt geöffneten Tabs wieder geöffnet werden sollen, und man macht dies auf unterschiedlichen PC's, dann funktioniert das nicht! In der project.isn findet sich auch die Ursache dafür. Die Pfade zu den Zulezt geöffneten Tabs werden wie folgt gespeichert: X:\xxx\test.au3. Nun ist das Problem, dass das Projekt in meinem Dropbox Ordner ist und dieser sich auf meinen PC's nicht unter demselben Pfad befindet. Würde man das auf relative Pfade ändern sollte das kein Problem mehr sein. Ich hoffe du findest dafür eine Lösung.
LG teamnoobPDB
Edit: Sorry für die wirre Beschreibung hab sie jetzt mal verbessert ![]()
Sehr gute Verbesserungsvorschläge
Das reizt schon etwas. Ich habe es dieses mal leider nicht geschafft etwas fertigzustellen wegen meiner Abitur Prüfungen. Ich bin aber sehr zuversichtlich dass ich das nächste mal etwas auf die Reihe bringe ![]()