Ich danke für die Hilfe, habs jetzt mit ListBox umgesetzt.
Beiträge von SmilingStar
-
-
Hallo SmilingStar,
wrum immst du icht eine ListView mit nur eier Spalte, sieht optisch etws besser aus und dein Vorhaben lässt sich problemlos lösen. Wen du aber bei einer ListBox bleibe willst slltest du dir i der Hilfe
[autoit]_GUICtrlListBox_GetSelItems
[/autoit]inkl. dem Besipiel anschauen,
mfg autoBert
Hab mir gerade mal Listview angeschaut und den Style LVS_LIST gesetzt um nur eine Spalte zu erhalten. Ich kann auch ohne Probleme mehrere Strings auswählen, die vorher per ListViewItem geschrieben wurden.
Hab dafür das Bsp etwas zerlegt.
Bekomm jedoch bei Auswahl mehrerer Strings und Klick auf den Button nur 1 String angezeigt -
Guten Morgen
Ich habe folgendes Anliegen, bei dem ich auf eure Hilfe hoffe:
In meiner GUI möchte ich mit GUICtrlCreateList mehrere Strings anbieten, die man durch anklicken auswählen kann.
Es soll möglich sein, auch mehrere Strings anzuklicken.
Soweit ich schon mitbekommen hab, kann ich dies durch den Style LBS_MultipleSel erreichen.Wenn ich nun den Wert dieses Ctrl mit GuiCtrlRead auslese und testweise in einer MsgBox ausgebe, erhalte ich jedoch nur den zuletzt angeklickten String.
Hat jemand eine Idee, wid ich mein Ziel, mehrere Strings auszuwählen und die gewählten Strings auszulesen, umsetzen kann ?
-
Mein Vorschlag ist:
- Nur _WordDocFindReplace verwenden
- Mehr Fehlerprüfungen einbauen (so nach dem Motto: Hat der letzte Befehl auch funktioniert? etc.)
- Die Protokollierung in eine Datei durchführen (_FileWriteLog). Das nervt den Benutzer nicht, bringt Dir aber eine saubere Aussage, wo der Fehler liegt.
Sehe ich das richtig, dass die zu ersetzten Zeile immer nach dem selben Muster aufgebaut ist: "n. Termin am TT. Monat JJJJ" wobei n ab 1 hochgezählt wird?
Das Skript wäre relativ leicht entsprechend anzupassen.Grundsätzlich ist die zu ersetzende Zeile nach diesem Muster aufgebaut und wird entsprechend mit den Variablen für n. Termin und Datum ersetzt.
Aber wie bereits gesagt, die zu ersetzende Zeile "n. Termin am TT. Monat JJJJ" ist nicht immer in der gleichen Anzahl wie die zu schreibenden Termine vorhanden.
Anders gesagt:
- n. Termin am TT. Monat JJJJ ist maximal 4 mal in dem Text vorhanden
- die Anzahl der zu schreibenden Termine kann sich aber auch auf 6,8,10 etc. belaufenFür alle Termine ab dem 5. Termin bietet sich _WordDocFindReplace also nicht mehr an.
Für genauere Erklärung wie ich solche Fehlerprüfungen wie "Hat der letzte Befehl auch funktioniert?" umsetze und per _FileWriteLog dokumentiere wäre ich dankbar.Die theoretischen Gedankengänge was ich alles prüfen sollte, hatte ich ja auch schon..
-
Anstelle der unsicheren Send-Methode solltest du dein Skript komplett auf die _Word...-Finktionen (in der Word.au3) aufbauen,
mfg auoBert
Würd ich gern, da aber für die Termine nur 4 "Vorlage-Zeilen" existieren und es gern mal deutlich mehr werden können, muss ich die entsprechenden Zeilen dann selbst Schreiben. Und eine Möglichkeit die Word-Suche per _WordDoc-Funktion zu bedienen bzw die Cursor-Position damit zu setzen, hab ich noch nicht gefunden.
Davon abgesehen scheint mein Problem ja gerade bei einem _WordDocFindReplace aufzutauchen. -
Die MsgBoxen & ConsoleWrites sollen ja auch nur dir helfen, den Fehler zu finden, danach mchst du sie einfach wieder weg.

