1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. SmilingStar

Beiträge von SmilingStar

  • Word - Inhalt der Kopfzeile bearbeiten

    • SmilingStar
    • 1. Mai 2014 um 20:47
    Zitat von BugFix

    Ja klar ersetzt du die kpl. Kopfzeile, ist doch der einfachste Weg:
    - Kopfzeile alt auslesen
    - wie gewollt zu neuer Kopfzeile ändern
    - Kopfzeile neu schreiben

    Mir scheint das dann noch nicht klar genug zu sein.

    Wie suche/ersetze ich innerhalb von

    [autoit]

    $oWord.ActiveDocument.Sections(1).Headers($wdHeaderFooterPrimary).Range.Text

    [/autoit]

    mit der von mir genannten Funktion _Word_DocFindReplace ? ?(

    Soweit ich dem Folgen kann, steckt in

    [autoit]

    $oWord.ActiveDocument.Sections(1).Headers($wdHeaderFooterPrimary).Range

    [/autoit]

    ein Range, vergleichbar mit dem Ergebnis von Word_DocFind.
    Und mit dem Zusatz .Text = $sHeaderNew wird dieses Range - und damit der komplette Header inklusive Formatierungen etc - sofort mit dem Wert der angegebenen Variable überschrieben.

  • Word - Inhalt der Kopfzeile bearbeiten

    • SmilingStar
    • 1. Mai 2014 um 18:25

    Hm... damit ersetze ich aber die komplette Kopfzeile.
    Ich möchte nur ein Teil in der Kopfzeile ersetzen/ergänzen, da diese entsprechend eines Briefkopfs bereits weitere Details wie den Absender enthält.

    Es würde also genügen, wenn man entweder die Kopfzeile aktivieren kann oder definieren kann, wo _Word_DocFind sucht.
    Die Word-Suche findet den gesuchten Inhalt in der Kopfzeile, es sollte meiner Meinung nach also auch mit _Word_DocFind funktionieren - hoffe ich jedenfalls.^^

  • Mit GUI im Vordergrund halten und im Hintergrund Klicks ausführen

    • SmilingStar
    • 30. April 2014 um 19:56
    Zitat von triban1337

    Mit controlclick() funktioniert es nicht habe es schon ausprobiert auch schon genau wie Kanashius es geschrieben hat.

    Was fast zu Funktionieren scheint ist

    Code
    Send(MouseClick("LEFT", 132, 14))

    Jedoch buggt es dann genau an dieser Stelle dieser Klick wird immer und immer wieder ausgeführt und das Script läuft nicht mehr weiter wie ein ewiger loop :cursing:


    Dir wird keiner Helfen können, wenn du nicht auch uns antwortest. ;)
    Dazu gehört auch eine nähere Erläuterung deines Vorhabens.

    Bis jetzt wissen wir nur, dass du in irgend einem Programm irgend etwas anklicken willst, aus irgend einem Grund dieses Programm aber gleichzeitig mit einem GUI überlagern willst

  • Word - Inhalt der Kopfzeile bearbeiten

    • SmilingStar
    • 29. April 2014 um 19:28

    Nabend

    Ich hab zu meiner Frage bereits Tante Google bemüht, aber keine wirkliche Antwort gefunden.

    In einem Word-Dokument nutze ich _Word_DocFindReplace bzw. _Word_DocFind, um vorhandenen Text zu ändern, ergänzen etc.
    Das gleiche möchte ich nun mit dem Inhalt der Kopfzeile tun, darin befindet sich zum Bsp. eine Empfängeranschrift, habe jedoch keine Idee, wie ich auf die Kopfzeile zugreife bzw. sie zum bearbeiten öffne und schließe. ?(
    Vermutlich ist das wieder eine leichte Kleinigkeit, hoffe die fällt jemanden von Euch ganz spontan ein. ;)

    Schonmal Danke für eure Hilfe

  • Mit GUI im Vordergrund halten und im Hintergrund Klicks ausführen

    • SmilingStar
    • 29. April 2014 um 19:16

    Versteh ich das richtig, dein GUI soll das Programm überlagern/verdecken und trotzdem die Klicks in diesem ermöglichen?
    Also das GUI soll den Fokus haben aber dennoch die Eingaben mit deiner Maus ignorieren, als hätte dein GUI nicht den Fokus?

    Klingt etwas verwirrend, wozu soll denn dein GUI dienen, warum das Programm überlagern?

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 6. April 2014 um 20:40

    Das ist klar, werd ich nachher gleich mal ausprobieren.
    Vielen Dank für deine Hilfe.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 6. April 2014 um 19:33

    Interessant Lösung, statt den richtigen Text zu suchen, wird er vorher per Hand in der gewünschten Reihenfolge in die Variable $aText[3][3] geschrieben.
    Spricht an der Stelle etwas dagegen, den Text in und aus einem Array zu schreiben/lesen?
    Dann könnte ich ihn beim Start aus einer externen Quelle/TXT-Datei einlesen und würde das Script nicht durch den Text unnötig aufblasen.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 6. April 2014 um 17:38
    Zitat von Oscar

    Ich weiß nicht so recht, ob ich das vielleicht falsch verstehe, aber suchst Du nicht einfach sowas:

    Ja, was den Doppelklick angeht, an sowas dachte ich, Danke. :thumbup:
    Zumindest in meinem virtuellen XP scheine ich damit allerdings ab und an zu schnell zu klicken - muss das mal an einem echten XP testen. Wenn ich zügig hintereinander zwei Items durch klicke, als würde ich die Möglichkeiten durch klicken wollen, nimmt er das als Doppelklick wahr.


    Bleibt für mich nun nur die Sache mit dem Inhalt des $Edit.
    Darin soll nicht der Name des ausgewählten TreeViewItem stehen, sondern ein diesem Item zugeordneter Text - aus einer entsprechenden Variable/Quelle.
    BugFix hat dafür eine super Lösung präsentiert, die allerdings nicht mehr richtig funktioniert, sobald "SubItems" identische Texte haben - sich unterhalb von Item 1 und Item 2 jeweils die Item a und b bestehen.
    Wie hier in seinem Quelltext, indem ich zum Verständnis nur mal die 1 und 2 vor den Buchstaben entfernt hab.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; == Zuweisung Texte an Item, am besten per Dictionary Objekt
    Global $oDict = ObjCreate('Scripting.Dictionary')
    $oDict.Add('1', 'Text für "1"')
    $oDict.Add('1a', 'Text für "1a"') ; funktioniert so nicht mehr
    $oDict.Add('1b', 'Text für "1b"') ; funktioniert so nicht mehr
    $oDict.Add('2', 'Text für "2"')
    $oDict.Add('2a', 'Text für "2a"') ; funktioniert so nicht mehr
    $oDict.Add('2b', 'Text für "2b"') ; funktioniert so nicht mehr
    $oDict.Add('3', 'Text für "3"')
    $oDict.Add('3a', 'Text für "3a"') ; funktioniert so nicht mehr
    $oDict.Add('3b', 'Text für "3b"') ; funktioniert so nicht mehr

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 253, 342, 192, 124)
    $TreeView1 = GUICtrlCreateTreeView(12, 12, 229, 219)
    $hTreeview = GUICtrlGetHandle($TreeView1)
    $TreeView1_0 = GUICtrlCreateTreeViewItem("1", $TreeView1)
    $TreeView1_1 = GUICtrlCreateTreeViewItem("a", $TreeView1_0)
    $TreeView1_2 = GUICtrlCreateTreeViewItem("b", $TreeView1_0)
    $TreeView1_3 = GUICtrlCreateTreeViewItem("2", $TreeView1)
    $TreeView1_4 = GUICtrlCreateTreeViewItem("a", $TreeView1_3)
    $TreeView1_5 = GUICtrlCreateTreeViewItem("b", $TreeView1_3)
    $TreeView1_6 = GUICtrlCreateTreeViewItem("3", $TreeView1)
    $TreeView1_7 = GUICtrlCreateTreeViewItem("a", $TreeView1_6)
    $TreeView1_8 = GUICtrlCreateTreeViewItem("b", $TreeView1_6)
    $Edit = GUICtrlCreateEdit("",12,230,229,109)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    _GetText(False)
    Case $GUI_EVENT_SECONDARYDOWN
    _GetText(True)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetText($_fSend)
    Local $sItem, $hItem, $cItem = GUICtrlRead($TreeView1) ; == $cItem ist das Control des aktuell aktiven Item
    If $cItem <= 0 Then Return ; == wenn kein gültiges Control - Funktion verlassen
    $hItem = GUICtrlGetHandle($cItem) ; == das Handle des aktiven Item holen
    $sItem = _GUICtrlTreeView_GetText($hTreeview, $hItem) ; == den Text des aktiven Item auslesen
    Local $sText = $oDict.Item($sItem) ; == im Dictionary.Object den Voll-Text für das Item auslesen, Variable $sText enthält jetzt den vollen Text zur weiteren Nutzung
    If $_fSend Then ; == wenn $_fSend=True wird der Code zum Senden des Textes aufgerufen (bei Rechtsklick)
    ; == Sende $sText
    MsgBox(0,"",$sText)
    Else
    GUICtrlSetData($Edit, $sText) ; == bei False wird der Text in das Edit-Control geschrieben (bei Linksklick)
    EndIf
    EndFunc

    [/autoit]

    Hm... könnte man die Texte im "Dictionary Objekt" nicht auch beim Eintragen dem Control zuordnen? Also statt 1a und 2a bspw ID 4 und 7.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 4. April 2014 um 09:29

    Ist das denn möglich, so ein Mouse-Hook auf die GUI zu begrenzen? Hab über die Suche die entsprechenden Seiten von Microsoft gefunden aber wirklich geholfen, hat mir das nicht.
    Dort sind zwar auch Variablen genannt, die offensichtlich definieren, ob die Klicks an das System weitergeleitet und wann aber naja. Mir fehlt da der Einblick, wie man das überhaupt anfängt.


    Kurzer Zwischenschwenk auf das ursprüngliche/erste Thema.
    Ich hab nun in den SubItems Bezeichnungen die sich wiederholen, d.h. um beim Beispiel zu bleiben, unterhalb von 1 befinden sich die Subitem a und b, gleichfalls bei 2 und 3.
    Lässt sich deine Lösung irgendwie anpassen, ohne jedes Subitem von der Bezeichnung her zu individualisieren?!

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 2. April 2014 um 21:35

    Ist denn $NM_DBLCLK die einzige Möglichkeit, so einen Doppelklick abzufangen ?
    Spontan hätte ich ja auch erst einmal die Idee geäußert, den einfachen Klick mit einer Art Timer vom Doppelklick zu unterscheiden. So nach dem Motto "Klick und in X ms kein weiter? Dann ist es Klick"

    Dein Gedanke mit dem Zähler würde bedeuten, dass bei einem Klick auf ein Item der Zähler auf 1 gesetzt, die Funktion wie in einer Schleife neu aufgerufen und damit das zuvor erstellte "Inhalt im Edit anzeigen" ausgeführt wird. Und bei einem erneuten Klick, würde dann sozusagen Option 2 ausgeführt werden - das senden des Inhalts. Würde das dann nicht bedeuten, dass jedes Item zweimal angeklickt werden muss?

    Sicher ein schlechtes Argument aber ich hab schon eine GUI mit TreeView gesehen, welches per Doppelklick und Klick bedient wurde, das muss doch also ohne blutige Knie gehen.^^

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 2. April 2014 um 20:06

    Ich muss doch noch einmal Fragen: Du hast zwar davor gewarnt, sowohl Klick als auch Doppelklick zu verwenden, ich würde es aber trotzdem versuchen wollen.
    Bin hierzu auf ein paar Versuche mit ListView gestoßen, konnte mit meinem Viertel- bis Halbwissen aber nichts davon gebrauchen. :D
    Die Zuverlässigkeit von IsPressed hast du ja schon entsprechend kritisch kommentiert, also wohl keine wirklich Option.

    Wie bekomm ich das hin, statt $GUI_EVENT_SECONDARYDOWN eventuell $NM_DBLCLK zu verwenden?

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 2. April 2014 um 18:49

    Aaaah, ist doch eigentlich ganz klar, wieso ich das nicht gleich verstanden hab.^^
    Dank dir vielmals für deine Hilfe.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 1. April 2014 um 15:39
    Zitat von BugFix

    Also Klick und Doppelklick auszuwerten ist nicht empfehlenswert, da der erste Klick des Doppelklicks sofort vom Klick-Event abgefangen wird.
    Ich empfehle daher statt Doppelklick den Rechtsklick. Da das Treeview standardmäßig kein Kontextmenü hat, ist das auch ohne Probleme realisierbar.
    Ich habe deinenCode mal entsprechend erweitert:
    [...]
    Um die Item in bestimmter Reihenfolge zu erstellen (u. auch wieder abzuspeichern) habe ich mal eine UDF erstellt. Vielleicht kannst du das auch dabei brauchen.

    Ich seh das deine Verbesserung die entsprechenden Texte wunderbar im Edit anzeigt, Danke.
    Aber kannst du mir das Ganze noch etwas erklären? ?(
    Soweit ich das verstehe, ruft er bei einem Klick mit der linken Maustaste über _GetText(False) deine Funktion _GetText() auf.
    Allerdings steige ich da nicht ganz durch, wie er dann den Text zuordnet und im Edit anzeigt.

    Welche Variable müsste ich den angehen, um beim von dir vorgeschlagenen Rechtsklick dann den Text des gewählten Item zu erhalten? ?(

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 30. März 2014 um 21:04

    Danke für den Hinweis, die Richtung scheint die Gleiche zu sein.
    Mir fehlt da allerdings etwas die Erklärung zu. ?(

    Soweit ich das verstehe, wird das Ergebnis nicht wie von mir angedacht, durch eine Änderung des vorhandenen Edit, im Bsp. ein Label, erreicht.
    Stattdessen wird das vorhandene Label per Hide ausgeblendet und ein anderes eingeblendet ?!
    Und um das zu erreichen, wird zuvor für jedes Item im TreeView ein eigenes Label erstellt und versteckt ?!
    Klingt zwar nach einer Unmenge Quelltext, je größer das TreeView wird aber was solls.

    Die Frage mit dem Doppelklick wäre aber noch offen.
    Ich möchte bei einem Doppelklick auf ein TreeItem die GUI schließen und den Inhalt des Item an die Cursorposition senden. Wie mache ich ihm den "Case Doppelklick" klar?

  • GUI TreeView: Eine hoffentlich leichte Frage

    • SmilingStar
    • 30. März 2014 um 19:04

    Hallo Zusammen

    Meine Frage ist hoffentlich leicht zu beantworten,auch wenn nicht von mir selbst: :D

    Ich erstelle mir gerade ein GUI, das aus GUICtrlCreateTreeView und einem Edit besteht.
    In dem Edit würde ich gerne Text anzeigen, der vom angeklickten TreeView-Item abhängig ist - sozusagen als Vorschau.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 253, 342, 192, 124)
    $TreeView1 = GUICtrlCreateTreeView(12, 12, 229, 219)
    $TreeView1_0 = GUICtrlCreateTreeViewItem("1", $TreeView1)
    $TreeView1_1 = GUICtrlCreateTreeViewItem("1a", $TreeView1_0)
    $TreeView1_2 = GUICtrlCreateTreeViewItem("1b", $TreeView1_0)
    $TreeView1_3 = GUICtrlCreateTreeViewItem("2", $TreeView1)
    $TreeView1_4 = GUICtrlCreateTreeViewItem("2a", $TreeView1_3)
    $TreeView1_5 = GUICtrlCreateTreeViewItem("2b", $TreeView1_3)
    $TreeView1_6 = GUICtrlCreateTreeViewItem("3", $TreeView1)
    $TreeView1_7 = GUICtrlCreateTreeViewItem("3a", $TreeView1_6)
    $TreeView1_8 = GUICtrlCreateTreeViewItem("3b", $TreeView1_6)
    $Edit = GUICtrlCreateEdit("",12,230,229,109)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    Also wenn im Beispiel "1b" angeklickt wird, soll ein diesem Item zugeordneter Text angezeigt wird.
    Und sobald per Doppelklick auf eines der Item geklickt wird, soll das GUI geschlossen und der Text an der Cursor-Position geschrieben werden.

    Das Schreiben ist ja mit ControlSend bspw Recht einfach umsetzbar aber für mich ist nun die Frage, wie mach ich das mit der Vorschau und dem schließen des GUI per Doppelklick? ?(

  • Crash mit Word.au3

    • SmilingStar
    • 30. März 2014 um 18:43
    Zitat von water

    Dann sind mir leider die Ideen ausgegangen :(

    Ich hatte es ja schon befürchtet, ein unlösbares Mysterium der XP-Welt. :(
    Dennoch danke für deine Zeit und Mühe.

  • Crash mit Word.au3

    • SmilingStar
    • 26. März 2014 um 19:48

    Das mit dem hin und her über das RTF-Format hab ich noch nicht ausprobiert, dürfte meiner Meinung nach aber nichts bringen, weil:
    Bei jedem Anmelden am PC und damit dem ersten Start des Tools wird das entsprechende Word-Dokument von einer Netzwerkquelle kopiert.
    Es haben also alle PCs das gleiche Dokument und nur an einem tritt dieser Fehler auf.
    Dass Dokument selber ist Schreibgeschützt, beim kopieren werden daher vor dem Kopieren am Ziel die Flags -RA gesetzt und nach dem Kopieren von der Quelle wieder +RA gesetzt.


    Und was das OS angeht, ist alles am laufen aber manche Mühlen mahlen langsam. :whistling:

  • Crash mit Word.au3

    • SmilingStar
    • 25. März 2014 um 12:03

    Hm.. bei beiden Rechnern Windows XP mit Office Standard Edition 2003 und SP3. Beide Rechner haben den gleichen, nicht gerade üppigen Arbeitsspeicher von 2 GB.

  • Crash mit Word.au3

    • SmilingStar
    • 25. März 2014 um 11:13

    Hab ich, @Error wird nun nach _Word_DocOpen auf 3 gesetzt.
    Dazu folgende, abgefangene Fehler:

    Code
    (-1) : ==> COM Error intercepted !
    	err.number is: 		0x80020006
    	err.windescription:	Unbekannter Name.
    
    
    	err.description is: 	
    	err.source is: 		
    	err.helpfile is: 	
    	err.helpcontext is: 	
    	err.lastdllerror is: 	0
    	err.scriptline is: 	-1
    	err.retcode is: 	0x00000000
    
    
    (-1) : ==> COM Error intercepted !
    	err.number is: 		0x80020009
    	err.windescription:	Ausnahmefehler aufgetreten.
    
    
    	err.description is: 	Unzureichender Arbeitsspeicher. Speichern Sie jetzt Ihr Dokument.
    	err.source is: 		Microsoft Word
    	err.helpfile is: 	C:\Programme\Microsoft Office\OFFICE11\1031\wdmain11.chm
    	err.helpcontext is: 	24577
    	err.lastdllerror is: 	0
    	err.scriptline is: 	-1
    	err.retcode is: 	0x800A13E9
    Alles anzeigen
  • Crash mit Word.au3

    • SmilingStar
    • 25. März 2014 um 09:17

    Ich merk schon, Sonntag war eindeutig nicht mein Tag. In dem Quelltext steckten ja jede Menge Fehler. 8|
    Unter 3.3.10.2 bin ich jetzt wieder bei der folgenden Situation:

    - bei den Rechnern, an denen das Script auch schon zuvor funktioniert hat, funktioniert es auch jetzt wieder.

    - bei dem Rechner, an dem es anfänglich sogar abgestürzt ist - durch schlechte Programmierung -, funktioniert es wieder nicht korrekt.

    @Error wird durch _Word_DocGet auf 3 (Specified document could not be found or error occurred. @extended is set to the COM error code) gesetzt und der abgefangene Fehler, zweimal vorhanden, sieht wie folgt aus:

    Code
    COM Error intercepted !
    	err.number is: 		0x80020009
    	err.windescription:	Ausnahmefehler aufgetreten.
    
    
    	err.description is: 	Unzureichender Arbeitsspeicher. Speichern Sie jetzt Ihr Dokument.
    	err.source is: 		Microsoft Word
    	err.helpfile is: 	C:\Programme\Microsoft Office\OFFICE11\1031\wdmain11.chm
    	err.helpcontext is: 	24577
    	err.lastdllerror is: 	0
    	err.scriptline is: 	-1
    	err.retcode is: 	0x800A13E9
    Alles anzeigen

    An den funktionierenden Rechnern wird nur der Fehler Unbekannter Name. abgefangen.

    Der Quelltext, der zu beiden Ergebnissen führt:

    [autoit]

    Func _bestrp()
    Local $sdbvar, $hand, $name, $datearray[1], $var2 = 1, $araten, $oDoc, $WordDoc, $oError = ObjEvent("AutoIt.Error", "_ErrFunc")
    $sdbksvar = 0
    $WordDoc = _Word_Create()
    $hand = _Word_DocOpen($WordDoc, @MyDocumentsDir & "\zahlung.doc", Default, Default, True)
    $name = "zahlung"
    WinWait($name)
    WinActivate($name)
    $oDoc = _Word_DocGet($WordDoc, 1)
    If @error <> 0 Then MsgBox(0, "", "@Error wurde auf "& @error & " gesetzt!")
    ;[....] Script gekürzt

    [/autoit]

    Bin ehrlich gesagt einmal mehr ratlos, was ich nun tun soll. ?(
    Alle Rechner haben meines Wissens eine identische, technische Ausstattung und Software.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™