Naja, wie gesagt, das war ungetestet. Ich wusste nicht, wie oft Dein Prozess die FileSize aktualisiert.
BTW: Es gibt keine If-Schleife! Das "If" bezeichnet man als bedingte Anweisung. ![]()
Naja, wie gesagt, das war ungetestet. Ich wusste nicht, wie oft Dein Prozess die FileSize aktualisiert.
BTW: Es gibt keine If-Schleife! Das "If" bezeichnet man als bedingte Anweisung. ![]()
Ich würde es eher mit AdlibRegister erledigen (ungetestet, da InetGet während des downloadens die FileSize nicht aktualisiert):
HotKeySet('{ESC}', '_End')
Global $sFile = @ScriptDir & '\test.iso'
[/autoit] [autoit][/autoit] [autoit]Global $iOldSize
AdlibRegister('_CalcSpeed', 1000)
While Sleep(100)
WEnd
Func _End()
Exit
EndFunc
Func _CalcSpeed()
Local $iSize, $iSpeed
$iSize = FileGetSize($sFile)
If $iSize <> $iOldSize Then
$iSpeed = ($iSize - $iOldSize) / 1024
ToolTip($iSpeed & " kB/s", 0, 0)
$iOldSize = $iSize
EndIf
EndFunc
Das Problem ist, dass Du die GUI-Elemente nach dem erstellen nicht ausblendest. Deswegen passiert das erst, wenn Du den Haken bei der Checkbox setzt und wieder entfernst.
Was Du da versucht hast, $GUI_HIDE als Style einzutragen funktioniert nicht. Dort kommen die Control-Styles rein, nicht der Status. Den Status musst Du mit GUICtrlSetState setzen.
Also z.B. so:
$Input_selectWafer_Von = GUICtrlCreateInput("", 536, 272, 41, 22)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlSetState(-1, $GUI_HIDE)
Unter Win7 funktioniert das:
[autoit]If WinActive("Program Manager") Then MsgBox(64, "", "Kein Fenster ist aktiv")
[/autoit]Ok, dann kannst Du das vergessen. Dein Notebook hat keinen PCMCIA/Expresscard-Slot. Zumindest steht in der Beschreibung nichts davon.
Dann bleibt Dir nur eSATA oder USB2.0
Externe Festplattengehäuse mit eSATA sind in der Tat relativ teuer und können auch Probleme machen beim Hotplugging, wenn die Treiber fehlerhaft sind.
Da wäre es vielleicht sinnvoller, das Notebook mit einer PCMCIA/Expresscard-Erweiterungskarte (USB3.0) auszustatten und dann eine USB3.0-Festplatte zu benutzen.
Das ist auch nicht teurer als eine eSATA-Platte und macht u.U. weniger Probleme.
Er meint wohl, dass auch manche Erwachsene etwas Nachhilfe/Wiederauffrischung in Sachen Kopfrechnen gebrauchen können. ![]()
Da scheint nur die Weiterleitung nicht zu funktionieren:
Es gibt eine neue Version (siehe Post#1).
Die Begrenzung liegt beim Edit standardmäßig bei 30.000 Zeichen (AFAIR).
Das kannst Du mit GUICtrlSetLimit ändern.
Zitat aus der Hilfe:
ZitatIf a picture is set as a background picture, as the other controls will overlap, it's important to disable the pic control and create it after the others controls: GuiCtrlSetState(-1,$GUI_DISABLE).
Bei IsDeclared gibt man keine Variable an, sondern den Variablennamen als String:
[autoit]If Not IsDeclared('a') Then Global $a ; oder: Global $a = 42
[/autoit]Hast ja recht!
Aber man sollte BitAnd und $GUI_CHECKED bzw. $GUI_UNCHECKED benutzen. Gerade bei Checkboxen, weil es dort auch den 3STATE-Modus gibt.
Am besten zusätzlich den Status auslesen und dementsprechend ändern:
While 1
$nMsg = GUIGetMsg()
;UpdateWaferAnzahl()
If BitAND(GUICtrlRead($Checkbox_Antest), $GUI_UNCHECKED) Then
If BitAND(GUICtrlGetState($LabelAntestFKT), $GUI_SHOW) Then
GUICtrlSetState($LabelAntestFKT, $GUI_HIDE)
GUICtrlSetState($Input_AntestFKT, $GUI_HIDE)
EndIf
Else
If BitAND(GUICtrlGetState($LabelAntestFKT), $GUI_HIDE) Then
GUICtrlSetState($LabelAntestFKT, $GUI_SHOW)
GUICtrlSetState($Input_AntestFKT, $GUI_SHOW)
EndIf
EndIf
Switch $nMsg
[/autoit]Edit: Stimmt! So, wie bei Raupi geht's natürlich auch. ![]()
Ja, im FileCommander habe ich diesen Workaround eingebaut. Wobei ich damit auch nicht wirklich zufrieden bin.
Ich glaube, mir gefällt die Lösung mit dem Dummy-Control (Post#2) besser. ![]()
Das hilft hier nicht weiter, weil in der WM_NOTIFY-Funktion die Listview-Einträge noch gar nicht selektiert sind bzw. noch nicht die Richtigen. WM_NOTIFY wird aufgerufen, bevor die Änderungen vorgenommen werden, deswegen würden die von Dir genannten Funktionen falsche Ergebnisse liefern.
Damit schlage ich mich auch gerade rum.
Eine Lösung per WM_NOTIFY habe ich auch nicht parat, nur eine Alternative:
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work
[/autoit] [autoit][/autoit] [autoit]Global $hListView, $hDummy
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]Local $GUI, $hImage, $iItem
$GUI = GUICreate("(UDF Created) ListView Create", 200, 300)
$hDummy = GUICtrlCreateDummy()
[/autoit] [autoit][/autoit] [autoit]$hListView = _GUICtrlListView_Create($GUI, "", 2, 2, 394, 268)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]; Load images
$hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUICtrlListView_SetImageList($hListView, $hImage, 1)
; Add columns
_GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
; Add items
_GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
_GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
_GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
; Loop until user exits
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
GUIDelete()
Return
Case $hDummy
$iItem = ControlListView($GUI, '', $hListView, 'GetSelected')
ConsoleWrite('Item: ' & $iItem & @CR)
EndSwitch
WEnd
EndFunc ;==>_Main
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$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")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_KEYDOWN ; A key has been pressed
ConsoleWrite("$LVN_KEYDOWN" & @CRLF)
GUICtrlSendToDummy($hDummy)
; No return value
Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
ConsoleWrite("$NM_CLICK" & @CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Vielleicht hilft Dir auch dieses kleine Diagramm weiter: http://www.autoit.de/index.php?page=Thread&postID=120376#post120376
Ich denke, es wird am besten sein, den Thread zu sperren. Wir wollen dieses Thema nicht supporten, weil man damit viel Unsinn treiben kann.
Dafür benutzt man nicht WinKill. Bei einer eigenen GUI benutze: GUIDelete.