An einen Mod: Der Thread gehört in H&U und ist gelöst
Verschoben (nach H&U) und als gelöst markiert!
An einen Mod: Der Thread gehört in H&U und ist gelöst
Verschoben (nach H&U) und als gelöst markiert!
Nun gibts aber einen kleinen Fehler: Pro SMS kann man 160 Zeichen verwenden, dh. der SMS-Zähler sollte eigentlich erst bei 161 Zeichen zu 2 SMS wechseln
Dann ändere das folgendermassen: GUICtrlSetData($idLABEL4, Int(($iLen - 1) / 160) + 1)
Probier's mal so:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $hGUI = GUICreate("SMS Box", 600, 600)
Global $idLC = GUICtrlCreateInput("0041(0)", 10, 5, 45, 20, $ES_READONLY)
Global $idVORWAHL = GUICtrlCreateCombo("76", 55, 5, 40, 20)
GUICtrlSetData(-1, "77|78|79")
Global $idNR = GUICtrlCreateInput("", 93, 5, 60, 20, $ES_NUMBER)
GUICtrlSetLimit(-1, 7)
Global $idTEXT = GUICtrlCreateEdit("", 10, 40, 300, 200, BitOR($GUI_SS_DEFAULT_EDIT, $ES_MULTILINE))
GUICtrlSetLimit(-1, 800)
Global $idSENDEN = GUICtrlCreateButton("Senden", 30, 250, 85, 25)
Global $idENDE = GUICtrlCreateButton("Schliessen", 130, 250, 85, 25)
Global $idDEL = GUICtrlCreateButton("Löschen", 230, 250, 85, 25)
Global $idLABEL1 = GUICtrlCreateLabel("Natelnummer eingeben", 155, 8, 150, 20)
Global $idLABEL2 = GUICtrlCreateLabel("0", 320, 40, 30, 20)
Global $idLABEL3 = GUICtrlCreateLabel("Anzahl Zeichen (max. 800)", 360, 40, 130, 20)
Global $idLABEL4 = GUICtrlCreateLabel("0", 320, 70, 30, 20)
Global $idLABEL5 = GUICtrlCreateLabel("Anzahl SMS (max. 5)", 360, 70, 100, 20)
Global $oIE = ObjCreate("Shell.Explorer.2")
Global $GUIActiveX = GUICtrlCreateObj($oIE, 10, 300, 580, 285)
GUISetState(@SW_SHOW, $hGUI)
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $idENDE
Exit
Case $idDEL
GUICtrlSetData($idTEXT, "")
GUICtrlSetData($idNR, "")
Case $idSENDEN
$NR = "0041" & GUICtrlRead(4) & GUICtrlRead(5)
$TEXT = GUICtrlRead(6)
MsgBox($MB_OKCANCEL, "Senden?", "http://www.lox24.eu/API/httpsms.php?konto=xxx&password=xxx&service=11171&from=0041444444444&to=" & $NR & "&text=" & $TEXT)
$oIE.navigate("http://www.lox24.eu/API/httpsms.php?konto=xxx&password=xxx&service=11171&from=0041444444444&to=" & $NR & "&text=" & $TEXT)
EndSwitch
WEnd
Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode, $sText, $iLen
$hWndFrom = $lParam
$iIDFrom = _WinAPI_LoWord($wParam)
$iCode = _WinAPI_HiWord($wParam)
Switch $iIDFrom
Case $idTEXT
Switch $iCode
Case $EN_CHANGE
$sText = GUICtrlRead($idTEXT)
$iLen = StringLen($sText)
GUICtrlSetData($idLABEL2, $iLen)
GUICtrlSetData($idLABEL4, Int($iLen / 160) + 1)
EndSwitch
Case Else
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_COMMAND
Alles anzeigen
Ich hab nun mal folgendes zusammengeschustert, ich glaube, man merkt, dass ich ein blutiger Anfänger bin, ist erst mein zweites Script:
Dieser ganze Script-Teil ist Quatsch (Entschuldigung, für die harten Worte)!
Poste bitte Dein ganzes Script, sonst kann man Dir nicht vernünftig helfen.
ich habe den Code-Generator Thread gelesen, der Vorteil ist mir immer noch schleierhaft.
Der Vorteil ist, dass man nur die Exe-Datei weitergeben muss (keine zusätzlichen Dateien, keine Installation).
Alle Ressourcen befinden sich in der Exe-Datei, Außerdem befinden sich die Bilder, Sounds usw. bereits im RAM (schnelleres anzeigen/abspielen).
Kann man sich das irgendwo mal durchlesen wie man sich so ne Glocke "baut"? Also nach welchem Schema das gehen muss?
Schema:
1. Man nehme eine MP3-Datei mit dem Glockenton.
2. Man generiert daraus einen BASE64-String (mit dem Code-Generator von UEZ).
3. Diesen BASE64-String kann man in sein Script einfügen (in meinem Script die Funktion "_Glocke()" ziemlich weit unten). Außerdem werden die beiden Funktionen ("_WinAPI_Base64Decode", "_WinAPI_LZNTDecompress") zum "entpacken" benötigt.
4. Wenn Du statt einer MP3- eine WAV-Datei nimmst, kannst Du sie mit _WinAPI_PlaySound direkt aus dem Speicher abspielen. Beim MP3 kannst Du das mit der BASS-UDF auch tun oder Du speicherst die MP3-Datei auf Festplatte und nutzt die _Sound-Befehle (_SoundOpen, _SoundPlay, _SoundClose) von Autoit.
Ich glaube, der Bedarf an einstellbaren Sekunden ist da
Dann nimm das Script aus dem Anhang. ![]()
Dort lässt sich die Zeit in 10-Sekunden-Schritten einstellen.
Wer noch kleinere Schritte braucht, kann das in der Inidatei ändern.
Ohne Oscars Arbeit jetzt schlecht reden zu wollen aber es ist und bleibt ein einfacher Timer.
Stimmt, das ist nur ein einfacher Timer!
Das meiste davon hatte ich sowieso schonmal in anderen Programmen benutzt. Die Glocke, der Zeichensatz, die Pfeile, die Progressbar, alles schon mehrfach benutzt. ![]()
Aber neu zusammengestellt ergibt es halt einen Kurzzeittimer. ![]()
Täusche ich mich, oder lassen sich 'nur' die Minuten einstellen, nicht aber die Sekunden ?
Korrekt! "Nur" die Minuten.
Ich fand das für einen Kurzzeittimer ausreichend. Obwohl sich das leicht ändern liesse.
Ich habe jetzt mal so ein Programm geschrieben: Tea-Timer
In "Hilfe & Unterstützung" wurde nach einem Tea-Timer gefragt.
Ich habe jetzt mal so ein kleines Programm geschrieben. Man kann die Zeit zwischen 1 und 99 Minuten einstellen und nach Klick auf [Start] zählt diie Zeit runter bis auf Null.
Die Zeit wird mit einem 7-Segment-Font dargestellt und es gibt eine Progressbar, die entsprechend geleert wird. Wenn Null erreicht wird, ertönt eine Glocke und es erscheint eine MsgBox.
Man kann die Zeit auf 3 verschiedene Arten verstellen:
1. mit den Pfeilen auf der rechten Seite
2. mit den Tasten [up] und [down]
3. mit dem Mausrad (hoch / runter), wenn sich der Mauszeiger über der Zeitanzeige befindet
Die Zeit lässt sich aber nur verändern, wenn der Timer gerade nicht läuft. Der [Reset]-Button setzt die Zeit wieder auf die Ausgangszeit zurück und hält den Timer an.
Die eingestellte Zeit wird in einer Inidatei gespeichert, sodass sie beim nächsten Start wieder zur Verfügung steht.
Screenshot:

