Beiträge von BugFix
-
-
Dazu müsste ich alles zwischen ">" und "</" kriegen.
Dafür findest du sogar fertige Funktionen hier im Forum...
-
Doc oder Docx änder nichts am Objeckt Modell.
Trotzdem ist es verwunderlich, dass die von mir gepostete Funktion in Office 2000 tadellos funktioniert und in einer neueren Version nicht. -
Ich habe da eine Vermutung. Ich verwende ja noch "echtes" Office. Du hast ja das docx- Gedöns. Ich glaube mich zu erinnern, dass die Formatierung dort per xml geregelt wird (deshalb das x). Wäre also nicht verwunderlich, wenn sich dadurch auch der Objektzugriff geändert hat. Aber, wie gesagt, nur eine Vermutung.
-
OK, habs dir gebastelt.
Spoiler anzeigen
[autoit]Func _WordDoc_FooterSetAutoText($sPath, $sAutoText="Seite X von Y", $iAlign=2, $fVisible=0, $fSave=1, $fQuit=1) ; iAlign: 0=links, 1=center, 2=rechts
[/autoit]
If not FileExists($sPath) Then Return SetError(1,0,0)
If $fQuit = 1 Then $fSave = 1
Local Const $wdHeaderFooterPrimary = 1
Local $oWord, $fCreated = 0
$oWord = ObjGet($sPath, "Word.Application")
If @error Then
$oWord = ObjCreate("Word.Application")
$fCreated = 1
EndIf
$oWord.Visible = $fVisible
If $fCreated Then $oWord.Documents.Open($sPath)
Local $Footers = $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary)
$Footers.Range.Delete
$Footers.Range.Select
With $oWord.Application.Selection
$oWord.NormalTemplate.AutoTextEntries($sAutoText).Insert(.Range, True)
.ParagraphFormat.Alignment = $iAlign
EndWith
$oWord.Application.DisplayAlerts = False
If $fSave Then $oWord.ActiveDocument.Save
If $fQuit Then $oWord.Quit
Return
EndFunc -
Das größte Problem habe ich mit dem Footer
Dafür hatte ich vor einiger Zeit mal eine Funktion erstellt.Spoiler anzeigen
[autoit];===============================================================================
[/autoit]
; Function Name....: _WordDoc_FooterChange
; Description......: Ändert in einem Worddokument die Fußzeile
; Parameter(s).....: $sPath Pfad zum Word Dokument
; $sFooterNew Die neue Fußzeile
; optional $fVisible Wordfenster sichtbar, Standard=0 (Nein)
; optional $fSave Speichern der Änderung? Standard=1 (Ja)
; optional $fQuit Word beenden? Standard=0 (Nein), mit "1" wird auch $fSave=1 gesetzt
; Return Value(s)..: Erfolg Den alten Inhalt der Fußzeile
; Fehler @error = 1 - Dateipfad existiert nicht
; Note.............: Falls Word bereits geöffnet ist, wird in dieser Instanz gearbeitet, anderenfalls wird eine neue Instanz erstellt.
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WordDoc_FooterChange($sPath, $sFooterNew, $fVisible=0, $fSave=1, $fQuit=0)
If not FileExists($sPath) Then Return SetError(1,0,0)
If $fQuit = 1 Then $fSave = 1
Local Const $wdHeaderFooterPrimary = 1
Local $sFooterOld, $oWord, $fCreated = 0
$oWord = ObjGet($sPath, "Word.Application")
If @error Then
$oWord = ObjCreate("Word.Application")
$fCreated = 1
EndIf
$oWord.Visible = $fVisible
If $fCreated Then $oWord.Documents.Open($sPath)
$sFooterOld = $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text
$oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text = $sFooterNew
$oWord.Application.DisplayAlerts = False
If $fSave Then $oWord.ActiveDocument.Save
If $fQuit Then $oWord.Quit
Return $sFooterOld
EndFunc ;==>_WordDoc_FooterChange -
ich würde wirklich gerne mal eine Frau mit einem Monokel sehen
Kein Problem, hier ein Foto vom berühmten Fotografen Helmut Newton. (Die Dame trägt übrigens nur Monokel
) -
wenn ihr da einen besonderen Favoriten habt.
Da wirst du von 10 Leuten auch 10 verschiedene Antworten bekommen.
Ich verwende Comodo Internet Security. -
Ausnahmen eingetragen, wie in der Hilfe beschrieben?
ZitatAusnahmen
Hier können Sie festlegen, welche Dateien oder Bereiche nicht überprüft werden sollen. Bitte beachten Sie, dass diese Einstellung nur für manuelle und geplante Prüfungen, aber nicht für andere Schutzmodule gilt.Möchten Sie die Dateien auch von weiteren avast! Schutzmodulen ausschließen, inkl. manueller und geplanter Prüfungen, sollten Sie diese Dateien oder Bereiche in den Einstellungen festlegen.
Möchten Sie eine bestimmte Datei oder einen Bereich ausschließen, klicken Sie auf <Pfad eingeben> und tragen Sie den Datei- oder Bereichsnamen ein, oder markieren Sie das Kontrollkästchen neben der ausgeschlossenen Datei und bestätigen Sie mit “Ok”.
Möchten Sie ein Verzeichnis mitsamt seinen Unterverzeichnissen ausschließen, fügen Sie “\*” am Ende des Verzeichnisnamens ein, z.B. C:\Windows\*.
-
Ergebisstechnisch irgendwo ein Unterschied???
[autoit]
Na aber sicher!
Round() rundet (richtig) und StringFormat verwendet Int().$i = 3.155
[/autoit]
ConsoleWrite(Round($i,2) & @LF)
ConsoleWrite(StringFormat('%0.2f', $i) & @LF)Output:
-
Was macht ihr denn für Verrenkungen zum Runden? Round und fertig ist die Laube.
-
Wäre aber für sein Vorhaben nicht ohne Anpassung zu benutzen
Schon klar
- sollte ja auch keine Aktion "Sonne - Arm" werden. 
-
He,
heutzutage sind Brillen doch weniger Sehhilfe als modisches Accessoire. Das bessere Sehen bekommst du zum modischen Chick dazu.
Ich persönlich würde freiwillig niemals Kontaktlinsen tragen, bin mit Brille sehr zufrieden.

