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. BugFix

Beiträge von BugFix

  • Schleifen Zähler

    • BugFix
    • 13. Oktober 2007 um 02:10

    _FileWriteLog($LogPath, $Message)
    kann das für dich übernehmen.

  • Schleifen Zähler

    • BugFix
    • 13. Oktober 2007 um 00:55

    Dann setze einen Zähler in die Schleife. Irgendeine Abbruchmöglichkeit wirst du ja haben. Nach Beendigung der Schleife gibst du den Zähler in einer MsgBox aus.

  • prob mit editbox

    • BugFix
    • 12. Oktober 2007 um 18:25

    Naja, wenn die Gefahr besteht :D :

    Spoiler anzeigen
    [autoit]

    Func makedate()
    $i_count = ControlCommand ( $gui, "", $edit, "GetLineCount", "" )
    For $i = 1 To $i_count
    $text = ControlCommand ( $gui, "", $edit, "GetLine", $i)
    $pos = StringInStr($text, '/')
    If $pos = 1 Then
    _ArrayAdd( $array2, $text )
    Else
    _ArrayAdd( $array2, StringTrimLeft($text, $pos-1) )
    EndIf
    Next
    GUICtrlSetData($edit, '' )
    For $i = 1 To UBound($array2)-1
    GUICtrlSetData($edit, $array2[$i] & @CRLF, 1)
    Next
    ReDim $array2[1]
    EndFunc

    [/autoit]


    So kannst du es problemlos öfter ausführen.

  • prob mit editbox

    • BugFix
    • 12. Oktober 2007 um 18:08

    OK, das Problem liegt mal wieder in den Fehlerhaften UDF zum Edit.

    So funkt es :) (getestet)

    [autoit]

    Func makedate()
    $i_count = ControlCommand ( $gui, "", $edit, "GetLineCount", "" )
    For $i = 0 To $i_count
    $text = ControlCommand ( $gui, "", $edit, "GetLine", $i_count) ; Zeilentext
    $pos = StringInStr($text, '/') ; Position von '/' suchen
    _ArrayAdd( $array2, StringTrimLeft($text, $pos-1) ); alles davor abschneiden
    Next
    GUICtrlSetData($edit, '' )
    For $i = 1 To UBound($array2)-1
    GUICtrlSetData($edit, $array2[$i] & @CRLF, 1)
    Next
    EndFunc

    [/autoit]

    Edit: Kopierfehler für Variable $text
    $text = ControlCommand ( $gui, "", $edit, "GetLine", $i_count)
    RICHTIG:
    $text = ControlCommand ( $gui, "", $edit, "GetLine", $i)

  • prob mit editbox

    • BugFix
    • 12. Oktober 2007 um 17:45

    Ich glaub nicht das das so geht Xeno.
    Dann wird jedes Mal der vorhandene Inhalt des Editfensters gelöscht.

    Hier mal Lesen und Ersetzen in einem Aufwasch.

    Spoiler anzeigen
    [autoit]

    Func makedate()
    $i_count = _GUICtrlEditGetLineCount ( $edit )
    For $i = 1 To $i_count
    $text = _GUICtrlEditGetLine($edit, $i) ; Zeilentext
    $pos = StringInStr($text, '/') ; Position von '/' suchen
    $text = StringTrimLeft($text, $pos-1) ; alles davor abschneiden
    $i_Char = _GUICtrlEditLineIndex ( $edit , $i ) ; Index erstes Zeichen der Zeile
    $len_Line = _GUICtrlEditLineLength ( $edit , $i ) ; Länge der Zeile
    _GUICtrlEditSetSel ( $edit, $i_Char, $i_Char+$len_Line-1 ) ; Zeile markieren
    _GUICtrlEditReplaceSel ( $edit, 1, $text ) ; markierten Bereich mit gekürztem Text ersetzen
    Next
    EndFunc

    [/autoit]
  • prob mit editbox

    • BugFix
    • 12. Oktober 2007 um 17:22

    Der Fehler liegt hier:

    [autoit]

    For $i = 1 To $i_count
    GUICtrlSetData($edit, "/" & $array2[$i])
    Next

    [/autoit]


    Du hast den Parameter zum Anfügen vergessen:

    [autoit]

    For $i = 1 To $i_count
    GUICtrlSetData($edit, "/" & $array2[$i], 1)
    Next

    [/autoit]
  • Gui für ein Tool

    • BugFix
    • 12. Oktober 2007 um 16:41

    Weil du nicht die Änderung vorgenommen hast, die ich dir gesagt habe.
    Du solltest NUR in der Deklaration statt "Global $Switch = 0" auf "Global $Switch = 1" ändern.
    Stattdessen änderst du im Code der Funktion "mnuLangClick()" und vergißt dort den $Switch-Parameter anzupassen.

    Es ist nicht gerade hilfreich, wenn du die angebotene Lösung nicht übernimmst und stattdessen neue Fehler produzierst. Dann muß ich jedesmal kpl. alles durchwursteln um die Fehler zu finden.

    Übrigens, schmeiß bloß das _IsPressed() aus deinem Code. Schau dir die Arbeitsweise dieser Funktion genau an, dann wirst du merken, dass sie so nicht einsetzbar ist.

    Und was soll dieses Konstrukt bewirken?

    Spoiler anzeigen
    [autoit]

    While $i = 0
    If _IsPressed (24) Then
    GUISetState(@SW_SHOW)
    Sleep (800)
    $i = +1
    EndIf
    WEnd

    [/autoit]

    Zum Schleife Verlassen gibt es ExitLoop() ;)

  • Gui für ein Tool

    • BugFix
    • 12. Oktober 2007 um 16:05

    :lol: Da du die Controls mit EN vorbelegst und auf EN gewechselt wird wenn "$Switch = 0" und genau das deine Starteinstellung ist!
    Also setze in der Variablendeklaration "$Switch = 1" und dann klappts auch.

  • StringRegExp

    • BugFix
    • 12. Oktober 2007 um 15:08

    Der ganze String wird untersucht und er enthält einen Bestandteil auf den das Suchmuster zutrifft - ergo: Wahr.

    Das hängt mit der Arbeitsweise der RegexEngine zusammen. Es wird Zeichen für Zeichen geprüft. Und nach "123." ist bereits die Bedingung erfüllt.
    Es wird dann weiter geprüft, ob noch weitere Treffer vorhanden sind.
    "123.456." würde 2 Treffer liefern: "123." und "456."

    Wenn du aber möchtest, dass der String in voller Länge als Match erscheinen soll, mußt du dein Pattern daraufhin anpassen, dass ausschließlich bei Vorliegen dieser Bedingung ein Match erfolgt.

    Edit: Dein Suchmuster sagt: ( (Zahl) n-mal und dann ein Punkt ) n-mal

    Noch ein Nachtrag:
    Hier gibt es Unterschiede im Verhalten der RegEx-Engines.
    Hab es jetzt mal noch in einem andren RegEx-Programm getestet, da wird dein Pattern für den vollen Match anerkannt.
    Da hatte ich mich auch etwas vertan, du beendest ja mit '+', also Auftreten mindestens einmal. Insofern hast du natürlich recht, dass ein Match dann vorher nicht auftreten kann. Da hatte ich doch irgendwie ein '*' im Auge :) - muß am Wetter liegen.
    Also, ich revidiere mich. Dein Pattern sollte eig. funktionieren (allerdings auch bei weniger als 3 Ziffern, Hauptsache Punkt folgt). Dass das nicht funzt scheint wohl eine Eigenheit der Autoit-Regex-Engine zu sein.

  • StringRegExp

    • BugFix
    • 12. Oktober 2007 um 14:19

    Dein Pattern besagt:
    "([0-9]+\.)+"
    die Ziffern 0-9 beliebig oft
    gefolgt von einem Punkt
    alles beliebig oft.
    Diese Bedingung ist bereits mit "123." erfüllt. Wäre auch nur mit "1." erfüllt.
    Demzufolge ist die Abfrage wahr, da ein auf das Pattern zutreffender String in deinem Suchstring enthalten ist.

    Edit:
    Das siehst du, wenn du dir die Matches anzeigen läßt:

    [autoit]

    #include <array.au3>
    $ret = StringRegExp("123.45", "([0-9]+\.)+", 3)
    _ArrayDisplay($ret)

    [/autoit]

    Hiermit sucht er nach: ( Zahl-Zahl-Zahl-Punkt ) - 2-mal

    [autoit]

    $ret = StringRegExp("123.464.", "([0-9]{3}\.){2}")
    MsgBox(0, "return", $ret)

    [/autoit]
  • Gui für ein Tool

    • BugFix
    • 12. Oktober 2007 um 12:55
    [autoit]

    $arControl[18] GUICtrlCreateMenuItem ("Englisch", $arControl[15])

    [/autoit]


    da fehlt die Zuweisung ;)

    [autoit]

    $arControl[18] = GUICtrlCreateMenuItem ("Englisch", $arControl[15])

    [/autoit]
  • Gui für ein Tool

    • BugFix
    • 12. Oktober 2007 um 12:49

    Poste bitte die Fehlermeldung aus der Scite-Console.

    Und noch was:
    Bitte rücke deinen Code nur ein, wo Unterprogrammschritte laufen, also innerhalb von Schleifen und Statements.
    Ansonsten wird das viel zu unübersichtlich.

  • Abfrage ob Voraussetzung erfüllt ist

    • BugFix
    • 12. Oktober 2007 um 11:16

    Schau in der Registry, unter welchem Schlüssel der InstallPath eingetragen wird.
    Das fragst du beim Programmstart ab. Ist es nicht installiert bringt die Funktion einen Fehler. Daraufhin installierst du dotnet und anschließend die Produkt-SW.
    Tritt kein Fehler auf kannst du sofort die Produkt-SW installieren

    [autoit]

    $Path = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\.....", "InstallDir" )
    If @error Then
    ; nicht installiert ==> Installroutine dotnet starten
    EndIf
    ; Installcode Produkt-SW

    [/autoit]
  • Gui für ein Tool

    • BugFix
    • 12. Oktober 2007 um 11:02

    Ich hab mal noch eine Verbesserung vorgenommen.
    Mit Blick auf eine möglichst geringe Speicherbelegung ist es günstiger, die INI nur bei Bedarf auszulesen und das Array anschließend zu leeren.
    Somit wird auch nur noch eine ArrayTitle-Variable benötigt.

    Spoiler anzeigen
    [autoit]

    Global $arTitle
    ;...
    ;...
    Func mnuLangClick()
    Switch $Switch
    Case 0
    $arTitle = IniReadSection($INIPath, 'EN') ; Array Sektion EN einlesen
    $Switch = 1
    Case 1
    $arTitle = IniReadSection($INIPath, 'DE') ; Array Sektion DE einlesen
    $Switch = 0
    EndSwitch
    SetTitle($arTitle)
    $arTitle = 0 ; Array wieder aus dem Speicher entladen
    EndFunc

    [/autoit]


    Ein Tipp noch. Auch wenn du multilingual arbeitest, solltest du immer bei der Controlerstellung einen Titel verwenden - also
    "GUICtrlCreateMenuItem("Open", $arCtrl[1])"
    statt
    "GUICtrlCreateMenuItem("", $arCtrl[1])".
    Anschließend auf die Systemsprache prüfen und ggf. neu setzen.
    Ansonsten hast du keine Einträge bei den MenüItems ;).

  • Mein erstes Login ins INet

    • BugFix
    • 11. Oktober 2007 um 23:48

    Hi Alina,
    ich habe mal mein Skript reingestellt und kommentiert, das das vielleicht etwas deutlicher macht.
    Schau mal hier: Hilfe bei Arbeit mit IE.au3

  • Hilfe bei Arbeit mit IE.au3

    • BugFix
    • 11. Oktober 2007 um 23:45

    Hi,
    da recht häufig Anfragen kommen, wie denn auf Objekte in Websites zugegriffen wird, stelle ich mal mein Skript rein, mit dem ich Form- und Element- Index aller verfügbaren Formelemente einer Seite ermittle.
    Ich habe auch alles kommentiert, damit ihr wißt, was dort passiert.

    Spoiler anzeigen
    [autoit]

    #include <ie.au3>

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

    Global $url = "http://www.autoit.de/jgs_portal.php?sid="
    Global $oIE = _IECreate($url) ; IE-Objekt für die URL erstellen
    ; übrigens:
    ; _IELoadWait ist nicht notwendig, der 4.te Parameter von _IECreate ist bereits per default auf "wait" gesetzt!
    Global $i = 0, $k = 0

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

    $oForm = _IEFormGetCollection($oIE) ; Objekt mit allen Formen der URL erstellen
    If IsObj($oForm) Then
    For $form In $oForm ; für jede Form im Objekt Form
    $oElement = _IEFormElementGetCollection($form) ; Zusammenstellung aller Formelemente dieser Form
    If IsObj($oElement) Then
    For $element In $oElement ; für jedes Element dieser Form
    ConsoleWrite('Form: ' & $i & ', Element: ' & $k & ' ' & $element.name & @CRLF)
    ; Index von Form / Element und Name des Elements in Console schreiben
    $k += 1 ; Elementindex um eins erhöhen
    Next
    EndIf
    $i += 1 ; Formindex um eins erhöhen
    $k = 0 ; Elementindex auf Null zurücksetzen
    Next
    EndIf

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

    _IEQuit($oIE) ; Objekt IE löschen

    [/autoit]


    Edit: Hier mal noch analog zum Ermitteln des Table-Index:

    Spoiler anzeigen
    [autoit]

    #include <ie.au3>
    #include <array.au3>
    Global $url = "http://www.autoit.de/jgs_portal.php?sid="
    Global $oIE = _IECreate($url) ; IE-Objekt für die URL erstellen
    Global $arTable, $i = 0

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

    $oTable = _IETableGetCollection($oIE) ; Objekt mit allen Tabellen der URL erstellen
    If IsObj($oTable) Then
    For $table In $oTable ; für jede Tabelle im Objekt Tabellen
    _ArrayDisplay(_IETableWriteToArray($table), 'Tabellen-Index: ' & $i) ; gibt Tabelle in ein Array aus
    $i += 1
    Next
    EndIf

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

    _IEQuit($oIE) ; Objekt IE löschen

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

    ; Tabellen sind beim Auslesen meist gespiegelt
    ; Mit _Array2DMirror() aus meiner Signatur könnt ihr sie wieder 'zurückspiegeln'

    [/autoit]

    Dateien

    GetFormElementIndex.au3 907 Byte – 442 Downloads
  • Speicher einlesen etc

    • BugFix
    • 11. Oktober 2007 um 21:51

    Ob das geht, weiß ich nicht. Das Problem ist immer die Adressen zu finden. Clevere Spiele benutzen dynamische Adressen. Wie du da die richtigen findest (Pointer-Offset beachten), habe ich aber schon mal in einem Thread kurz erläutert. Also bemühe mal die Suche.
    Bots sind hier nicht sooo beliebt. Für rein programmtechnische Fragen bekommst du natürlich immer Unterstützung.
    Falls du es nicht kennst, such mal nach "Ollydbg".

  • Gui für ein Tool

    • BugFix
    • 11. Oktober 2007 um 21:17

    Hi Manu,

    das ist wirklich ziemlich unstrukturiert. :(

    Und meine Codebeispiele waren nur Beispiele und nicht direkt auf dein Programm bezogen. Insofern bringt es wenig diesen Code unangepaßt reinzukopieren.

    Ich habe dir hier mal ein Muster erstellt. Die benötigte INI-Datei habe ich als Kommentarblock vorangestellt. Mußt du also nur in den Editor kopieren und als "Language.INI" abspeichern.

    Spoiler anzeigen
    [autoit]

    #cs

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

    [EN]
    1=ENGLISH
    2=File
    3=Open
    4=Save
    5=Delete
    6=Edit
    7=Copy
    8=Paste
    9=?
    10=Help
    11=Choose German Language
    [DE]
    1=DEUTSCH
    2=Datei
    3=Öffnen
    4=Speichern
    5=Löschen
    6=Bearbeiten
    7=Kopieren
    8=Einfügen
    9=?
    10=Hilfe
    11=Wähle Englisch

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

    #ce

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

    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $arControl[11], $Switch = 0
    Global $INIPath = @ScriptDir & '\Language.INI'
    Global $arTitleEN = IniReadSection($INIPath, 'EN')
    Global $arTitleDE = IniReadSection($INIPath, 'DE')

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

    $arControl[0] = GUICreate("DEUTSCH", 633, 454, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $arControl[1] = GUICtrlCreateMenu("Datei")
    GUICtrlSetOnEvent(-1, "mnuFileClick")
    $arControl[2] = GUICtrlCreateMenuItem("Öffnen", $arControl[1])
    GUICtrlSetOnEvent(-1, "mnuOpenClick")
    $arControl[3] = GUICtrlCreateMenuItem("Speichern", $arControl[1])
    GUICtrlSetOnEvent(-1, "mnuSaveClick")
    $arControl[4] = GUICtrlCreateMenuItem("Löschen", $arControl[1])
    GUICtrlSetOnEvent(-1, "mnuDelClick")
    $arControl[5] = GUICtrlCreateMenu("Bearbeiten")
    GUICtrlSetOnEvent(-1, "mnuEditClick")
    $arControl[6] = GUICtrlCreateMenuItem("Kopieren", $arControl[5])
    GUICtrlSetOnEvent(-1, "mnuCopyClick")
    $arControl[7] = GUICtrlCreateMenuItem("Einfügen", $arControl[5])
    GUICtrlSetOnEvent(-1, "mnuPasteClick")
    $arControl[8] = GUICtrlCreateMenu("?")
    GUICtrlSetOnEvent(-1, "mnuHelpClick")
    $arControl[9] = GUICtrlCreateMenuItem("Hilfe", $arControl[8])
    GUICtrlSetOnEvent(-1, "mnuHelClick")
    $arControl[10] = GUICtrlCreateMenuItem("Wähle Englisch", $arControl[8])
    GUICtrlSetOnEvent(-1, "mnuLangClick")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc
    Func mnuLangClick()
    Switch $Switch
    Case 0
    SetTitle($arTitleEN)
    $Switch = 1
    Case 1
    SetTitle($arTitleDE)
    $Switch = 0
    EndSwitch
    EndFunc
    Func SetTitle(ByRef $ARRAYTITLE)
    For $i = 0 To UBound($arControl) -1
    If $i = 0 Then
    WinSetTitle($arControl[0], '', $ARRAYTITLE[1][1])
    Else
    GUICtrlSetData($arControl[$i], $ARRAYTITLE[$i+1][1])
    EndIf
    Next
    EndFunc
    Func mnuCopyClick()

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

    EndFunc
    Func mnuDelClick()

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

    EndFunc
    Func mnuEditClick()

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

    EndFunc
    Func mnuFileClick()

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

    EndFunc
    Func mnuHelClick()

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

    EndFunc
    Func mnuHelpClick()

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

    EndFunc
    Func mnuOpenClick()

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

    EndFunc
    Func mnuPasteClick()

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

    EndFunc
    Func mnuSaveClick()

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

    EndFunc

    [/autoit]
  • Geiz ist geil.

    • BugFix
    • 11. Oktober 2007 um 11:12
    Zitat

    aber wir erstellen doch dann auch brav die GUI dazu, oder?

    Genau, mach das! :D

  • Ausgabe an Ausgabefenster (Edit-Ctrl) senden

    • BugFix
    • 11. Oktober 2007 um 11:04

    ich bin mir nicht ganz sicher was du erreichen möchtest. Benenne genau welches Control was machen soll.
    Also das übliche "Vorher-Aktion-Nachher" - Szenario.

    Deine Fragestellung ist mir momentan zu allgemein.

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™