Im ZIP-Archiv (Anhang) befindet sich das Script, die UDF, die Exe und das Icon.
Local $aFileList = _FileListToArray($sPath, "*.txt", 1)
Äh, Du willst HTML-Dateien einlesen und benutzt "*.txt" als Filter?
Ich habe meine Funktionen jetzt noch um die Möglichkeit erweitert, die Positionsdaten von mehreren Fenstern in einer einzelnen Datei zu speichern. Dazu muss man lediglich den Block (je 44 Bytes / Strukturgröße) angeben.
Die Funktion "_WindowOnDesktop" habe ich auch noch etwas angepasst. Danke Bitnugger!
Neue Version der UDF in Post#1.
wenn ich allerdings das Gui von anfang gehided haben möchte, also praktisch nie GuiSetState(@SW_SHOW, $form) aufrufe dann ploppt das GUI bis zum GuiSetState(@SW_HIDE, $form) auf.
Ja, Du musst GUISetState(@SW_HIDE) vor dem Aufruf von _LoadWindowPlacement() aufrufen.
Bitnugger hatte in diesem Thread die Funktion _WinAPI_GetWindowPlacement() vorgeschlagen, um die Positionsdaten eines Fensters bei Programmende zu speichern.
Tatsächlich ist diese WinApi-Funktion sehr gut dafür geeignet. Vor allem, weil man damit auf einen Schlag alle Fensterdaten abspeichern kann. Also auch, ob maximiert/minimiert.
So habe ich mir gedacht: Am besten beim Programmende gleich die ganze Struktur speichern und beim nächsten Programmstart wiederherstellen.
Dafür habe ich hier mal eine kleine UDF geschrieben, die diese beiden Funktionen ("_LoadWindowPlacement" und "_SaveWindowPlacement") zur Verfügung stellt.
Außerdem gibt es noch eine Funktion, um sicherzustellen, dass sich das Fenster auf dem Desktop befindet. Benutzer von mehreren Bildschirmen werden das nachvollziehen können: Wenn man ein Fenster auf dem zweiten Bildschirm positioniert hat und dieser zweite Bildschirm beim nächsten Programmstart gerade nicht aktiviert ist. Dann wird das Fenster an einer Position geöffnet, die man nicht erreichen kann. In dem Fall hilft meine Funktion "_WindowOnDesktop". Sie verschiebt das Fenster dann auf den sichtbaren Desktop.
Beispiel:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include 'WindowPlacement.au3'
Global Const $sPlacementFile = @ScriptDir & '\WindowPlacement.bin'
Global $iWidth = 320, $iHeight = 200, $iPosX = -1, $iPosY = -1
Global $sStyle = BitOR($WS_CAPTION, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX)
Global $hGui = GUICreate('Testfenster1', $iWidth, $iHeight, $iPosX, $iPosY, $sStyle)
Global $hGui2 = GUICreate('Testfenster2', $iWidth, $iHeight, $iPosX, $iPosY, $sStyle)
Global $ret = _LoadWindowPlacement($hGui, $sPlacementFile, 0) ; die Positionsdaten aus Block 1 laden und fuer Fenster 1 setzen
If @error Then GUISetState(@SW_SHOW, $hGui)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : LoadWindowPlacement1 = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Global $ret = _LoadWindowPlacement($hGui2, $sPlacementFile, 1) ; die Positionsdaten aus Block 2 laden und fuer Fenster 2 setzen
If @error Then GUISetState(@SW_SHOW, $hGui2)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : LoadWindowPlacement2 = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$ret = _WindowOnDesktop($hGui) ; Sicherstellen, dass sich das Fenster 1 auf dem Desktop befindet
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : WindowOnDesktop1 = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$ret = _WindowOnDesktop($hGui2) ; Sicherstellen, dass sich das Fenster 2 auf dem Desktop befindet
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : WindowOnDesktop2 = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
$ret = _SaveWindowPlacement($hGui, $sPlacementFile, 0) ; die Positionsdaten fuer Fenster 1 in Block 1 speichern
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : SaveWindowPlacement1 = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$ret = _SaveWindowPlacement($hGui2, $sPlacementFile, 1) ; die Positionsdaten fuer Fenster 2 in Block 2 speichern
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : SaveWindowPlacement2 = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Exit
EndSwitch
WEnd
Alles anzeigen
Edit 13.04.18 Neue Version 1.1:
- Man kann jetzt die Daten von mehreren Fenstern (GUIs) in einer einzelnen Datei speichern (pro Fenster 44 Bytes = 1 Block).
- Die Funktion "_WindowOnDesktop" noch etwas angepasst. Danke Bitnugger!
Wenn Du nur im sichtbaren Listview suchen willst, ist das mit "_GUICtrlListView_FindInText" viel einfacher. Ändere mal Deine Funktion "_suchen()" in diese:
Func _suchen()
_werte_abfragen()
_GUICtrlListView_SetItemSelected($list_datenbankinhalt, -1, False)
Local $iIndex = -1
Do
$iIndex = _GUICtrlListView_FindInText($list_datenbankinhalt, $wert_input_suche, $iIndex, False)
If $iIndex > -1 Then _GUICtrlListView_SetItemSelected($list_datenbankinhalt, $iIndex)
Until $iIndex = -1
EndFunc
Nachtrag: Du musst noch die Mehrfachselektion beim Listview erlauben:
$ProgPath = StringTrimRight(@ScriptDir,"8")
Was soll das denn?
Wie sieht denn der Pfad aus? a) wo das Script liegt und b) wo das zu startende Programm liegt?
Und wie sieht Dein anderes Script ("QueueWatch.exe") aus?
Das kommt darauf an, wie Du die Suchtreffer markieren willst?
- Nur das normale markieren (Auswahl)?
- Farbe der Items ändern?
- Haken setzen (Listview mit Checkboxen)?
In jeden Fall wäre es aber hilfreich, wenn Du Dein Script postest und einen (Beispiel-)Datensatz.
Oscar move das doch bitte mal nach Talk / OT
Hiermit geschehen! ![]()
wäre es evtl noch zusätzlich sortierbar nach Datum/Zeit, also das älteste zuerst angezeigt werden (oder umgedreht)?
Einfach die Dateiliste sortieren. Ich habe mal eine Funktion eingebaut.
Außerdem funktioniert das Treeview jetzt ohne das Dummy-Control. Ich wusste, dass ich irgendwo die Lösung dafür hatte (habe ich wiedergefunden).
Im Anhang eine aktuelle Version.