-
-
Eigentlich brauche ich genau diese Box
Na und was ist an dieser Box sooo anders im Vergleich zu der mit GUICtrlCreateCombo erstellten?
Falls du ein Handle benötigst, bekommst du das ebenso von der Box-ID (GuiCtrlGetHandle) und kannst mit diesem Handle dann die Funktionen der ..Ex ebenso nutzen.Aber ich habe doch auch beschrieben WIE es mit der ..Ex machbar ist:
Zitatdann musst du die Combo verstecken, wenn nicht das dazugehörige Tabsheet aktiv ist.
-
und möchte die Combobox nur auf dem ersten Tab angezeigt bekommen.
Die ..ComboBoxEx-Funtion erzeugt keine ID und passt somit nicht in die Struktur des Tab-Ctrl. Wenn du unbedingt mit dieser Funktion arbeiten willst (warum benutzt du nicht GUICtrlCreateCombo? ) , dann musst du die Combo verstecken, wenn nicht das dazugehörige Tabsheet aktiv ist. -
Funktioniert bei mir tadellos:
Spoiler anzeigen
[autoit]#include <SQLite.au3>
[/autoit] [autoit][/autoit] [autoit]_SQLite_Startup()
[/autoit] [autoit][/autoit] [autoit]Local $hSQL = _SQLite_Open()
[/autoit] [autoit][/autoit] [autoit]
Local $sCreate = _
"CREATE TABLE [test] (" & _
"[id] INTEGER PRIMARY KEY NOT NULL," & _
"[uid] TEXT);"
_SQLite_Exec($hSQL, $sCreate)Local $sInsert = _
[/autoit] [autoit][/autoit] [autoit]
"INSERT INTO test VALUES (1, '37DD9D24-9A85-4E5B-BBBF-D8C283C1E144');" & _
"INSERT INTO test VALUES (2, '37DD9D24-9A85-4E5B-BBBF-D8C283C1E145');" & _
"INSERT INTO test VALUES (3, '37DD9D24-9A85-4E5B-BBBF-D8C283C1E146');" & _
"INSERT INTO test VALUES (4, '37DD9D24-9A85-4E5B-BBBF-D8C283C1E147');" & _
"INSERT INTO test VALUES (5, '37DD9D24-9A85-4E5B-BBBF-D8C283C1E148');"
_SQLite_Exec($hSQL, $sInsert)Local $aRow, $hQuery, $sMsg
[/autoit] [autoit][/autoit] [autoit]
Local $strSelect = "SELECT * FROM test;"_SQlite_Query ($hSQL, $strSelect, $hQuery)
[/autoit] [autoit][/autoit] [autoit]While _SQLite_FetchData ( $hQuery, $aRow ) = $SQLITE_OK
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($aRow) -1
$sMsg &= $aRow[$i] & @TAB
Next
$sMsg &= @LF
WEndConsoleWrite($sMsg & @CRLF)
[/autoit] [autoit][/autoit] [autoit]_SQLite_Close()
[/autoit]
_SQLite_Shutdown()
Output: -
gerne in einer InputBox alle Ordner
Hier mal für ein Input (sinnvoll?).Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>Global $sPath, $aFolder, $index
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate('Ordner', 414, 70)
[/autoit] [autoit][/autoit] [autoit]
$inRoot = GUICtrlCreateInput('', 10, 10, 350, 20)
GUICtrlSendMsg($inRoot, 0x1501, 0, "Bitte Ordner auswählen")
$btSelect = GUICtrlCreateButton('...', 384, 10, 20, 20)
$inFolder = GUICtrlCreateInput('', 10, 40, 350, 20, $ES_READONLY)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$btPrev = GUICtrlCreateButton('<', 362, 40, 20, 20)
$btNext = GUICtrlCreateButton('>', 384, 40, 20, 20)
ControlFocus($hGui, '', $btSelect)GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
Exit
Case $btSelect
$sPath = FileSelectFolder('Bitte einen Ordner auswählen', '')
If Not @error Then _ReadFolders($sPath)
Case $btPrev
_ShowPrevious()
Case $btNext
_ShowNext()
EndSwitch
WEndFunc _ReadFolders($path)
[/autoit] [autoit][/autoit] [autoit]
$aFolder = _FileListToArray($path, '*', 2)
GUICtrlSetData($inRoot, $path)
If Not IsArray($aFolder) Then
GUICtrlSetData($inFolder, 'Keine Unterordner!')
Return WinSetTitle($hGui, '', '[ 0 von 0 ]')
EndIf
$index = 1
GUICtrlSetData($inFolder, $aFolder[$index])
WinSetTitle($hGui, '', '[ 1 von ' & $aFolder[0] & ' ]')
EndFuncFunc _ShowPrevious()
[/autoit] [autoit][/autoit] [autoit]
If $index = 1 Then Return
$index -= 1
GUICtrlSetData($inFolder, $aFolder[$index])
WinSetTitle($hGui, '', '[ ' & $index & ' von ' & $aFolder[0] & ' ]')
EndFuncFunc _ShowNext()
[/autoit]
If $index = $aFolder[0] Then Return
$index += 1
GUICtrlSetData($inFolder, $aFolder[$index])
WinSetTitle($hGui, '', '[ ' & $index & ' von ' & $aFolder[0] & ' ]')
EndFunc
Nun kannst du dich mal selbst an der Combo versuchen. -
Hier mal aus meinem Muster-Fundus, wie man die Bewegung mit Enter zum nächsten Control auch lösen kann.
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <Array.au3>
Opt("GUIOnEventMode", 1)
OnAutoItExitRegister('OnAutoItExit')Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
[/autoit] [autoit][/autoit] [autoit]
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
Global $active = False, $gui, $ID_lastFocus = 0
Enum $i1, $i2, $c1, $i3, $c2, $i4, $n ; <== hier die Reihenfolge, wie der Fokus 'wandern' soll ($n ist Zähler für Anz. Ctrl)
Global $a[$n]$gui = GUICreate('')
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, '_ende')
$a[$i1] = GUICtrlCreateInput('', 10,10,40)
$a[$i2] = GUICtrlCreateInput('', 60,10,40)
$a[$c1] = GUICtrlCreateCombo('', 110,10,40)
$a[$i3] = GUICtrlCreateInput('', 160,10,40)
$a[$c2] = GUICtrlCreateCombo('', 210,10,40)
$a[$i4] = GUICtrlCreateInput('', 260,10,40)
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
If BitAND(WinGetState($gui),
Then
$active = True
Else
$active = False
EndIf
Sleep(100)
WEndFunc _ende()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc;===========================================================
[/autoit] [autoit][/autoit] [autoit]
; callback function
;===========================================================
Func _KeyProc($nCode, $wParam, $lParam)
Local $tKEYHOOKS, $vkCode, $ID, $index
$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
If $nCode < 0 Or Not $active Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
$vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
If $wParam = $WM_KEYDOWN And $vkCode = 13 Then ; ENTER gedrückt
$ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, '', ControlGetFocus($gui)))
; Für ComboBoxen kann NICHT der Fokus abgefragt werden, da dieser auf dem Input-Ctrl der ComboBox liegt.
; Hier muß in der Instanz-Reihenfolge mit dem Wert des letzten Ctrl verglichen werden.
; Die Reihenfolge der Erstellung in der GUI ist egal, da der Fokus über die enumerierte Reihenfolge der Ctrl-Variablen
; weitergesetzt wird.
; Falls eine ComboBox als letztes Ctrl in der Folge erscheint, muß dies in der Abfragelogik berücksichtigt werden.
If _WinAPI_GetClassName($ID) <> 'Edit' Then
; Variante 1: über Class+Instance
$ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, "", "[CLASS:ComboBox; INSTANCE:1]"))
If $ID_lastFocus > $ID Then $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, "", "[CLASS:ComboBox; INSTANCE:2]"))
; Variante 2: über Enumerations-Reihenfolge der ComboCtrls
;~ $ID = $a[$c1]
;~ If $ID_lastFocus > $ID Then $ID = $a[$c2]
EndIf
$index = _ArraySearch($a, $ID)
If @error Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
If $index < UBound($a)-1 Then
GUICtrlSetState($a[$index +1], $GUI_FOCUS)
$ID_lastFocus = $a[$index +1]
Else
GUICtrlSetState($a[0], $GUI_FOCUS)
$ID_lastFocus = $a[0]
EndIf
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFuncFunc OnAutoItExit()
[/autoit]
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_KeyProc)
EndFunc -
Natürlich läßt sich das mit den rein Array bezogenen Varianten genauso bearbeiten.
Da ich in letzter Zeit mehr mit objektorientierten Sprachen arbeite, war dies eigentlich nur eine Spielerei. Ich persönlich mag Objektorientiertheit.
Das eigentliche Problem ist, dass AutoIt mal überhaupt nicht für Objekte vorbereitet ist. Wenn man innerhalb von AutoItObject dann zwangsweise doch mit nativem AutoIt arbeiten muss, bleibt von der OOP oft nur Syntaxveränderung übrig.