Der Passus selbst war ja nur mal ein Gedanke von mir. Dass der noch genau gescheckt werden sollte ist schon klar.
Mir ging es eigentlich erst mal darum zu wissen, ob so eine Erklärung in den Forenregeln auch Zustimmung findet. Dann kann man das in der "Leitung" detailliert betrachten.
Beiträge von BugFix
-
-
Hallo @all,
in diesem Thread wurde die Frage nach den Rechten an Skripten gestellt.
Meine Sichtweise dazu (die keine juristische Relevanz hat) habe ich dort beschrieben. Ich halte es für überlegenswert, hier einen Rahmen der Rechtssicherheit zu schaffen, indem in den Forenregeln ein Passus aufgenommen wird, der die von uns für das Forum gewünschte Vorgehensweise darlegt.Vorstellen könnte ich mir so etwas:
Mit Anerkennung der Forenregeln erklärst du dich einverstanden, dass von dir veröffentlichte Skripte ohne Einschränkung von jedermann, unter Angabe des Autors, genutzt werden können. Für den Fall, dass die Nutzung Einschränkungen unterliegen soll (spezielle Lizenz), ist dieses zum Zeitpunkt der Veröffentlichung explizit anzugeben.
Meiner Meinung nach ist damit dem wohl überwiegenden Grundgedanken einer freien Nutzung entsprochen und trotzdem die Möglichkeit gegeben, bei Bedarf anders zu verfahren.
Wie steht ihr dazu? Ich füge mal eine Umfrage ein für einen Monat.
-
@olfibits
Meine Betrachtung ist natürlich keine juristische Einschätzung. - Aber ich denke, wir sollten vielleicht diesen Optionsgedanken in unsere Forenregeln mit aufnehmen. -
Ich sehe das ein wenig, wie das Opt-In / Opt-Out Problem.
Die Sprache Autoit als solche ist freigegeben für jegliche Art der Nutzung. Diesen Grundgedanken sehe ich somit auch erst mal bei den veröffentlichten UDF. Sollte der Autor etwas gegen eine freie Nutzung haben, sollte er diese Option von vornherein bekannt geben. -
Es ist mehr als unhöflich, seine Posts in einem Forum zu löschen! Habe deshalb wieder alles hergestellt und schließe den Thread hiermit als Schutz vor erneutem Löschversuch (weitere Posts waren ja nicht geplant).
-
Ich habe mal mit den ReBar-Funktionen gespielt, war aber wenig begeistert. Wenn ich eine derartige Optik/Funktionalität benötige, bastele ich mir das selber aus Icon zusammen.
-
Vielleicht kannst du ja auch den IconFileScanner von Holger Kotsch verwenden. Nutze ich immer, um mir die Icon in exe/dll anzusehen.
-
bei Date gibts kein HH:mm:ss
Uhrzeit ist selbstverständlich ein Bestandteil des Date-Ctrl. Ob du es nutzt oder nicht liegt am Style, den du setzt.
-
Du brauchst es doch nur beim Setzen in das Format wandeln. Mach es so:
AutoItFunc _SetDateDEtoDateCtrl($ID, $sDateDE) Switch StringLen($sDateDE) Case 10 GUICtrlSetData($iID, StringRegExpReplace($sDateDE, '(\d{2})\.(\d{2})\.(\d{4})', '$3/$2/$1') ; ohne Uhrzeit Case Else GUICtrlSetData($iID, StringRegExpReplace($sDateDE, '(\d{2})\.(\d{2})\.(\d{4}) (.+)', '$3/$2/$1 $4') ; mit Uhrzeit EndSwitch EndFunc -
Du machst eigentlich nichts falsch - da ist ein Fehler in der Hilfe
For Date controls:
The date and time is in the format defined by the regional
settings. GUICtrlRead() use the same default
format.Erstellst du ein Date Ctrl mit
$ID = GUICtrlCreateDate(....$DTS_SHORTDATEFORMAT)
und setzt den Style auf
GUICtrlSendMsg($ID, $DTM_SETFORMATW, 0, "dd.MM.yyyy HH:mm:ss")
erhältst du mit GuiCtrlRead($ID) das Datum als "01.04.2017 08:55:21"Gemäß der Hilfe zu GuiCtrlSetData müsstest du als genau in der Form auch das Datum setzen können - geht aber nicht.
Erforderlich ist immer das Format "yyyy/MM/dd HH:mm:ss" - und dann klappt es auch. -
-
Wie erstellst du die PDF?
Falls du den PDFCreator verwendest, kannst du dort etliche Parameter für die Erstellung festlegen, auch Namensabhängigkeiten.Edit:
Mir fällt gerade ein, dass wir vor Jaaaahren dasselbe Thema hatten: https://autoit.de/index.php/Thre…8171#post258171Noch was aus dem EN-Forum mit der zlib.dll: https://www.autoitscript.com/forum/topic/160718-code-to-extract-plain-text-from-a-pdf-file/?do=findComment&comment=1166528
-
Ich würde _StringRegexReplace_Callback (von @Taz77) verwenden - ist auch die schnellste Variante:
Edit: Gloß-/Kleinschreibung hatte ich nicht beachtet - nun korrigiert.
AutoIt
Alles anzeigenLocal $sText = "Das ist ein Test" _StringRegExpReplace_Callback($sText, "([aei])", "_MyCallback('$1')") ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $sText --> " & $sText & @LF) Func _MyCallback($_s) If $_s == "a" Then Return ":regional_indicator_a:" ElseIf $_s == "e" Then Return ":regional_indicator_e:" ElseIf $_s == "i" Then Return ":regional_indicator_i:" Else Return $_s EndIf EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringRegExpReplace_Callback ; Description ...: Replaces ByRef all matches in a string by manipulation of the matches in a callback function ; Parameters ....: $sString String to manipulate ; ...............: $sPattern RegExp pattern for the match ; ...............: $sCallback Callback function as string, i.e. "MyCallback('$1')" -- '$1' represents the match ; .....optional..: $sBefore String to insert before the manipulated match ; .....optional..: $sAfter String to insert after the manipulated match ; Return values .: Success 1 ; ...............: Failure 0 set error = 1 ; Author ........: Taz77 ; =============================================================================================================================== Func _StringRegExpReplace_Callback(ByRef $sString, $sPattern, $sCallback, $sBefore = '', $sAfter = '') $sString = Execute("'" & StringRegExpReplace(StringReplace($sString, "'", Chr(26), 0, 2), $sPattern, $sBefore & "'&" & $sCallback & "&'" & $sAfter) & "'") If @error Then ConsoleWrite('_StringRegExpReplace_Callback error! Pattern: "' & $sPattern & '", Callback: "' & $sCallback & '"' & @LF) Return SetError(1,0,0) EndIf $sString = StringReplace($sString, Chr(26), "'", 0, 2) Return 1 EndFunc ;==>_StringRegExpReplace_Callback -
Nun teste mal, ob du das Objekt mit AutoIt erstellen kannst:
VBA
Set oBO_PFSP = Application.createBO("PFSP")
AutoIt
$oBO_PFSP = ObjCreate("PFSP")
prüfen ob Objekt erstellt wurde: MsgBox(0, 'Objekt', 'Objekt erstellt: ' & (IsObj($oBO_PFSP ) ? 'JA' : 'NEIN'))P.S.
Wird wohl fehlschlagen. PSIpenta verwendet eigene Objekte, die Dokumentation dazu ist nicht (mehr?) zugänglich. Wende dich mal an deren Support, die mögen doch ein Manual mit den genutzten Objekten, Methoden und Eigenschaften zur Verfügung stellen und natürlich auch eine Beschreibung des Objektaufrufs. -
Wäre es irgendwie möglich diesen VBA / VBS Code aus Autoit heraus aufzurufen?
In den meisten Fällen läßt sich VBA-Code direkt mit den verwendeten Objekten nach AutoIt portieren. Bedingung: AutoIt muß auf das Objekt zugreifen können. Schau dir mal ObjCreate ObjGet an. Wenn du nicht voran kommst: Poste den VBA-Code hier.
-
doch wofür ist <> -3 da?
-3 ist das Event $GUI_EVENT_CLOSE, es hat nur niemand Lust die Konstante hinzuschreiben, weil man sich -3 so leicht merken kann.

-
Welchen Inhalt hat $aCelle[3]? Und wieso verwendest du einen festen Index, dann ist doch das Array sinnlos und du kannst von vornherein mit einem Fixwert arbeiten?
Hast du dir direkt nach _Excel_RangeRead mal den @error ausgeben lassen? Immerhin stehen 8 mögliche Fehlerursachen zur Verfügung. -
Ich würde kein echtes Drag&Drop Verhalten probieren. Ein Bild ziehen (es bleibt also sichtbar, die Bewegung ist live) scheint mir etwas zu aufwändig.
Ich würde so vorgehen:
- Deiner Tabellenstruktur, die die Bilder anzeigt, liegt ein 2D-Array zugrunde. (Bild 2 in Zeile 2 = Index[1][1] - dort der kpl. Dateipfad
- Klick auf ein Bild umrahmt es (das Bild ist markiert, über Klickposition erhältst du den Index)
- Klick auf den Seitenstreifen - prüft ob in der Tabelle ein Bild markiert ist - JA: Anhand des Index ist Bilddatei bekannt, Bild kann im Seitenstreifen angezeigt werden und Dateipfad wird in Seitenstreifen-Array übernommen. Dann wird das Bild an Tabellenposition und im Tabellen-Array gelöscht
- Ziehen von Seitenstreifen auf Tabelle: exakt entgegengesetzt -
Das ist hier in etwa, was @AspirinJunkie vorschlug. Ich habe jedoch nicht zeilenweise in die Ausgangsdatei geschrieben, sondern mit einem Schreibbefehl am Ende:
AutoIt
Alles anzeigen#cs Datei "LinesToDelete.cfg" (oder wie auch immer) - jede Zeile eine Zeilennummer, aufsteigend sortiert!! 12 14 123 124 ... #ce Local $sFileLineNumbers = "....\PFAD\LinesToDelete.cfg" ; Pfade anpassen Local $sFileToClean = "....\PFAD\Sollmietenoriginal.txt" Local $sFileOutput = "....\PFAD\SollmietenBereinigt.txt" Local $sToWrite = "" ; Nummern zu löschender Zeilen einlesen aus Datei in Array Local $aLinesToDelete _FileReadToArray($sFileLineNumbers, $aLinesToDelete) Local $fH = FileOpen($sFileToClean) ; Datei zum zeilenweise Lesen öffnen Local $sRead ; Variable für Zeileninhalt Local $iLineCounter = 0 ; Zähler für aktuelle Zeile Local $iIndexNextToDel = 1 ; Arrayindex für Ablesen der zu löschenden Zeilennummern While True $iLineCounter += 1 $sRead = FileReadLine($fH) If @error Then ExitLoop ; Dateiende erreicht If $iLineCounter <= $aLinesToDelete[$aLinesToDelete[0]] Then ; Zeilennummer < oder gleich letzter zu löschender Zeilennummer If $iLineCounter = $aLinesToDelete[$iIndexNextToDel] Then ; Zeilennummer gleich nächste zu löschender Zeilennummer $iIndexNextToDel += 1 ; Index des Arrays mit zu löschenden Zeilennummern um 1 erhöhen ContinueLoop ; Zeileninhalt wird nicht benötigt, Schleife fortsetzen mit nächster Zeile EndIf EndIf $sToWrite &= $sRead & @CRLF ; Zeileninhalt wird übernommen WEnd FileClose($fH) ; Dateihandle schliessen ; in Variable übernommene Zeilen, die nicht zu löschen waren, in Ausgabedatei schreiben FileWrite($sFileOutput, $sToWrite) -
OK, greifen wir mal deine Interpretation auf und bieten auch diese Lösung:
AutoIt
Alles anzeigen; Exel ist offen $oExcel = ObjGet('','Excel.Application') If Not IsObj($oExcel) Then Exit MsgBox(0, 'Fehler', 'Kein Objekt') $oExcel.Range('A1').Value = "Hallo" ; 3.tes bis letztes Zeichen formatieren _Excel_CharactersFormatFont($oExcel, 'A1', 3, -1, "Fett Kursiv Unterstrichen Durchgestrichen", 0x40AE00, "Comic Sans MS", 11) ; oder statt String mit Zelle, Range der Zelle übergeben ;~ $oA1 = $oExcel.Range('A1') ;~ _Excel_CharactersFormatFont($oExcel, $oA1, 3, -1, "Fett Kursiv Unterstrichen Durchgestrichen", 0x22AEFF, "Comic Sans MS", 11) ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Excel_CharactersFormatFont ; Description ...: Sets formatting for one or more contiguous characters in a given cell ; Syntax ........: _Excel_CharactersFormatFont($_oExcel, $_sCellRC, $_iStart[, $_iLen = 1[, $_sStyle = Default[, $_iColorBGR = Default[, ; $_sFont = Default[, $_iSize = Default]]]]]) ; Parameters ....: $_oExcel - The Excel object ; $_soCell - Cell name (e.g. "A1") or cell-range-object ; $_iStart - Character position inside the cell (1-based) ; $_iLen - [optional] The count of contiguous characters to format. -1=up to the end, Default is "1". ; $_iColorBGR - [optional] The character color as BGR. Default is xlAutomatic - "Default" (-1 will also accepted). ; $_sStyle - [optional] The style, one or combined with space ("Bold"; "Bold Italic Underline"). Default is none - "Default" (-1 will also accepted). ; $_sFont - [optional] The character font name. Default is "Arial" - "Default" (-1 will also accepted). ; $_iSize - [optional] The character font size. Default is "10" - "Default" (-1 will also accepted). ; Return values .: Success 1 ; ...............: Failure 0 @error = 1 ($_oExcel is'nt object), = 2 (formatting range exceeds string length) ; Author ........: BugFix ; =============================================================================================================================== Func _Excel_CharactersFormatFont(ByRef $_oExcel, $_soCell, $_iStart, $_iLen=1, $_sStyle=Default, $_iColorBGR=Default, $_sFont=Default, $_iSize=Default) If Not IsObj($_oExcel) Then Return SetError(1,0,0) Local $oRange = IsObj($_soCell) ? $_soCell : $_oExcel.Range($_soCell) Local $iLen = StringLen($oRange.Value) If $_iStart > $iLen+1 Then Return SetError(2,0,0) If $_iLen = -1 Then $_iLen = $iLen+1 - $_iStart If ($_iStart + $_iLen) > $iLen+1 Then Return SetError(2,0,0) $_sStyle = ($_sStyle = Default Or $_sStyle = -1) ? "" : $_sStyle $_iColorBGR = ($_iColorBGR = Default Or $_iColorBGR = -1) ? "xlAutomatic" : $_iColorBGR $_sFont = ($_sFont = Default Or $_sFont = -1) ? "Arial" : $_sFont $_iSize = ($_iSize = Default Or $_iSize = -1) ? 10 : $_iSize With $oRange.Characters($_iStart, $_iLen).Font .Bold = (StringInStr($_sStyle, "Bold") Or StringInStr($_sStyle, "Fett") ? True : False) .Italic = (StringInStr($_sStyle, "Italic") Or StringInStr($_sStyle, "Kursiv") ? True : False) .Underline = (StringInStr($_sStyle, "Underline") Or StringInStr($_sStyle, "Unterstrichen") ? True : False) .Strikethrough = (StringInStr($_sStyle, "Strikethrough") Or StringInStr($_sStyle, "Durchgestrichen") ? True : False) If $_iColorBGR = "xlAutomatic" Then .ColorIndex = -4105 ; xlAutomatic Else .Color = $_iColorBGR EndIf .Name = $_sFont .Size = $_iSize EndWith Return 1 EndFunc ;==>_Excel_CharactersFormatFont