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

Beiträge von Yjuq

  • _ArrayDisplay -> Warum ist die Darstellung so schrecklich ?

    • Yjuq
    • 14. März 2015 um 00:04

    Einmal aus der Doku zitiert: (Quelle: http://translation.autoit.de/onlinehilfe/fu…RegisterMsg.htm)

    Zitat

    Standardmäßig wird nach Beendigung der Benutzerfunktion der AutoIt-interne Message-Handler ausgeführt.
    Dies geschieht nicht, wenn man einen Wert mit Return zurückgibt (Siehe WM_COMMAND im Beispiel) oder wenn man das Schlüsselwort 'Return' ohne irgendeinen Wert benutzt.
    Bei Nutzung von 'Return' ohne irgendeinen Rückgabewert wird der AutoIt-interne Message-Handler (wenn denn einer für diese Nachricht existiert) NICHT ausgeführt!

    !!! Wenn man möchte, dass AutoIt seinen internen Handler für eine Nachricht ausführt, lässt man die Variable $GUI_RUNDEFMSG (in GUIConstantsEx.au3) von der Funktion zurückgeben (siehe ebenso in den Beispielen) !!!
    (Zum Beispiel dann, wenn man vor Beendigung aus der Benutzerfunktion zurückkehren will und trotzdem den AutoIt-internen Message-Handler ausführen möchte)

    AutoIt verarbeitet Messages intern. Ich könnte dir zwar jetzt erklären was da genau vor sich geht und wie man das manuell macht, aber da habe ich gerade nicht die Nerven für, vielleicht morgen.

  • _ArrayDisplay -> Warum ist die Darstellung so schrecklich ?

    • Yjuq
    • 13. März 2015 um 23:54

    Hab's tatsächlich schon gefunden, deine WM_SIZE() Funktion macht Probleme.
    Normalerweise sollte man die Konstante $GUI_RUNDEFMSG zurückgeben.
    Sonst kann da schnell was durcheinander kommen. ;)

    [autoit]

    func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
    local $iWidth = _WinAPI_LoWord($lParam)
    local $iHeight = _WinAPI_HiWord($lParam)
    if WinGetState($titel) = 15 then _WinAPI_MoveWindow($hRichEdit, 2, 2, $iWidth-4,$iHeight - 4)
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Kleiner Tipp noch, statt $title verwende doch lieber das Handle. Entweder die globale Variable $hMainGUI
    die du für deine GUI definiert hast oder direkt der Parameter $hWnd. Ist sicherer, wenn ein zweites Fenster mit
    gleichen Titel auftaucht gibt's wieder Probleme.

  • _ArrayDisplay -> Warum ist die Darstellung so schrecklich ?

    • Yjuq
    • 13. März 2015 um 23:38

    Gute Frage, da verträgt sich was intern nicht...
    Was genau müsste ich aber noch herausfinden, wirst aber wahrscheinlich
    dazu erst am Sonntag oder Montag eine Antwort bekommen.

    Die _ArrayDisplay() Funktion ist relativ lang. Und dein Skript ist ja auch nicht gerade kurz. ^^

  • _ArrayDisplay -> Warum ist die Darstellung so schrecklich ?

    • Yjuq
    • 13. März 2015 um 23:18

    Super, und die syntax.ini brauch ich wahrscheinlich zum ausführen auch nicht, oder? :D
    €dit: Hat sich erledigt... Mal schauen :)

  • _ArrayDisplay -> Warum ist die Darstellung so schrecklich ?

    • Yjuq
    • 13. März 2015 um 22:41

    Funktioniert bei mir einwandfrei:

    [autoit]

    #include <Array.au3>

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

    Dim $aArr[][] = [['1 - 1', '1 - 2', '1 - 3', '1 - 4'], _
    ['2 - 1', '2 - 2', '2 - 3', '2 - 4'], _
    ['3 - 1', '3 - 2', '3 - 3', '3 - 4'], _
    ['4 - 1', '4 - 2', '4 - 3', '4 - 4']]

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

    _ArrayDisplay($aArr, 'Example', Default, 32, Default, 'text1|text2|text3|text4')

    [/autoit]

    Welche AutoIt Version nutzt du und wo ist dein Beispielskript welcher den Fehler reproduziert?

  • hoher CPU Verbrauch

    • Yjuq
    • 13. März 2015 um 06:48

    So extrem viel CPU "verbraucht" dieses Konstrukt bei mir aber nicht:

    [autoit]

    While Sleep (10)
    ProcessExists (@AutoItPID)
    WEnd

    [/autoit]

    Ob die CPU jetzt zu 100% ausgelastet ist oder nur zu 10% ist eigentlich wurscht, jedem Prozess wird eine gewisse Zeit die CPU zur Verfügung gestellt. Ist diese Zeit abgelaufen kommt der nächste Prozess dran. Mit Sleep() erreichst du nur dass die vorgesehene Zeit direkt abgebrochen wird und dein Prozess wieder warten muss, bis es den Zugriffsrecht auf die CPU erhält. Von daher musst du dir da keine sonderlich großen Gedanken drum machen.

  • AutoIt User Comic – Showroom

    • Yjuq
    • 11. März 2015 um 19:04

    Seit wann sind denn 1MB = 1000kb?
    Sind das nicht 1024kb? Dann hast du dich arge verrechnet. ^^

    307,98kb / 2048kb = 15,04%

    Ich könnte auch nochmal wen zeichnen, bin gerade noch am überlegen wer's wohl sein wird. :P

  • Funktion auführen, egal welche Taste gedrückt wird

    • Yjuq
    • 10. März 2015 um 19:34

    Ach stimmt,... vergessen... ^^
    Zeile 9 ersetzen durch: Global Const $CALLBACK_RichBox = DllCallbackRegister('RichBox_WndProc', 'lresult', 'hwnd;uint;wparam;lparam')

  • Funktion auführen, egal welche Taste gedrückt wird

    • Yjuq
    • 10. März 2015 um 19:23

    Dann benutzt du noch eine ältere Version,...
    Zeile 30 ändern in: Local $aSyntax[1] = ['autoit']
    Zeile 48 ersetzen durch:

    [autoit]

    Local $iSel = _GUICtrlRichEdit_GetSel($hWnd)
    $iSel = $iSel[0]

    [/autoit]
  • Funktion auführen, egal welche Taste gedrückt wird

    • Yjuq
    • 10. März 2015 um 19:06

    Rein technisch gesehen kannst du das Include einfach raus nehmen.
    Aber die aktuelle Stable müsste das die au3 dabei liefern.

  • Funktion auführen, egal welche Taste gedrückt wird

    • Yjuq
    • 10. März 2015 um 18:53

    Das hier sollte genau das machen was du willst (gib mal "AutoIt" ein):

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    #include <GUIConstantsEx.au3>
    #include <GuiRichEdit.au3>
    #include <WinAPI.au3>
    #include <WinAPIConstants.au3>
    #include <WindowsConstants.au3>

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

    Global Const $CALLBACK_RichBox = DllCallbackRegister(RichBox_WndProc, 'lresult', 'hwnd;uint;wparam;lparam')
    Global $hGUI, $hRichBox, $pRichBox_WndProc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    $hGUI = GUICreate('', 800, 600)
    $hRichBox = _GUICtrlRichEdit_Create($hGUI, '', 0, 0, 800, 600)
    _GUICtrlRichEdit_SetFont($hRichBox, 16, 'Comic Sans MS')
    $pRichBox_WndProc = _WinAPI_SetWindowLong($hRichBox, $GWL_WNDPROC, DllCallbackGetPtr($CALLBACK_RichBox))
    GUISetState()

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While GUIGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

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

    DllCallbackFree($CALLBACK_RichBox)

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func EvaluateKey($hWnd, $iKeycode)
    Local $aSyntax[] = ['autoit']
    Local Static $sBuffer
    Local $i

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

    Switch $iKeycode
    Case 0x41 To 0x5A ; A to Z
    $sBuffer &= Chr($iKeycode)
    Case 0x08, 0x09, 0x20 ; Backspace and Whitespace
    $sBuffer = ''
    EndSwitch

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

    For $i = 0 To UBound($aSyntax) -1
    If $aSyntax[$i] = $sBuffer Then Return SetTextColor($hWnd, StringLen($sBuffer))
    Next
    EndFunc

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

    Func SetTextColor($hWnd, $iLen)
    Local $iSel = _GUICtrlRichEdit_GetSel($hWnd)[0]

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

    _GUICtrlRichEdit_SetSel($hWnd, $iSel - $iLen +1, $iSel +1)
    _GUICtrlRichEdit_SetCharBkColor($hWnd, 0x00FFFF)
    _GUICtrlRichEdit_Deselect($hWnd)
    _GUICtrlRichEdit_SetCharBkColor($hWnd)
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func RichBox_WndProc($hWnd, $iMsg, $wParam, $lParam)
    Switch $iMsg
    Case $WM_KEYDOWN
    EvaluateKey($hWnd, $wParam)
    EndSwitch

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

    Return _WinAPI_CallWindowProc($pRichBox_WndProc, $hWnd, $iMsg, $wParam, $lParam)
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]
  • Funktion auführen, egal welche Taste gedrückt wird

    • Yjuq
    • 10. März 2015 um 17:57

    Habe das Skript doch mal wieder raus genommen da ich jetzt erst gelesen habe dass du dich auf ein Control beziehst.

    Dafür sind die Windows Messages gedacht, WM_KEYDOWN & WM_KEYUP << Einfach mal googeln.

  • [close] AI Fight #1 - Snake

    • Yjuq
    • 9. März 2015 um 21:35

    Ein kleiner Push von meiner Seite aus, in 9 Tagen sollte auch der letzte (der mitmachen möchte) was eingesendet haben.
    Bisher gibt es nur eine Einsendung, nimmt überhaupt irgendjemand noch daran teil? ^^

  • Umschalttasten bleiben nach Send-Befehlen eingerastet

    • Yjuq
    • 7. März 2015 um 08:18

    Wahrscheinlich hast du solche Codefragmente in deinen Skripts:

    [autoit]

    Send('{SHIFTDOWN}xyz')

    [/autoit]

    Du musst auch die Taste wieder "lösen". Intern wird das so geregelt, dass ein entsprechendes Event versendet wird. Windows geht natürlich dann davon aus dass die Taste immer noch gedrückt ist wenn du diese nicht "wieder loslässt". Das machst du einfach mit den entsprechenden Gegenbefehl:

    [autoit]

    Send('{SHIFTDOWN}xyz{SHIFTUP}')

    [/autoit]
  • Variableninhalt als Teil von einem Befehl

    • Yjuq
    • 6. März 2015 um 20:35

    Ansonsten wäre es z.B. auch noch so möglich:

    Spoiler anzeigen
    [autoit]

    $DATENBYTE_HOLGER='1,1'
    $DATENBYTE_PETER='1,2'
    $DATENBYTE_JOSEF='1,3'
    $DATENBYTE_WERNER='2,1'
    $DATENBYTE_DANIEL='2,2'
    $DATENBYTE_PATRIK='2,3'
    $ANTWORT_BYTE11 = _DllStructGetData($struct, $DATENBYTE_HOLGER)
    $ANTWORT_BYTE12 = _DllStructGetData($struct, $DATENBYTE_PETER)
    $ANTWORT_BYTE13 = _DllStructGetData($struct, $DATENBYTE_JOSEF)
    $ANTWORT_BYTE21 = _DllStructGetData($struct, $DATENBYTE_WERNER)
    $ANTWORT_BYTE22 = _DllStructGetData($struct, $DATENBYTE_DANIEL)
    $ANTWORT_BYTE23 = _DllStructGetData($struct, $DATENBYTE_PATRIK)

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

    Func _DllStructGetData($tStruct, $vData)
    Local $asSplit = StringSplit($vData, ',')
    Return DllStructGetData($tStruct, $asSplit[1], $asSplit[2])
    EndFunc

    [/autoit]
  • ISN AutoIt Studio

    • Yjuq
    • 1. März 2015 um 22:05

    Ach, sehr gut versteckt! :D

  • ISN AutoIt Studio

    • Yjuq
    • 1. März 2015 um 19:15

    Ist mir auch schon aufgefallen. Finde die Umsetzung davon auch gut gelungen. Leider fehlen mir im Form Studio noch einige Controls. Was man vielleicht auch noch in Angriff nehmen könnte wäre die Möglichkeit ein User Control "zusammen zu klicken". Quasi die Möglichkeit eigene Controls zu entwerfen, das ist aber extrem aufwendig. Aber nur mal als Idee...

    Konkret fehlen noch folgende Controls:
    - Avi Control
    - Context Menu
    - Dummy Control (Sollte es auch geben, manchmal doch nötig)
    - Graphic Control (!)
    - Header Control
    - Image List Control
    - ReBar Control
    - RichEdit Control
    - ScrollBars Control (Bzw. die Möglichkeit diese für bestimmte Elemente zu aktivieren)
    - Toolbar Control

    Und noch eine andere Frage: Wie kann ich beim Tab Control weitere Tabs hinzufügen? Muss ich das per Hand machen?

  • ISN AutoIt Studio

    • Yjuq
    • 1. März 2015 um 02:55

    Servus, es wäre sehr schön wenn der generierte Code die benutzen Variablen als globale Konstanten definieren würde. Ich meine, die Variablen kommen (bzw. sollten nur) einmal vor, da wäre es ein kleiner Schutz ausversehen bei mehreren GUIs gleiche Variablen zu definieren. Da muss es irgend eine Schutzvorrichtung geben da man nicht immer den Überblick hat. :)

  • Text in HTML Seite auslesen

    • Yjuq
    • 1. März 2015 um 00:57
    Zitat

    Wie gesagt ich wäre bereit auch was zu zahlen. Ich verschwende zu viel Zeit schon und bin frustriert :-/


    Also, gerne können wir auch verhandeln :D

    Um welche Seite handelt es sich denn überhaupt?

  • Text in HTML Seite auslesen

    • Yjuq
    • 1. März 2015 um 00:54

    Dann erweitere eben den Patter, ich hatte eigentlich gedacht dass du die Daten soweit schon gefiltert hattest da du nur diesen Ausschnitt als Beispieldaten da gegeben hast. Den Rest mit dem IE Kram habe ich überflogen... Was genau willst du denn jetzt prüfen? Die Zahlen die da stehen oder nur ob eine weitere Kategorie auftaucht?

    1. >> StringRegExp($sText, '<option value="Kategorie \d*">Kategorie \d* frei: (\d*)</option>', 3)

    2. >> StringRegExp($sText, '<option value="Kategorie 5">Kategorie 5 frei: \d*</option>')

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™