Lg chess
Der Gedanke hinter der Verwendung von MsgBox bzw ConsolWrite, den m-obi hatte, ist mir schon verständlich, trotzdem Danke.
Wie ich ja schrieb, kompiliertes Script und unregelmäßiges Auftreten des Fehlers. -
Du kannst ja zwischen den Zeilen ein paar ConsoleWrite machen oder MsgBoxen. Dann weißt du ja wo er hängt oder in eine schleife stecken bleibt. Warum hast du eigentlich bei der While-Schleife keine For-Schleife genommen? Wenn du sowieso eine Variable hochzählst.
Korrigiere mich wenn ich falsch liege aber ConsoleWrite hilft mir bei einem kompilierten Script recht wenig?!
Und das Problem des aufhängen tritt wie gesagt nicht dauerhaft auf. Den Benutzer dann pauschal bei jeder Zeile mit einer MsgBox zu beglücken, sorgt vermutlich auch für mehr Ärger als alles andere.
Würde ich eine Stelle im Array abfragen die leer ist, müsste das Script ja eigentlich abschmieren. Und da er, wenn es passiert, immer nach dem 2. Termin stoppt, wäre er ja am If $countarray > 2 hängen geblieben. Eine Schleife in der er stecken geblieben ist, sollt man eigentlich ausschließen können. Ebenso müsste er das If ganz Dezent ignorieren, wenn meine Variable $countarray aus irgend einem Grund leer und damit Null ist.
Braucht _WordDocFindReplace das Word-Dokument dauerhaft als aktives Fenster ?Für die While-Schleife statt einer For-Schleife gibts eigentlich keinen bestimmten Grund, höchstens Unwissenheit das etwas anderes besser funktionieren könnte.
-
Hallo
Ich hab ein kleines Problem, bei dem ich auf eure Hilfe hoffe.
In meinem Script starte ich per Hotkeyset eine Funktion zur Bearbeitung eines Word-Dokuments.
Vor der Bearbeitung frage ich unter anderem einen Termin und die Anzahl an folgenden Terminen ab.
Der vom Benutzer eingegebene Termin wird anhand der Punkte zwischen Tag, Monat und Jahr geteilt und in eine Variable geschrieben.Da der Benutzer nur die Anzahl der folgenden Termine angibt und der Abstand genau ein Monat ist, werden diese Termine vom Script generiert und in ein eigenes Array $termin geschrieben.
Spoiler anzeigen
[autoit]Do
[/autoit]
$day = $faell[1]
If $faell[2] = 12 Then
$faell[2] = 1
$faell[3] = $faell[3] + 1
Else
$faell[2] = $faell[2] + 1
EndIf
If $faell[2] = 2 And $faell[1] > 29 Then $day = 29
If $faell[2] = 4 And $faell[1] > 30 Then $day = 30
If $faell[2] = 6 And $faell[1] > 30 Then $day = 30
If $faell[2] = 9 And $faell[1] > 30 Then $day = 30
If $faell[2] = 11 And $faell[1] > 30 Then $day = 30
_ArrayAdd($termin, _Pad($day) & ". " & _Monat($faell[2]) & " " & ($faell[3]))
$atermine = $atermine - 1
Until $atermine = 1Anschließend wird per _WordDocFindReplace der 1. Termin und alle weiteren Termine aus dem Array $termin in das Word-Dokument eingesetzt.
Hierbei passiert es nun ab und zu, dass das Script nach dem 2. Termin einfach stehen bleibt - scheinbar. Es passiert nichts sichtbares, das Script stürzt auch nicht mit einer entsprechenden Fehlermeldung ab.Hat jemand eine Idee woran dies liegen kann oder noch besser, wie man diesen "Aufhängen" im Script erkennen und das Abarbeiten erneut anstoßen kann ?

