Und was denkst du, soll:
_GUICtrlListView_GetItemText($hWnd, $iIndex[, $iSubItem = 0]) sein? ![]()
Beiträge von BugFix
-
-
Schau mal in der Hilfe hierzu:
[autoit]_GUICtrlListView_GetItemText($hWnd, $iIndex[, $iSubItem = 0])
[/autoit] -
Damit als NEU erscheint, ausnahmsweise ein Doppelpost.
Hier die Lösung um Text- und Hintergrundfarbe für jedes Item separat zu setzen. Font ist aufwändiger, mache ich vielleicht später noch.
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)Global $GUI_Gui = GUICreate("TreeView - TestGUI", @DesktopWidth - 300, @DesktopHeight - 100)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, "_GUI_Event_Close")
GUISetBkColor(0xFFFFFF)Global $TV = GUICtrlCreateTreeView(10, 40, 180, @DesktopHeight - 354, _
[/autoit] [autoit][/autoit] [autoit]
BitOR(Default,$TVS_TRACKSELECT,$TVS_FULLROWSELECT), $WS_EX_CLIENTEDGE)
Global $hTV = GUICtrlGetHandle($TV)Global $aTVI[6]
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 5
$aTVI[$i] = GUICtrlGetHandle(GUICtrlCreateTreeViewItem("Testeintrag #" & $i+1, $TV))
Next
Global $aColor[3][3] ; [$i][0]=hWnd, [$i][1]=txtCol, [$i][2]=bkCol
$aColor[0][0] = $aTVI[1]
$aColor[0][1] = 0xffffff
$aColor[0][2] = 0xffff00$aColor[1][0] = $aTVI[3]
[/autoit] [autoit][/autoit] [autoit]
$aColor[1][1] = 0x000000
$aColor[1][2] = 0x0000ff$aColor[2][0] = $aTVI[5]
[/autoit] [autoit][/autoit] [autoit]
$aColor[2][1] = 0x0000ff
$aColor[2][2] = 0xffff00Global $currWindow = WinGetHandle($GUI_Gui)
[/autoit] [autoit][/autoit] [autoit]
Global $txtColor, $bkColorGUISetState(@SW_SHOW, $GUI_Gui)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY_TREEVIEW')
_WinAPI_RedrawWindow($currWindow)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _GUI_Event_Close()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==>_GUI_Event_CloseFunc WM_NOTIFY_TREEVIEW($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iCode, $tNMHDR, $tItemSpec
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
[/autoit] [autoit][/autoit] [autoit]
If $hWndFrom <> $hTV Then Return $GUI_RUNDEFMSG$iCode = DllStructGetData($tNMHDR, "Code")
[/autoit] [autoit][/autoit] [autoit]
If $iCode = $NM_CUSTOMDRAW Then
Local $iDrawStage, $iItem, $tCustDraw = DllStructCreate($tagNMTVCUSTOMDRAW, $lParam)
$iDrawStage = DllStructGetData($tCustDraw, 'DrawStage')
If $iDrawStage = $CDDS_ITEMPREPAINT Then
$tItemSpec = DllStructCreate('dword', DllStructGetPtr($tCustDraw, 'ItemSpec'))
$iItem = DllStructGetData($tItemSpec, 1)
For $i = 0 To UBound($aColor) -1
If $iItem = $aColor[$i][0] Then
DllStructSetData($tCustDraw, 'ClrText', RGB2BGR($aColor[$i][1]))
DllStructSetData($tCustDraw, 'ClrTextBk', RGB2BGR($aColor[$i][2]))
Return $CDRF_NEWFONT
EndIf
Next
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY_TREEVIEWFunc RGB2BGR($iColor)
[/autoit]
Local $sH = Hex($iColor,6)
Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
EndFunc ;==>RGB2BGR -
Seltsam, im Beispiel von GUICtrlListView funktioniert es doch?
Richtig, im ListView. Aber ListView und TreeView unterscheiden sich gründlich auch in Bezug auf die Notifikationen. -
Na dann bleibt nur der etwas aufwändigere Weg über selbst zeichnen.
Allerdings kann ich noch nicht sagen, ob CUSTOMDRAW auch für TreeView möglich ist, habe ich noch nie probiert. Wäre dann analog zu meiner ListView-Format UDF.Edit: Ja, gibt es auch für TreeView. Ich gucke mal, dass ich ein kleines Bsp. machen kann.
-
1. Du brauchst den Aufruf der EXE natürlich mit Pfad
[autoit]
2. Das Workingdir ist zwar ein optionaler Parameter, heißt aber nicht, dass man es deshalb weglassen kann. Viele Programme erfordern zwingend diese Angabe.
Probier es so:Run("C:\Program Files\UrbanTerror\ioUrbanTerror.exe", "C:\Program Files\UrbanTerror")
[/autoit] -
Die normale Erdanzeihungskraft hat ja eine beschleunigung von 9.81 m/s². Wie kann ich das umsetzen?
Mal besser gar nicht.
Überleg selber:
Start:
v= 0 m/s
a = 9,81 m/s²nach Sekunde1: v= 9,81 m/s
zurückgelegter Weg (Weg-Zeit-Gesetz):
s = 0,5 · a · t²
s = 0,5 · 9,81 m/s² · 1 s²
s = 4,95 mDa brauchst du aber einen gewaltig großen Bildschirm.

-
Du solltest schon die Anweisungen in MSDN bis zum Ende lesen
[autoit]
#include <WinAPI.au3>
[/autoit]
#cs
The pvParam parameter must point to a DWORD variable that receives the setting.
#ce
Const $SPI_GETKEYBOARDSPEED = 10
Local $vParam = DllStructCreate('dword')
_WinAPI_SystemParametersInfo($SPI_GETKEYBOARDSPEED, 0, DllStructGetPtr($vParam))
ConsoleWrite(DllStructGetData($vParam, 1) & @CRLF)Edit: Und das Setzen entsprechend mit dem Parameter $iParam
[autoit]Const $SPI_SETKEYBOARDSPEED = 11
[/autoit]
Local $newSpeed = 20 ; <== der neue Wert, max ist 31
Local $iParam = DllStructCreate('dword')
DllStructSetData($iParam, 1, $newSpeed)
_WinAPI_SystemParametersInfo($SPI_SETKEYBOARDSPEED, DllStructGetPtr($iParam)) -
Meinst du mit Ln zufälligerweise Log()?
Log() wird (leider) auch zur Bezeichnung des natürlichen Logarithmus verwendet. Eindeutig ist aber Ln().
Der natürliche Logarithmus verwendet als Basis die Eulersche Zahl.Dieser Logarithmus ist wohl einer der beliebtesten.
Kann mich an viele Mathestunden erinnern, in denen wir bis zum Geht-Nicht-Mehr integriert und differenziert haben. Was mit diesem Log besser als mit allen anderen geht. -
Man muss dazu sagen, dass das Beispiel mE nach seeehr unglücklich gewählt ist. Das & verwirrt so manchen Neuling. Denn es wird nirgendwo erwähnt, dass man das &-Zeichen benutzt, um Texte (strings) mit Variablen / Zahlen zu "verknüpfen".
Wenn man die Hilfe gründlich liest, ist das das erste, was man lernt. AutoIt kennt nur einen Datentyp: Variant. Alle Daten werden entsprechend des Funktionsaufrufs verwendet.Zitat von Hilfe - <Language Reference> <Datatypes>Some examples:
10 * 20 equals the number 200 (* is used to multiply two numbers)
10 * "20" equals the number 200
"10" * "20" equals the number 200
10 & 20 equals the string "1020" (& is used to join strings)
-
Brauchst nicht die Pipe als Trenner, ein Leerzeichen tuts auch.
[autoit]TCPSend($Connect, "$ACCNEU " & $ACCNEU & " $PWACCNEU " & $PWACCNEU & " $ACCNEUEMAIL " & $ACCNEUEM)
[/autoit][autoit][/autoit][autoit]$str = "$ACCNEU " & $ACCNEU & " $PWACCNEU " & $PWACCNEU & " $ACCNEUEMAIL " & $ACCNEUEM
[/autoit]
$aStr = StringSplit($str, ' ', 2)
; $ACCNEU => $aStr[1]
; $PWACCNEU => $aStr[3]
; $ACCNEUEM => $aStr[5] -
Du hast schon in der Shoutbox 2-mal die richtige Antwort bekommen:
[autoit]$zahl1 = 5
[/autoit][autoit][/autoit][autoit]
$zahl2 = 8
$summe = $zahl2 + $zahl1ConsoleWrite('Summe: ' & $summe & @CRLF)
[/autoit] -
Auch wenn's etwas später kommt, so ist es doch nicht weniger ehrlich:
Happy Birthday. ( Du junger Hahn
)
Bleib wie du bist.
-
Es kann durchaus sein, dass du einen kleineren MTU-Wert als 1492 benötigst. Du kannst deinen max. MTU ermitteln. Wie, das kannst du hier nachlesen.
-
Wenn ich es richtig verstanden habe, brauchst du den Timestamp gar nicht zum Speichern, sondern du zählst nur?
Dann reicht diese Version:Spoiler anzeigen
[autoit]; Objekt erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $oDict = ObjCreate("Scripting.Dictionary"); Aufbau ist wie in einer INI, Schlüssel und Wert
[/autoit] [autoit][/autoit] [autoit]
; Schlüssel wir der Name und Wert wird der Zähler
; in deinem Programm erhältst du den "Namen" in einer Variablen, z.B. $Name
$Name = 'Blub'; für alle auftauchenden "Namen" rufst du _SetKey("Name") auf, dann wird der Name entweder hinzugefügt,
[/autoit] [autoit][/autoit] [autoit]
; oder falls bereits vorhanden, der Zähler erhöhtFunc _SetKey($KEY)
[/autoit] [autoit][/autoit] [autoit]
If Not $oDict.Exists($KEY) Then ; "Name" noch nicht enthalten
$oDict.Add($KEY, '1') ; erstmaliges Auftreten, also Counter = 1
Else
Local $count = $oDict.Item($KEY) ; die Anzahl zu diesem Key
$oDict.Item($KEY) = $count +1 ; den Counter um 1 erhöhen und eintragen
EndIf
EndFunc; die Anzahl kannst du jederzeit mit _GetCount("Name") abfragen
[/autoit]
Func _GetCount($KEY)
If Not $oDict.Exists($KEY) Then Return SetError(1,0,0)
Return $oDict.Item($KEY) ; Rückgabe Anzahl
EndFunc -
Hier bietet sich das "Scripting.Dictionary" Objekt an.
Ich hab mal ein Muster erstellt. Ungetestet, sollte aber laufen.
Spoiler anzeigen
[autoit]; Objekt erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $oDict = ObjCreate("Scripting.Dictionary")
Global $Trenner = '|' ; kannst auch was anderes aber einmaliges nehmen; Aufbau ist wie in einer INI, Schlüssel und Wert
[/autoit] [autoit][/autoit] [autoit]
; Schlüssel wir der Name und Wert wird einfach eine Zeichenkette mit den Timestamps separiert durch einen Trenner deiner Wahl
; und als erster Eintrag im Wert erscheint ein Zähler
; in deinem Programm erhältst du den "Namen" in einer Variablen, z.B. $Name
$Name = 'Blub'
$Stamp = 'DeinTimeStamp'
;....
;....
If Not $oDict.Exists($Name) Then ; "Name" noch nicht enthalten
$oDict.Add($Name, '1' & $Trenner & $Stamp
Else
Local $val = $oDict.Item($Name) ; der/die bereits existierenden Timestamps
Local $split = StringSplit($val, $Trenner, 2)
Local $Anzahl = $split[0] +1 ; Zähler erhöhen
$val = $Anzahl
For $i = 1 To UBound($split) -1 ; Value neu erstellen mit erhöhtem Zähler und neuem Stamp
$val &= $Trenner & $split[$i]
Next
$val &= $Trenner & $Stamp
$oDict.Item($Name) = $val ; den neuen Wert eintragen
EndIf; ======== gezielt die Anzahl abfragen, Aufrufen mit Parameter "Name" =====
[/autoit]
Func _GetCount($KEY)
If Not $oDict.Exists($KEY) Then Return SetError(1,0,0)
Local $val = $oDict.Item($KEY)
Local $split = StringSplit($val, $Trenner, 2)
Return $split[0] ; Rückgabe Anzahl
EndFuncWenn du die Daten auch über einen Programmstart hinaus verwalten möchtest, kannst du sie in eine INI wegschreiben und auch von dort wieder laden. Sieh dir dazu mal die Func's _IniWriteSectionFromObjDict und _IniReadSectionToObjDict aus meiner UDF zum Dictionary Object an (Klick auf meinen UDF-Link in der Signatur, dort findest du weiteres).
-
Wir waren nicht sooo viel. Im günstigsten Fall zu viert.

Aber hat schon Spaß gemacht, auch wenn ich nicht wirkliche Gegner hatte.
-
Aber ne Erklärung oder ne Anwendung wär schon nicht schlecht.
Schau mal in meine Signatur. Da findest du ein Tut.
-
Die einzige Form der Beschleunigung: kurze Variablennamen verwenden. Wie wir feststellen konnten, braucht der Interpreter für längere Variablennamen auch länger zur Ausführung.
-
Hat denn niemand was für die UDF übrig?
Wenn du dein Skript ausschließlich als gepackte Datei anhängst, wirst du wenig Resonanz haben. Dein Skript ist nicht groß, also poste es bitte direkt.
Ich persönlich sehe mir Dateien fast ausschließlich online an. Wenn ich es erst noch herunterladen und entpacken muß ist mein Interesse dahin..