Würde mich aber brennend interessieren an was das liegt
Ich vermute fast, dass das gewollt ist (in SQL gibt es ja z.B. den Befehl DROP zum Löschen). Also werde ich mal schnell meine eigene Drag 'n Drop-Funktion schreiben. ![]()
Würde mich aber brennend interessieren an was das liegt
Ich vermute fast, dass das gewollt ist (in SQL gibt es ja z.B. den Befehl DROP zum Löschen). Also werde ich mal schnell meine eigene Drag 'n Drop-Funktion schreiben. ![]()
Hi,
wie ihr im Skript seht, kann ich die Einträge aus dem Listview per Drag&Drop ins Edit schreiben. Geht auch tadellos.
Ich möchte jedoch den bisherigen Inhalt des Edits erhalten (deshalb verwende ich auch die Append-Funktion) - aber sowie gedropt wird, wird der Inhalt des Edits gnadenlos überschrieben.
Wie kann ich das unterbinden?
#include<GuiListView.au3>
#include<GUIConstantsEx.au3>
#Include <GuiEdit.au3>
Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Form1", 690, 222, 195, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_DROPPED, '_dropped')
$ListView1 = GUICtrlCreateListView("Tabelle", 455, 8, 230, 189)
GUICtrlSendMsg(-1, 0x101E, 0, $LVSCW_AUTOSIZE_USEHEADER )
$LVTable = GUICtrlGetHandle($ListView1)
$Edit1 = GUICtrlCreateEdit("Bla-Bla ", 8, 8, 441, 189)
GUICtrlSetState($Edit1, $GUI_DROPACCEPTED)
$hEdit = GUICtrlGetHandle($Edit1)
For $i = 1 To 10
_GUICtrlListView_AddItem($LVTable, 'Eintrag ' & StringRight('0' & $i, 2))
Next
GUISetState()
While True
Sleep(100)
WEnd
Func Form1Close()
Exit
EndFunc
Func _dropped()
If @GUI_DropId <> $Edit1 Then Return
If @GUI_DragId = $ListView1 Then _
Local $strAppend = _GUICtrlListView_GetItemText($LVTable, _GUICtrlListView_GetSelectedIndices($LVTable))
_GUICtrlEdit_AppendText($hEdit, $strAppend)
EndFunc
zu 1.
Die Suche bemühen, dazu stehen schon x funktionsfähige Beispiele im Forum.
zu 2.
Um in ein Word-Dokument zu schreiben muß es geöffnet sein. Das kann selbstverständlich im Hintergrund sein. Schau dir mal die Funktionen der "Word.au3" an.
zu 3.
Auch das Thema PC sperren wurde in verschiedenen Threads ausgiebig durchgekaut.
Kleiner Tipp:
Starte meinen Bsp.-Client, dort werden ja Ereignisse (eingehende Nachrichten etc.) in die Console geschrieben. Dann schicke von einem anderen Client (mIRC, Miranda...) eine DCC-Anforderung. Dann kannst du genau sehen, wie diese Anforderung vom Protokoll her behandelt wird und brauchst nur analog reagieren.
Füge mal das Error-Handling ein, das hilft dir weiter:
[autoit]Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Initialize a COM error handler
[/autoit][autoit][/autoit][autoit]Func MyErrFunc()
Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
"err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext )
EndIf
Local $err = $oMyError.number
If $err = 0 Then $err = -1
Local $g_eventerror = $err
Endfunc
Machs einfach so:
[autoit]Global $INI = @ScriptDir & '\testini.ini'
Global $strWrite = ''
If Not FileExists($INI) Then IniWriteSection($INI, 'test', 'key1=A'& @LF &'key3=B'& @LF &'key71=C'& @LF &'key45=D')
Global $ReadSec = IniReadSection($INI, 'test')
For $i = 1 To UBound($ReadSec) -1
$strWrite &= 'Key' & $i & '=' & $ReadSec[$i][1] & @LF
Next
IniWriteSection($INI, 'test', $strWrite)
Also nehme ich mal an, dass der Name der Keys (Key1, Key2..) keine Rolle spielt? Es wird nur der erste, zweite... usw. Eintrag abgefragt, unabhängig vom Schlüsselnamen? Oder wie läuft es?
Ich glaube, die Meinungen dazu sind so vielschichtig, wie das Wetter ![]()
Ich persönlich lehne Vista auch kpl. ab, was ich damit bisher ausprobiert habe, gibt keinen signifikanten Grund XP fallen zu lassen.
Ob 64-Bit Technologie aktuell irgendwelche Vorteile bringt, wage ich zu bezweifeln. Dort, wo Unmengen an Daten verwaltet werden und es auf Prozessorfähigkeiten ankommt, verwendet man sowieso kein Windows (Media-Bereich, Publishing, da ist der Apfel unumstrittener König).
Für privaten Bereich ist 64-Bit, sowas wie mit Kanonen auf Spatzen schießen.
Mein ganz privater Tipp: Dual Core 32-Bit, WinXP
Hab grad in der Shoutbox gelesen, dass du an den beiden Schleifenformen
While .. WEnd
Do ... Until
verzweifelst.
Ich zeigs dir am Bsp., beide Varianten machen absolut dasselbe, nur auf andere Art und Weise:
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
WEnd
; oder
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
Siehst du den Unterschied, bzw. die Gemeinsamkeiten? - Nun kannst du es sicher in deinem Skript richtig verwenden.
Wie wärs denn, wenn du ein wirkliches CHILD-Window erstellst? Lies die Hilfe zu den Styles.
Also ich bin nicht gewillt letztendlich dein Skript komplett umzuschreiben. Das mußt du selber tun. Genug Hinweise hab ich dir gegeben.
Ich habe aber den Eindruck, dass es bei dir noch am grundlegenden Verständnis mangelt. Da solltest du dich erst mal mit den Grundlagen beschäftigen und kleine Brötchen backen.
Case $msg = $Tab
$aktivesTabItem = _GUICtrlTab_GetCurSel($Tab)
MsgBox(0, '', 'LAN-IP: ' & @IPAddress1)
[/autoit]Das war das Codestücke aus meinem Bsp. und das funktioniert. Ich habe es nur kommentiert, damit du weißt, was passiert.
Mußt es dann anpassen, wenn du es per Button machen willst.
Edit:
Na, hast du es hinbekommen? Ich habs dir mal hier im Muster angepaßt. Du kannst so auch mitten im Countdown zurücksetzen, nicht erst bei Null.
Und du kannst jetzt auch Stunden eingeben, also:
bis 1 Std. die Minutenzahl, z.B.: 45
darüber h:min, also z.B.: 1:05
#include <guiconstants.au3>
#include <Date.au3>
Global $arBt[8][2], $arIn[8][3], $arCounter[8][2], $y = 10, $input
GUICreate('test')
For $i = 0 To UBound($arBt) -1
$arBt[$i][0] = GUICtrlCreateButton('set Time', 10, $y, 60, 20)
$arIn[$i][0] = GUICtrlCreateInput('', 80, $y, 40, 20)
$arCounter[$i][0] = GUICtrlCreateLabel('', 140, $y+3, 80, 17)
$arBt[$i][1] = GUICtrlCreateButton('Reset', 240, $y, 60, 20)
GUICtrlSetState($arBt[$i][1], $GUI_DISABLE)
$y += 30
Next
GUISetState()
Do
$msg = GUIGetMsg()
_SetCounter()
For $i = 0 To UBound($arBt) -1
If $msg = $arBt[$i][0] Then
$arCounter[$i][1] = 1
$input = GUICtrlRead($arIn[$i][0])
If $input = '' Then ContinueLoop
If StringInStr($input, ':') Then
$input = StringSplit($input, ':')
$input = $input[1]*60 + $input[2]
EndIf
$arIn[$i][1] = $input * 60
$arIn[$i][2] = _NowCalc()
GUICtrlSetState($arBt[$i][0], $GUI_DISABLE)
GUICtrlSetState($arBt[$i][1], $GUI_ENABLE)
ElseIf $msg = $arBt[$i][1] Then
GUICtrlSetState($arBt[$i][0], $GUI_ENABLE)
GUICtrlSetState($arBt[$i][1], $GUI_DISABLE)
GUICtrlSetData($arCounter[$i][0], '')
GUICtrlSetData($arIn[$i][0], '')
$arIn[$i][1] = 0
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE
Func _SetCounter()
Local $sec
For $i = 0 To UBound($arCounter) -1
If $arCounter[$i][1] <> 1 Then ContinueLoop
If $arIn[$i][1] = 0 Then ContinueLoop
$sec = $arIn[$i][1] - _DateDiff("s", $arIn[$i][2], _NowCalc())
Select
Case $sec < 60
GUICtrlSetData($arCounter[$i][0], StringFormat('%02u', $sec) & ' s')
Case $sec < 60*60
GUICtrlSetData($arCounter[$i][0], StringFormat('%02u', Floor($sec/60)) & ':' & _
StringFormat('%02u', Mod($sec,60)) & ' min')
Case $sec < 60*60*24
GUICtrlSetData($arCounter[$i][0],StringFormat('%02u', Floor($sec/3600)) & ':' & _
StringFormat('%02u', Floor(Mod($sec,3600)/60)) & ':' & _
StringFormat('%02u', Mod(Mod($sec,3600),60)) & ' h')
EndSelect
If $sec = 0 Then
SoundPlay(@WindowsDir & '\Media\tada.wav')
$arCounter[$i][1] = 0
EndIf
Next
EndFunc
Makro: @IPAddress1
If $sec = 0 Then
SoundPlay(@WindowsDir & '\Media\tada.wav')
$arCounter[$i][1] = 0
GUICtrlSetState($arBt[$i], $GUI_ENABLE) ; Button wieder Enablen
GUICtrlSetData($arCounter[$i][0], '') ; Zeitanzeige Label löschen
GUICtrlSetData($arIn[$i][0], '') ; eingegebene Zeit löschen
EndIf
Na dasselbe, was unter If $sec = 0 passiert aber halt für das zugehörige Control nur nach Buttondruck.
Nur was muss ich machen , dass man die Reseten kann ...wenn sie auf 0waren ?!
Mal mein letztes Bsp. angucken...
(Da ist das schon drin)
Aber wenn ich "Start" drücke ab Button5-8 dauert es knapp 1minute bis die Zeit da steht und runter zählt...
Kann es sein, dass dein Arbeitsspeicher voll ausgelastet ist ? ![]()
Bei mir erscheint die Anzeige sofort (innerhalb von 2-3 Zehntel Sekunden.
Edit:
LOL ==> du hast ein Sleep von 1000 (= 1 Sekunde!!) in deiner Schleife(zeile 321). Brauchst du gar nicht, hast doch GUIGetMsg. Also Löschen!!
Und übernimm mal die Änderungen, die ich gemacht habe.
1.das programm kann ich nur beenden wenn EINE zeit abgelaufen ist ...
Was ist da bei dir los?? - Ich kann JEDERZEIT beenden (auch logisch laut Code).
2.mann kann ja net 61eingeben .... Sprich 61 minuten nur 60minuten xD
Du wolltest nur Minuten
- also hast du Minuten bekommen. Das kann man aber ändern.
Übrigens läuft es völlig mit normaler Geschwindigkeit, egal ob 4 oder 8 Controls.
#include <guiconstants.au3>
#include <Date.au3>
Global $arBt[8], $arIn[8][3], $arCounter[8][2], $y = 10
GUICreate('test')
For $i = 0 To UBound($arBt) -1
$arBt[$i] = GUICtrlCreateButton('set Time', 10, $y, 60, 20)
$arIn[$i][0] = GUICtrlCreateInput('', 80, $y, 40, 20)
$arCounter[$i][0] = GUICtrlCreateLabel('', 140, $y+3, 80, 17)
$y += 30
Next
GUISetState()
Do
$msg = GUIGetMsg()
_SetCounter()
For $i = 0 To UBound($arBt) -1
If $msg = $arBt[$i] Then
$arCounter[$i][1] = 1
$arIn[$i][1] = GUICtrlRead($arIn[$i][0]) * 60
$arIn[$i][2] = _NowCalc()
GUICtrlSetState($arBt[$i], $GUI_DISABLE)
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE
Func _SetCounter()
Local $sec
For $i = 0 To UBound($arCounter) -1
If $arCounter[$i][1] <> 1 Then ContinueLoop
If $arIn[$i][1] = 0 Then ContinueLoop
$sec = $arIn[$i][1] - _DateDiff("s", $arIn[$i][2], _NowCalc())
Select
Case $sec < 60
GUICtrlSetData($arCounter[$i][0], StringFormat('%02u', $sec) & ' s')
Case $sec < 60*60
GUICtrlSetData($arCounter[$i][0], StringFormat('%02u', Floor($sec/60)) & ':' & _
StringFormat('%02u', Mod($sec,60)) & ' min')
EndSelect
If $sec = 0 Then
SoundPlay(@WindowsDir & '\Media\tada.wav')
$arCounter[$i][1] = 0
GUICtrlSetState($arBt[$i], $GUI_ENABLE)
GUICtrlSetData($arCounter[$i][0], '')
GUICtrlSetData($arIn[$i][0], '')
EndIf
Next
EndFunc