Zur Verständnis der entsprechende Script-Code ab dem 2. Termin
Spoiler anzeigen
[autoit]$countarray = UBound($termin)
[/autoit] [autoit][/autoit] [autoit]
_WordDocFindReplace($oDoc, "2. Termin am TT. Monat JJJJ", "2. Termin am " & $termin[1])
If $countarray > 2 Then _WordDocFindReplace($oDoc, "3. Termin am TT. Monat JJJJ", "3. Termin am " & $termin[2])
If $countarray > 3 Then
_WordDocFindReplace($oDoc, "4. Termin am TT. Monat JJJJ", "4. Termin am " & $termin[3])
EndIf
If $countarray > 4 Then
$nrtermin = 5
$x = 4
Send("^f")
WinWait("Suchen und Ersetzen")
Send("am " & $termin[3] & "{ENTER}")
Sleep(500)
If WinExists("Microsoft Office Word", "Der Suchvorgang innerhalb des Dokuments ist abgeschlossen. Das gesuchte Element konnte nicht gefunden werden.") Then
WinActivate("Microsoft Office Word", "Der Suchvorgang innerhalb des Dokuments ist abgeschlossen. Das gesuchte Element konnte nicht gefunden werden.")
Send("{ENTER}")
Send("{ESC}")
Else
Send("{ESC}")
WinWaitClose("Suchen und Ersetzen")
Sleep(300)
Send("{RIGHT}{ENTER}")
Sleep(50)
;Send("{ENTER}")
While $x < $countarray
Send($nrtermin & ". Termin am " & $termin[$x] & " ")
Sleep(100)
$nrtermin = $nrtermin + 1
$x = $x + 1
If $x < $countarray Then Send("{ENTER}")
WEnd
EndIfEndIf
[/autoit] -
Alles anzeigen
So?
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>$Form1 = GUICreate("Form1", 633, 447, 192, 124)
[/autoit] [autoit][/autoit] [autoit]
$TreeView = GUICtrlCreateTreeView(128, 120, 385, 281)
$1=GUICtrlCreateTreeViewItem("1", $treeview)
$2=GUICtrlCreateTreeViewItem("2", $treeview)
GUICtrlCreateTreeViewItem("a", $1)
GUICtrlCreateTreeViewItem("b", $2)
GUICtrlCreateTreeViewItem("c", $2)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEndFunc WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
[/autoit]
#forceref $hWndGUI, $MsgID, $wParam
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3)
Select
Case $wParam = $TreeView
Select
Case $event = $NM_DBLCLK
MsgBox(0,"","Doppelklick")
EndSelect
EndSelect
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFuncKommt mir aus dem englischen Forum bekannt vor. Wenn ich mich nicht ganz irre, fehlt in deiner Version aber die Definition von $NM_DBLCLK bzw. damit dem doppelten Mausklick ?!
-
Du kannst machen, dass wenn IsPressed("01") gedrückt wird, dass dann eine Zeit lang auf einen Zweiten Klick gewartet.. wird wenn der dann kommt dann öffnest du es..
Hm.. und wie soll ich das machen ?
So habe ich es immer gemacht :
Naja funzt aber geht bestimmt auch anders und meins ist immer schlecht
Dank dir aber hab ich was an den Augen oder steht bei dir im Quelltext nirgends was von doppelten Mausklicks ?

-
Mal eine hoffentlich kurze Frage:
Ich nutze in meiner GUI GUICtrlCreateTreeViewItem
Wenn auf ein solches Item ein Doppelklick mit der Maus ausgeführt wird, soll unter anderem der Inhalt eines Edit gelesen werden.
Gibt es eine Möglichkeit, den Doppelklick zu "bemerken" ?Hab zwar IsPressed("01") für die linke Maustaste gefunden aber damit dürfte er ja bereits bei einem Klick reagieren
-
http://www.autoitscript.com/wiki/FAQ#Why_d…un_my_script.3F
vll hilf dir das weiter.
Wunderbar, dank dir. Der Wechsel von Send auf Controlsend scheint zu helfen. -
Was willst du machen...?
Willst du dass wenn eine Taste gedrückt wird dann irgedwas passiert..
ich versteh nicht ganz dein Problem und was du tun willstIch HABE einen Hotkey mittels Hotkeyset definiert. In meinem Beispiel drückt man STRG und g um die im Quelltext gezeigte Funktion aufzurufen. Diese schreibt einen Text in den Zwischenspeicher und sendet anschließend STRG und v um den Text an der Cursorposition auszugeben - wie im Quelltext ersichtlich.
All das ist kein Problem.Es passiert jedoch, dass nach dem ausführen der Funktion, also dem Einfügen des Texts, die STRG-Taste weiter gedrückt bleibt. Wie kann ich das verhindern ???
-
Niemand auch nur den Hauch einer Idee, wie ich dieses "gedrückt bleiben der Strg-Taste" verhindern kann ?
-
Hallöchen
Hoffe ihr könnt mir wieder helfen.
Ich habe ein Script das per While-Schleife dauerhaft läuft und beim Start Text aus einer Datei in ein Array liest - soweit kein Problem.
[autoit]
Um diese Texte auszugeben, habe ich via Hotkeyset mehrere Hotkeys definiert.
Die Hotkeys sind dabei immer eine Verbindung aus STRG und einem Buchstaben oder einer Zahl.
Wenn ein entsprechender Hotkey, als Bsp. Hotkeyset("^q","_text1") also STRG+q, gedrückt wird, sieht die aufgerufene Funktion wie folgt aus:
[/autoit]
Func _text1()
$clip = clipget()
clipput($array[1])
Sleep(50)
Send("^v")
clipput($fzeile)
Sleep(50)
Send("^v")
clipput($clip)
EndFuncMein Problem ist, dass ab und zu die STRG-Taste gedrückt bleibt und ich noch einmal manuell STRG drücken muss.
Hab schon versucht im Sendbefehl das ^-Zeichen mit {LCTRL} und {LCTRLDOWN} bzw. {LCTRLUP} zu ersetzen aber keine Besserung.Hat jemand ne Idee wie ich ihn am Ende der Function dazu bringen kann, die STRG-Taste auf jeden Fall wieder zu lösen ?

