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

  • Ärger mit AutoIt v3.2.10.0

    • BugFix
    • 2. Dezember 2007 um 12:21

    Also seit der neuesten Version von AutoIt ärgere ich mich hier nur noch.
    Ich war echt am Überlegen, ob ich mir nicht wieder die vorige Version aufspiele, aber dann kann man ja keine Skripte mehr tauschen :(
    Die Änderungen gerade im Listview-Bereich sind katastrophal. Kein Befehl wurde erhalten, d.h. alle vorhandenen Skripte müssen umgearbeitet werden *würg*.
    Außerdem funktioniert z.B. der Befehl: _GUICtrlListView_DeleteAllItems($ListView1) mit neuer Syntax. Wenn man diesen ausführt, poppt eine Meldung auf, man soll doch gefälligst zum Löschen von Items GUICtrlDelete verwenden oder aber NICHT die ID des Controls, sondern den Titel verwenden. Wer denkt sich denn so etwas aus. Bei 99% der Funktionen wird das Control per ID angesprochen ABER hierbei darf es nicht sein???
    So langsam vergeht einem der Spaß. Mal sehen, was für Stinkbomben noch hinterlegt sind in dieser Version - werde mal Stück für Stück meine Skripte testen. Ich befürchte Schlimmes...
    Ich wollte mir nur mal Luft machen, weil mich das echt auf die Palme bringt. X(

  • neue Zeile und Festbestandteil in einem Edit

    • BugFix
    • 2. Dezember 2007 um 11:30

    Ich hab dir hier mal eine Variante erstellt, die vielleicht noch nicht 100% aber recht gut läuft.
    Du benötigst dazu die "DLLCallBack.au3" aus der au3_callback_v6.5

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIEdit.au3>
    #include '...\au3_callback_v6.5\DllCallBack.au3' ; dein Pfad zur DLLCallBack
    Opt("GUIOnEventMode", 1)
    Global Const $WH_KEYBOARD_LL = 13
    Global $hHook, $pStub_KeyProc
    Global $pStub_KeyProc = _DllCallBack ("_KeyProc","int;ptr;ptr")
    Global $hmod = DllCall("kernel32.dll","hwnd","GetModuleHandle","ptr",0)
    Global $hHook = DllCall("user32.dll","hwnd","SetWindowsHookEx","int", _
    $WH_KEYBOARD_LL,"ptr",$pStub_KeyProc,"hwnd",$hmod[0],"dword",0)
    Global $buffer = ""

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

    Dim $Fest = '<Festtext>'
    Dim $minLen = StringLen($Fest)

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

    $Form1 = GUICreate("Form1", 633, 310, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Edit1 = GUICtrlCreateEdit("", 24, 16, 585, 265, BitOR($WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
    GUICtrlSetData(-1, $Fest)
    GUISetState(@SW_SHOW)
    _GUICtrlEdit_SetSel($Edit1, -1, -1) ; Cursor hinter Festtext

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

    While 1
    Sleep(10)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc

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

    Func EvaluateKey($keycode)
    Select
    Case $keycode = 13 ; Enter
    If _checkCurrentRow() Then _
    _GUICtrlEdit_AppendText($Edit1, @CRLF & $Fest)
    Case $keycode = 8 Or $keycode = 46 ; Backspace oder Delete
    _checkCurrentRow()
    EndSelect
    EndFunc

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

    Func _checkCurrentRow()
    $indx = _GUICtrlEdit_LineFromChar($Edit1)
    $currLen = _GUICtrlEdit_LineLength($Edit1, $indx)
    $pos1stInLine = _GUICtrlEdit_LineIndex($Edit1, $indx)
    $pos = _GUICtrlEdit_GetSel($Edit1)
    $lenInLine = $pos[0]-$pos1stInLine
    If $currLen <= $minLen Or $lenInLine <= $minLen Then
    _GUICtrlEdit_Undo($Edit1)
    Return False
    EndIf
    Return True
    EndFunc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $ret,$KEYHOOKSTRUCT
    If $nCode < 0 Then
    $ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _
    "int",$nCode,"ptr",$wParam,"ptr",$lParam)
    Return $ret[0]
    EndIf
    If $wparam = 256 Then
    $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr",$lParam)
    EvaluateKey(DllStructGetData($KEYHOOKSTRUCT,1))
    EndIf
    $ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _
    "int",$nCode,"ptr",$wParam,"ptr",$lParam)
    Return $ret[0]
    EndFunc

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

    Func OnAutoItExit()
    DllCall("user32.dll","int","UnhookWindowsHookEx","hwnd",$hHook[0])
    EndFunc

    [/autoit]


    Ich hatte anfangs mit _IsPressed() probiert, aber damit läßt sich das Problem nicht lösen, schon allein weil du mit dieser Funktion nicht die 'Delete'-Taste abfangen kannst.

    Edit: Hab noch eine Verbesserung eingefügt, ich glaube nun sind wir bei 100% :rolleyes:

  • Erste Hilfe

    • BugFix
    • 2. Dezember 2007 um 10:35

    Fintan:

    Gibt es, habe ich geschrieben und in Skripte gepostet: Standard-Editor notepad ersetzen

    Verwende die GUI-Variante, da siehst du immer, welcher Editor gerade als Standardeditor aktiviert ist. Verwenden kannst du das für die meisten Editoren. Kompiliere das Skript und verwende ein Icon deiner Wahl.

  • array sortieren

    • BugFix
    • 1. Dezember 2007 um 22:58

    Du kannst es doch gleich in einer Abfrage regeln:

    Spoiler anzeigen
    [autoit]

    ReDim $arSortable[$ar[0]][3]
    For $i = 1 To UBound($ar) -1
    $var = StringSplit($ar[$i], ' ')
    If IsArray($var) And $var[0] = 3 Then ; hier gleich auf korrekte Anzahl prüfen
    $arSortable[$i-1][0] = $var[1] ; Geb.Dat.
    $arSortable[$i-1][1] = $var[2] ; Vorname
    $arSortable[$i-1][2] = $var[3] ; Name
    EndIf
    Next

    [/autoit]


    Falls einige Einträge dadurch rausfallen hast du im 2D-Array ein paar leere Einträge, die kannst du aber auch noch entfernen. Funktion siehe in meiner Signatur.

  • neue Zeile und Festbestandteil in einem Edit

    • BugFix
    • 1. Dezember 2007 um 15:18

    Das geht in etwa so:
    - wenn Enter gedrückt Zeilenumbruch einfügen und Festtext in die neue Zeile schreiben
    - in einer Schleife ständig die Länge der aktuellen Zeile überwachen
    - wird durch Rückwärtslöschen oder Markieren und anschließendem Löschen die Mindestlänge für den Festtext unterschritten, aktiviere Undo
    Ist aber ziemlich aufwändig.

  • neue Zeile und Festbestandteil in einem Edit

    • BugFix
    • 1. Dezember 2007 um 13:24

    Mach es doch (ist auch nicht so umständlich) mit Kombination Inputfeld und Editbox (wie z.B. bei einem Messengerprogramm).
    Und beim Einlesen des Inputfeldes fügst du den Festbestandteil an und zeigst dann alles in der Editbox.

  • Radiobuttentext wird nach GUICtrlSetFont nicht mehr richtig angezeigt

    • BugFix
    • 1. Dezember 2007 um 09:39

    Warum so kompliziert?
    Für ein Update erweiterst du einfach die INI um die entsprechenden Einträge/Sektionen. Du mußt ja davon ausgehen, dass in der INI inzwischen nutzerspezifische Änderungen gespeichert sind (sonst hättest du ja die Werte nicht in einer INI, sondern als Variablen/Konstanten im Programm).
    Also füge beim Ausführen des Updates nur neue Werte hinzu, damit die alten Einstellungen nicht verloren gehen.
    Du kannst ja um sicher zu gehen, beides hinterlegen.

    Spoiler anzeigen
    [autoit]

    If Not FileExists($INIPath) Then
    FileInstall('..\Quell-Pfad INI', $INIPath)
    Else
    IniWriteSection($INIPath, 'sectionNEW', 'data') ; neue Sektion
    IniWrite($INIPath, 'section', 'key', 'value') ; geänderte oder neue Werte in vorhandener Sektion
    EndIf

    [/autoit]
  • Radiobuttentext wird nach GUICtrlSetFont nicht mehr richtig angezeigt

    • BugFix
    • 30. November 2007 um 23:45

    Ja, den Pfad mußt Du mit: DirCreate ( "path" ) vorher anlegen.
    Und wenn an der INI nichts geändert werden soll, dann schreib sie doch bei Skriptstart.

    [autoit]

    If Not FileExists(....INI) Then
    INIWrite(...) ; oder INIWriteSection(...)
    EndIf

    [/autoit]
  • FileMOve

    • BugFix
    • 30. November 2007 um 23:35

    Verwende statt ConsoleWrite MsgBox(), dann hast du keine Probleme.

  • Radiobuttentext wird nach GUICtrlSetFont nicht mehr richtig angezeigt

    • BugFix
    • 30. November 2007 um 23:28

    Warum erst installieren und dann nur bei Bedarf verschieben?
    Besser ist doch: nur installieren, wenn nicht da:

    [autoit]

    $KDP = @AppDataCommonDir & "\XT\KD"
    If not FileExists($KDP&"\KOI.ini") Then _
    FileInstall("C:\Dokumente und Einstellungen\Fabian\Desktop\AutoItDateien\Hilfsdateien\KOI.ini", $KDP & "\KOI.ini")

    [/autoit]
  • FileMOve

    • BugFix
    • 30. November 2007 um 23:17
    [autoit]

    If FileMove(....) = 1 Then ConsoleWrite('Ferddisch')

    [/autoit]
  • FileMOve

    • BugFix
    • 30. November 2007 um 22:34

    Ich denke Auswerten des Returnwertes sollte das Einfachste sein. ;)

    Zitat

    Success: Returns 1.

  • Radiobuttentext wird nach GUICtrlSetFont nicht mehr richtig angezeigt

    • BugFix
    • 30. November 2007 um 22:14

    Versuch doch einfach mal die Radiobutton komplett zu definieren, nicht nur Top und Left, sondern auch Breite und Höhe.

  • array sortieren

    • BugFix
    • 30. November 2007 um 21:57

    So wird ein Schuh draus:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>

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

    Dim $file = 'test.txt'
    Dim $ar, $arSortable[1][3], $var

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

    _FileReadToArray($file, $ar)
    If @error Then Exit

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

    _ArrayDisplay($ar, 'unsortiert - 1D Array')
    ReDim $arSortable[$ar[0]][3]
    For $i = 1 To UBound($ar) -1
    $var = StringSplit($ar[$i], ' ')
    If IsArray($var) Then
    $arSortable[$i-1][0] = $var[1] ; Geb.Dat.
    $arSortable[$i-1][1] = $var[2] ; Vorname
    $arSortable[$i-1][2] = $var[3] ; Name
    EndIf
    Next

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

    _ArrayDisplay($arSortable, 'vor der Sortierung')
    _ArraySort($arSortable, Default,0,0,3,1)
    _ArrayDisplay($arSortable, 'sortiert nach Vorname')
    _ArraySort($arSortable, Default,0,0,3,2)
    _ArrayDisplay($arSortable, 'sortiert nach Name')

    [/autoit]
  • StringRegExp-Übungen

    • BugFix
    • 29. November 2007 um 18:07

    Also die Erklärung zu '+' mußt du im Vergleich zu '*' betrachten.
    '+' bedeutet: Element MUSS mindest einmal, kann beliebig oft vorkommen
    '*' bedeutet: Element kann beliebig oft vorkommen, also auch kein-mal.

    Und hiermit "[^0-9]+" schließt du alle Ziffern aus dem Match aus :whistling:
    Wenn Du alle Ziffern/Zahlen möchtest: "[0-9]+" oder kürzer: "\d+"

  • Welchen Musikstil bevorzugt ihr?

    • BugFix
    • 28. November 2007 um 22:40

    :rofl: - Das war definitiv ein Beitrag von dem ich nicht ein einziges Wort verstanden habe. ;(:S :wacko:

  • Splash - GUI Generator

    • BugFix
    • 28. November 2007 um 09:27

    Das ist ja grottig :evil: - dann muß man wohl jetzt alle Skripte nochmals testen, Heidenarbeit.
    OK - danke für den Tipp, werde ich bei Gelegenheit mal durchsehen.

  • TXT Datei und Ordner

    • BugFix
    • 25. November 2007 um 18:09

    Ich verstehe Deinen Ansatz nicht. Du schreibst:
    D.h. in der Txt steht ein Name und ein MailAdresse.

    Warum liest du dann diese eine Zeile in ein Array ein? - Da tuts doch auch FileReadLine().
    Und dann vergleichst du die ersten 6 Zeichen aus der Textdatei mit den Dateinamen. Sind denn die Namen bei dir alle genau 6 Zeichen lang? - Kann ich mir nicht vorstellen.

  • leeres Feld im Array löschen

    • BugFix
    • 24. November 2007 um 01:44

    Arrays sollte man schon mit For-Schleife durchgehen.
    In dieser Variante spart man den Array-Include.
    Oder nimm die Variante aus meiner Signatur (1D u. 2D).

    Spoiler anzeigen
    [autoit]

    Func _ArrayDeleteEmpty(ByRef $ARRAY)
    If Not IsArray($ARRAY) Then Return 0
    Local $arTMP[1]
    For $i = 0 To UBound($ARRAY) -1
    If $ARRAY[$i] <> '' Then
    If $arTMP[0] = '' Then
    $arTMP[0] = $ARRAY[$i]
    Else
    ReDim $arTMP[UBound($arTMP)+1]
    $arTMP[UBound($arTMP)-1] = $ARRAY[$i]
    EndIf
    EndIf
    Next
    $ARRAY = $arTMP
    EndFunc

    [/autoit]
  • wirkliche Suchfunktion für ComboBox

    • BugFix
    • 21. November 2007 um 23:17

    Hi,

    wenn ihr mal mit ComboBoxen arbeitet werdet ihr merken, dass die vorhandenen Suchfunktionen ( _GUICtrlComboFindString / _GUICtrlComboBox_FindString ) keinen großen Wert besitzen, da selbst bei nichtsensitiver Suche der Eintrag nur gefunden wird, wenn er mit dem Suchbegriff beginnt.
    Bsp.
    Eintrag ist 'Waldfee'
    Suche nach 'Wald' - erfolgreich
    Suche nach 'fee' - kein Erfolg

    Deshalb habe ich eine Suchfunktion erstellt, die zum einen jedes eventuelle Vorkommen des Suchbegriffs berücksichtigt, wahlweise sensitive oder nichtsensitive Suche, und zum anderen den Index der ComboBoxListe für die Treffer und die zugehörigen Einträge zurückgibt. Rückgabetyp ist eine Array, dass die Anzahl der Treffer in Array[0][0] führt.
    Erforderlich ist die aktuelle Beta.

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _ComboBoxSearch
    ; Description:: durchsucht alle ComboBox Einträge nach dem Suchbegriff
    ; Parameter(s): $hWnd Handle der ComboBox
    ; $sText Suchbegriff
    ; $iSens Sensitivität 0 = teilweise Übereinstimmung
    ; 1 = exakte Übereinstimmung
    ; Requirement(s): aktuelle Beta
    ; Return Value(s): 2D-Array Array[0][0] enthält die Anzahl der Treffer
    ; Array[$i][0] = Index in CB-Liste
    ; Array[$i][1] = Listeneintrag
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    #Include <GuiComboBox.au3>
    Func _ComboBoxSearch($hWnd, $sText, $iSens=0)
    Local $arMatches[1][2]=[[0,'']], $n = _GUICtrlComboBox_GetCount($hWnd), $val
    If $iSens < 0 Or $iSens > 1 Then $iSens = 0
    For $i = 0 To $n -1
    _GUICtrlComboBox_GetLBText($hWnd, $i, $val)
    If StringInStr($val, $sText, $iSens) Then
    ReDim $arMatches[UBound($arMatches)+1][2]
    $arMatches[UBound($arMatches)-1][0] = $i
    $arMatches[UBound($arMatches)-1][1] = $val
    $arMatches[0][0] += 1
    EndIf
    Next
    Return $arMatches
    EndFunc ;==>_ComboBoxSearch

    [/autoit]

    Dateien

    _ComboBoxSearch.au3 1,33 kB – 484 Downloads

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™