OK, ich sehe es funktioniert - aber es erschließt sich mir nicht (vllt. auch zu spät heut).
Also erst mal drüber schlafen.
Beiträge von BugFix
-
-
Hast du auch Opt('GUIOnEventMode', 1) gesetzt?
Ich hab mal in das Sortierbsp. zwei Kontextmenüs eingebaut. Funzt tadellos.
Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Opt('MustDeclareVars', 1)Global $hListView, $B_DESCENDING, $hListView1, $A_DESCENDING, $conmnu1, $conmnu2
[/autoit] [autoit][/autoit] [autoit]
GUICreate("ListView SimpleSort", 400, 600)
GUISetOnEvent($GUI_EVENT_CLOSE, '_close')
$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
$conmnu1 = GUICtrlCreateContextMenu($hListView)
GUICtrlCreateMenuItem('Item1', $conmnu1)
GUICtrlSetOnEvent(-1, '_I1_1')
GUICtrlCreateMenuItem('Item2', $conmnu1)
GUICtrlSetOnEvent(-1, '_I1_2')
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
_GUICtrlListView_SetColumnWidth($hListView, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView, 2, 75)
$hListView1 = GUICtrlCreateListView("col1|col2|col3", 2, 300, 394, 268)
$conmnu2 = GUICtrlCreateContextMenu($hListView1)
GUICtrlCreateMenuItem('Item1', $conmnu2)
GUICtrlSetOnEvent(-1, '_I2_1')
GUICtrlCreateMenuItem('Item2', $conmnu2)
GUICtrlSetOnEvent(-1, '_I2_2')
GUICtrlSendMsg($hListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line1|X|more_T", $hListView1)
GUICtrlCreateListViewItem("line2|Z|more_S", $hListView1)
GUICtrlCreateListViewItem("line3|A|more_P", $hListView1)
_GUICtrlListView_SetColumnWidth($hListView1, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView1, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView1, 2, 75)
GUISetState()GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
Global $A_DESCENDING[_GUICtrlListView_GetColumnCount($hListView1)]While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _I1_1()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'I1-1')
EndFuncFunc _I1_2()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'I1-2')
EndFuncFunc _I2_1()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'I2-1')
EndFuncFunc _I2_2()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'I2-2')
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $hWndListView1, $tInfo
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$hWndListView1 = $hListView1
If Not IsHWnd($hListView1) Then $hWndListView1 = GUICtrlGetHandle($hListView1)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
ElseIf ($hWndFrom = $hWndListView1) And ($iCode = $LVN_COLUMNCLICK) Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView1, $A_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndIf
EndFunc ;==>WM_NOTIFY -
Hast du mal Debugging in den Funcs gemacht, also einfach 'ne MsgBox in die erste Zeile, um zu sehen ob auf das Event regaiert wird?
-
$ContextMenu = GUICtrlCreateContextMenu($ListView1)
$Rename_Window = GUICtrlCreateMenuItem("Rename Window", $ListView1)
GUICtrlSetOnEvent(-1, "_Rename_Window")
$Set_Trans = GUICtrlCreateMenuItem("Set Transparency", $ListView1)
GUICtrlSetOnEvent(-1, "_Set_Trans")
$Set_OnTop = GUICtrlCreateMenuItem("On Top", $ListView1)
GUICtrlSetOnEvent(-1, "_Set_OnTop")Das paßt aber gar nicht zueinander.
-
Das hatte ich probiert, habs aber nicht lauffähig bekommen, deshalb der Umweg über die Globale Variable.
Mach mal Pee
Edit:
[autoit]
So war mein erster GedankeFunc _Kapital($K0, $p, $n)
[/autoit]
If $n = 0 Then Return $K0
$n -= 1
_Kapital($K0 + ($K0 * $p / 100), $p, $n)
EndFuncDa $K0 nach dem letzten Aufruf das Gesamtkapital darstellt (kann man in der ersten Zeile ausgeben lassen - stimmt), wäre es logisch diesen Wert mit Return zurückzugeben. Aber das verweigert AutoIt - gibt nur '0' aus. Und ich habe keinen Plan, wie ich den Wert außer über eine Globale Variable von der Funktion zurückbekomme.
-
Hi,
der Fehler liegt in der Sortiervariable ($B_DESCENDING). Diese wird nur vorab und nicht in der Funktion festgelegt.
Wenn du 2 LV hast brauchst du zwei unterschiedlich Sortiervariablen.
Hier mal ein Bsp.:Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <WindowsConstants.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Global $hListView, $B_DESCENDING, $hListView1, $A_DESCENDING
[/autoit] [autoit][/autoit] [autoit]
GUICreate("ListView SimpleSort", 400, 600)
$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
_GUICtrlListView_SetColumnWidth($hListView, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView, 2, 75)
$hListView1 = GUICtrlCreateListView("col1|col2|col3", 2, 300, 394, 268)
GUICtrlSendMsg($hListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line1|X|more_T", $hListView1)
GUICtrlCreateListViewItem("line2|Z|more_S", $hListView1)
GUICtrlCreateListViewItem("line3|A|more_P", $hListView1)
_GUICtrlListView_SetColumnWidth($hListView1, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView1, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView1, 2, 75)
GUISetState()GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
Global $A_DESCENDING[_GUICtrlListView_GetColumnCount($hListView1)]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $hWndListView1, $tInfo
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$hWndListView1 = $hListView1
If Not IsHWnd($hListView1) Then $hWndListView1 = GUICtrlGetHandle($hListView1)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
ElseIf ($hWndFrom = $hWndListView1) And ($iCode = $LVN_COLUMNCLICK) Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView1, $A_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndIf
EndFunc ;==>WM_NOTIFY -
Was soll da aber das Sleep 10000 =??
Das Skript fragt dann nur alle 10 Sekunden die Zeit ab. Eine größere Genauigkeit wirst du wohl nicht brauchen. Ich würde es sogar auf eine Minute setzen.
-
Freut mich, wenn es dir ein Lichtlein entzündet hat
- immer wieder gern. -
Wenn das Skript erst nach 23 Uhr starten soll, einfach am Skriptanfang:
[autoit]Do
[/autoit][autoit][/autoit][autoit]
Sleep(10000)
Until @HOUR = 23; dein weiterer Code
[/autoit]24 Uhr kannst du nicht abfragen - gibt es nicht wirklich:
23:59:59
00:00:00 -
OK, die Lösung ist so einfach, dass du dich in den Hintern beißen wirst
[autoit]
Global $K0 = 1000
[/autoit][autoit][/autoit][autoit]
Global $p = 2.5
Global $n = 5
Global $K_Kapital($K0, $p, $n)
[/autoit][autoit][/autoit][autoit]MsgBox(0, 'Gesamtkapital', Round($K, 2) & ' €')
[/autoit][autoit][/autoit][autoit]Func _Kapital($K0, $p, $n)
[/autoit]
If $n = 0 Then
$K = $K0
Return
EndIf
$n -= 1
_Kapital($K0 + ($K0 * $p / 100), $p, $n)
EndFuncWichtig: du kannst aus einer Rekursiven Funktion keinen Wert zurückgeben, deshalb die Globale Deklaration von $K.
-
Mal als Tipp, (bischen sollst du ja auch machen
)
Ein rekursives Programm ruft sich selbst auf. Also erstellst du eine Funktion, die den Zinswert für einen Basiszeitraum errechnet. Das Ergebnis wird dem Ausgangswert hinzugefügt und damit die Funktion in sich selbst aufgerufen - sooft, wie der Basiszeitraum im gewünschten Zeitraum vorhanden. -
-
Schau dir doch GtaSpiders Code an.
-
Super Tipp mit dem Help Maker. Der integrierte Iconmaker ist auch absolute Spitze.


-
Hier ist die Seite, von der du den Inhalt lesen kannst: http://www.autoit.de/index.php?page=ShoutboxContent
Das Senden geht auch - aber ich bin mir nicht sicher ob ich das publizieren möchte. Ein Spambot für die Shoutbox ist etwas, worauf wir wohl alle verzichten können (und wollen).
-
Ja, es handelt sich hier also um ein von der Softwarefirma selbst erstelltes Control, auf das Windows mit Standardroutinen keinen Zugriff hat. Das behält sich die Software explizit vor. Ist halt Pech - oder wie die Briten sagen: Shit happens.
-
Nö, genau das nicht, da es ziemlich schwammig definiert ist vom Namespace her.
Nimm für Variablen, die im Skript und zusätzlich in Funktionen genutzt werden Global, sonst Local. -
Mit Send kannst du einfach an ein Fenster senden, ControlSend erwartet aber als Ziel ein.. Control.

(z. B. wie im Hilfebsp. die CtrlID des Notepad-Editfeldes) -
Zitat von Hilfe AutoIt
The difference between Dim, Local and Global is the scope in which they are created:
Dim = Local scope if the variable name doesn't already exist globally (in which case it reuses the global variable!)
Global = Forces creation of the variable in the Global scope
Local = Forces creation of the variable in the Local/Function scope -