-
Wunderbar, genau so hat ich's mir vorgestellt.
Dank dir -
Nabend zusammen
Ich bräuchte für ein eventuell simples Problem Eure Hilfe.
In einer GUI habe ich mehrere Checkboxen erstellt, welche der Benutzer bei Bedarf anklickt.
Sobald der Benutzer auf ok klickt, wird der Status jeder Checkbox geprüft und der dazu gehörige Name in ein Array geschrieben, wenn die Checkbox angeklickt ist - soweit kein Problem.Diesen Array-Inhalt möchte ich nun in einer Aufzählung hintereinander geschrieben wieder ausgeben. Bis jetzt geschieht das mittels _ArrayToString und dem Trennzeichen "und"
Mein Problem ist, bei zwei Werten genügt das Wörtchen und zur Aufzählung. Sobald es jedoch drei Werte oder mehr werden, sollen diese mittels Komma getrennt und nur der letzte Wert mittels "und" aufgezählt werden - wie die klassische Aufzählung aus dem Deutschunterricht.
Hat jemand eine Idee, wie ich das hin bekomme ?
Besteht vielleicht die Möglichkeit, die Menge an Werten in einem Array zu zählen und in das Array zwischen die Werte ein Komma als neuen Wert einzutragen, bis nur noch 1 Wert übrig ist ? -
Nabend
Hab ein kleines Problem bei dem Ihr mir hoffentlich weiter helfen könnt.
Mittels Hotkey Rufe ich in meinem Script eine Funktion auf, in der das aktive Fenster ausgelesen und der Titel an WordAttach übergeben wird.
$Name = Wingettitle("[ACTIVE]")
$Hand = _WordAttach($Name,"Title")Solang kein weiteres Word-Dokument offen ist, funktioniert das auch bestens.
Ich hab jedoch meist ein anderes Word-Dokument offen - dadurch auch einen eigenen Prozess WinWord.exe
Wenn ich in der Situation meine Funktion aufrufe, gibt's nur ein NoMatch.Wer ne Idee woran es liegt ?
-
Ich müsste die gesamte Struktur der Seite kennen, um an einen bestimmten Inhalt zu kommen...
Aber du kannst das von _IECreate zurückgelieferte Objekt wie das window-Objekt in Javascript behandeln.
Nützlich sollten dabei .getElementById und .childNodes sein.Ich versteh ehrlich gesagt nur Bahnhof..

-
_INetGetSource wird nicht funktionieren, weil die URL nicht den gewünschten Inhalt enthält.
Die URL wird in einem IE-Fenster geöffnet und dann nach Eingabe einer Kundennummer die von mir genannte Tabelle zurück gegeben. Laut Quelltext mittels <TABLE>
Ich muss mich also auf das offene IE-Fenster konzentrieren - wohl erstmal mit _IEAttach zuordnenSeite kann ich daher auch nicht sagen, weil es sich nur um eine "Anwendung" in der Firma handelt.