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

Beiträge von alpines

  • FB Code Optimierung

    • alpines
    • 21. April 2020 um 12:23

    #1: 74 FPS

    #3: 52 FPS

    R7 3700X, RTX 2070 Super, 16GB RAM, W10 Pro x64

  • Includes - Entsprechungen und Handhabung mit alten AutoIt Versionen

    • alpines
    • 21. April 2020 um 08:46
    Zitat von Professor Bernd

    Ein CallTip ist das kleine Fensterchen im Editor, das die Syntax und -Beschreibung zur jeweiligen Funktion anzeigt. Ich vermute, du meinst die Syntax-Beschreibungen in der au3.api? Falls ja, um die geht es nicht. :P

    Führst du denn deine Erweiterung als Skript aus und nicht am Ende als Exe? Wenn ja, dann spar dir auf jeden Fall die älteren Versionen, es macht da keinen Sinn noch irgendwas nachzuliefern, der Aufwand ist viel zu groß, der Nutzen viel zu klein.

    Du müsstest verschiedene Versionen schreiben und dann mit einem Masterscript erstmal prüfen welche AutoIt-Version installiert ist und dann das entsprechende Skript ausführen. (Das Problem hättest du bei einem Kompilat übrigens nicht).

  • Includes - Entsprechungen und Handhabung mit alten AutoIt Versionen

    • alpines
    • 20. April 2020 um 21:51

    Die Calltips werden immer für die installierte Version mitgeliefert, das macht AutoIt von Haus aus so. Es gibt keine Unterstützung für ältere Versionen da du ja nur eine Instanz von AutoIt installiert haben kannst.

    Dass man noch nebenher eine Beta parallel haben kann lassen wir mal außen vor.

    Dein Calltip-Viewer sollte also ebenfalls die Standardfunktionen bereits geparst haben und sie nur noch aus einer Datei auslesen.

    Und für das WinAPI-Problem gibts einen ganz einfachen Fix: Einfach nur WinAPI.au3 includen. Das wars.

  • RegEx gesucht

    • alpines
    • 20. April 2020 um 19:12
    Zitat von BigRox

    Nur wie bekomme ich dann den bearbeiteten String wieder in den Originalstring.

    Wie wärs denn wenn du den String replaced den du mit StringBetween rausgeparst hast ;)

  • RegEx gesucht

    • alpines
    • 20. April 2020 um 16:55

    Was können denn die beliebigen Zeichen sein? Wenn du vorhersehen kannst was da steht könntest du doch auch einfach :", " mit :"- " StringReplacen.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.5 2020.04.13)

    • alpines
    • 19. April 2020 um 12:44
    Zitat von water

    Kann es nicht daran liegen, dass "Exit" keine Funktion sondern ein Keyword/Schlüsselwort der Sprache ist?
    in der engl. Hilfe heißt es ja: "Calls a user-defined or built-in function ...". In der "Function Reference" von AutoIt taucht "Exit" aber nicht auf.

    Aus meiner Sicht daher kein Bug. Oder doch?

    Korrekt, sonst könnte man ja auch Exit in ternären Operatoren direkt verwenden, klappt aber nicht.

    In AutoIt wirds als Keyword behandelt, nicht als Funktion.

  • winclosearea() - suche eine Funktion, die dieser entspricht oder einen Workaround

    • alpines
    • 17. April 2020 um 17:53
    Zitat von svenjatzu

    Mein problem ist nicht dass ich ein Puplikum brauche um meine XY-Ungelöst lebensgeschichte zu erzählen

    Zitat von svenjatzu

    Deutschland 2020 ein Land der klugen Köpfe die hinterfragen müssen wozu man etwas braucht bevor man eine Punktlieferung zustande bringt.

    Wow, also wer so frech mit der Tür ins Haus fällt kann sich seine Hilfe woanders suchen. Tritt gefälligst mal auf die Bremse, das hier ist kein Selbstbedienungsladen.

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 16. April 2020 um 21:15
    Zitat von Professor Bernd

    Hier mal ein Test-String, den ich für die Entwicklung vom CallTipViewer benutze. (ohne Tabs)

    Da fehlt eine Klammer hinter der Variable, ist das der Fehler?

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 16. April 2020 um 18:32

    Mal ganz blöd gefragt, gibt es eigentlich keine API-Funktion dafür? Der Editor zeigt doch unten sogar die echte Zeichenposition und die fake Zeichenposition an.

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 16. April 2020 um 02:34
    Zitat von Professor Bernd

    Es gibt soviele verschiedene Einstellungen für die Tab-Weite. Die Tab-Weite kann ich aus der PSPad.ini auslesen. Aber wie dann weiter? Da stehen ja nicht nur Leerzeichen, sondern jedes beliebige Zeichen kann die Entfernung bis zum nächsten Tab-Stop (heißt das so?) beeinflussen.

    Wirf die Flinte nicht so schnell ins Korn.

    Es ist schon sehr spät und mein Gehirn arbeitet nur noch notdürftig aber ich hab was ekelhaftes zusammenschustern können:

    Spoiler anzeigen

    Gesucht ist die Position des As. Das soll das Caret sein, aber du kannst ja dann dementsprechend zurückrechnen.

    Die Regexe sind alle ausgeschrieben und können ERHEBLICH reduziert werden, da sich dort viele Elemente wiederholen. (siehe Algorithmus unten)

    Wenn ich das im Halbschlaf hinbekomme, dann kriegt doch ein kluges Köpfchen wie du, dass auch sauber und vernünftig hin.

    Einfach mal überlegen was man beachten muss und das Problem ist einfacher als gedacht.

    Tabs sind hier mit Ts ersetzt. Und Code so strukturiert, dass ich das mit StringInStr zurückgeben kann. Ist aber nicht notwendig, geht aber auch anders.

    Code
    ; Tabweite = 4 !!!
    Local $aStrings[] = [ _
        "T012" & "3456789A", _
        "0T12" & "3456789A", _
        "01T2" & "3456789A", _
        "012T" & "3456789A", _
        "TT01" & "23456789A", _
        "T0T1" & "23456789A", _
        "T01T" & "23456789A", _
        "0TT1" & "23456789A", _
        "0T1T" & "23456789A", _
        "01TT" & "23456789A", _
        "TTT0" & "123456789A", _
        "T0TT" & "123456789A", _
        "TT0T" & "123456789A", _
        "0TTT" & "123456789A", _
        "TTTT" & "123456789A", _
        "0000" & "0123456789A" _
    ]
    
    For $i = 0 To UBound($aStrings) - 1
        ConsoleWrite($aStrings[$i] & ":" & StringInStr($aStrings[$i], "A") & "(" & RechneDieVerrueckteDistanzZumAHerausAuchWennEsKomplizierterKlingtAlsEsTatsaechlichIst($aStrings[$i]) & ")" & @CRLF)
    Next
    
    Func RechneDieVerrueckteDistanzZumAHerausAuchWennEsKomplizierterKlingtAlsEsTatsaechlichIst($sZeile)
        Local $sNeueZeile = ""
    
        For $i = 1 To StringLen($sZeile) Step 4
            Local $sSegment = StringMid($sZeile, $i, 4)
    
            If StringLen($sSegment) = 1 Then $sSegment &= "000"
            If StringLen($sSegment) = 2 Then $sSegment &= "00"
            If StringLen($sSegment) = 3 Then $sSegment &= "0"
    
            If StringRegExp($sSegment, "T[^T][^T][^T]") Then $sNeueZeile &= "0000" & StringMid($sSegment, 2, 3)
            If StringRegExp($sSegment, "[^T]T[^T][^T]") Then $sNeueZeile &= StringMid($sSegment, 1, 1) & "000" & StringMid($sSegment, 3, 2)
            If StringRegExp($sSegment, "[^T][^T]T[^T]") Then $sNeueZeile &= StringMid($sSegment, 1, 2) & "00" & StringMid($sSegment, 4, 1)
            If StringRegExp($sSegment, "[^T][^T][^T]T") Then $sNeueZeile &= StringMid($sSegment, 1, 3) & "0"
    
            If StringRegExp($sSegment, "TT[^T][^T]") Then $sNeueZeile &= "0000" & "0000" & StringMid($sSegment, 3, 2)
            If StringRegExp($sSegment, "T[^T]T[^T]") Then $sNeueZeile &= "000" & StringMid($sSegment, 2, 1) & "000" & StringMid($sSegment, 4, 1)
            If StringRegExp($sSegment, "T[^T][^T]T") Then $sNeueZeile &= "0000" & StringMid($sSegment, 2, 1) & StringMid($sSegment, 3, 1) & "000"
            If StringRegExp($sSegment, "[^T]TT[^T]") Then $sNeueZeile &= StringMid($sSegment, 1, 1) & "000" & "0000" & StringMid($sSegment, 4, 1)
    
            If StringRegExp($sSegment, "[^T]T[^T]T") Then $sNeueZeile &= StringMid($sSegment, 1, 1) & "000" & StringMid($sSegment, 3, 1) & "000"
            If StringRegExp($sSegment, "[^T][^T]TT") Then $sNeueZeile &= StringMid($sSegment, 1, 2) & "00" & "0000"
            If StringRegExp($sSegment, "TTT[^T]") Then $sNeueZeile &= "0000" & "0000" & "0000" & StringMid($sSegment, 4, 1)
            If StringRegExp($sSegment, "T[^T]TT") Then $sNeueZeile &= "0000" & StringMid($sSegment, 2, 1) & "000" & "0000"
    
            If StringRegExp($sSegment, "TT[^T]T") Then $sNeueZeile &= "0000" & "0000" & StringMid($sSegment, 3, 1) & "000"
            If StringRegExp($sSegment, "[^T]TTT") Then $sNeueZeile &= StringMid($sSegment, 1, 1) & "000" & "0000" & "0000"
            If StringRegExp($sSegment, "TTTT") Then $sNeueZeile &= "0000" & "0000" & "0000" & "0000"
            If StringRegExp($sSegment, "[^T][^T][^T][^T]") Then $sNeueZeile &= $sSegment
        Next
    
        Return StringInStr($sNeueZeile, "A")
    EndFunc
    Alles anzeigen

    Du kannst dir auch einen einfachen Algorithmus zusammenbasteln, der ist dann etwas platzsparender:

    Betrachte ein Textsegment von der Länge 4 (Tabweite).

    Tab => 4

    A B C D => 4

    A Tab BC => 4 + 2 (A fällt weg)

    A B Tab C => 4 + 1 (A B fallen weg)

    A B C Tab => 4 (A B C fallen weg)

    Und das ganze wiederholst du dann einfach immer wieder.

    Ein Tab füllt es ja bis zum nächsten 4er Segment auf, deshalb musst du da nichts mitschleppen sondern kannst von dort aus einfach neu draufzählen.

    Im Grunde musst du nur den String durchlaufen und prüfen in welchem Teil des Segmentes du gerade bist und je nach Tab dann entsprechend mitzählen.

    Vielleicht seh ich mir das morgen nochmal an, aber jez gehts erstmal in die heia

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 15. April 2020 um 23:04

    Das solltest du doch trotzdem dementsprechend berechen können. Zwei Leerzeichen + Tab = 1 Tab.

    Es würde doch reichen Gruppen an x Zeichen zu parsen (x = Tabweite) und die dann einzeln auszurechnen je nachdem was drin ist.

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 15. April 2020 um 22:28
    Zitat von Professor Bernd

    Stehe gerade auf dem Schlauch, kannst du das mal übersetzen? :)

    War wohl geistig abwesend. Hab das falsche dazu zitiert.

    Zitat von Professor Bernd

    Genau so mache ich es, und genau da tauchen die Probleme mit Tabs auf. Im Text ist 1 Tab = 1 Zeichen, aber der Editor interpretiert jenach Einstellung entsprechend viele virtuelle Leerzeichen. Aber die virtuellen Leerzeichen sind in der Tat nicht echt, der Editor zieht die Darstellung für 1 Tab auf die eingestellte Länge, aber es ist und bleibt 1 Zeichen. Deshalb funktioniert die genannte Zurückrechnung nicht.

    Kannst du die Einstellung nicht einfach auslesen? Wenn ein Tab 4 Leerzeichen sind verrechnest du das einfach damit. Ich schätze man wird auch die Tablänge einstellen können, und wenn man das einstellen kann, kann man die Einstellung auch sicherlich auslesen.

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 15. April 2020 um 22:00
    Zitat von Professor Bernd

    In PSPad kann ich mir die Pixel / Screen-Koordinaten ausgeben lassen, an der das Caret steht. So erhalte ich z. B. die X-Position vom "a" in "Hallo" (siehe Postint #1). Nun könnte ich im Au3 die Pos vom ersten FuncName-Char ermitteln, das Caret in PSPad verschieben, die gewünschte X-Pos auslesen und das Caret zurücksetzen.

    Naja nicht unbedingt oder. Wann wird das Calltiperzeugt? Wenn du den Namen der Funktion getippt hast und dann die Klammer öffnest (die optionalen Leerzeichen dazwischen sind mal dahintegestellt...).

    Da JEDER Programmierer, der kein absoluter Sozipath ist, monospace Schriftarten verwendet, brauchst du doch nur die Breite eines Zeichens zu ermitteln und einfach die Länge des Funktionsnamens * BreiteZeichen zurückzurechnen. Das Caret steht ja am (

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 15. April 2020 um 21:24

    Kannst du dir in PSPad nicht die Pixel-Koordinate (nicht Zeichen-koordinate) des Zeichens innerhalb des Editcontrols ausgeben lassen?

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 15. April 2020 um 20:05

    Ich glaube das dürfte dort mit Tabs aber auch nicht hinhauen, aber ich glaube du sägst am falschen Ast.

    Was willst du denn erreichen wenn du die Position hast? Was ist das eigentlich Problem?

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • alpines
    • 15. April 2020 um 19:44
    Zitat von Professor Bernd

    Wie kann man die X-Pos vom "M" in "MsgBox ermitteln, wenn Tabs im Text sind?

    Gibts da nicht was mit GDI+ um Texte zu measuren?

  • Accelerators UDF

    • alpines
    • 15. April 2020 um 12:39
    Zitat von BugFix

    Hehe, da hast du völlig recht. Ich hatte da noch irgendeinen anderen Gedanken im Kopf, der es nötig machte die Schleife kpl. zu durchlaufen. Der Gedanke verflog - aber das Konstrukt blieb. ^^

    Jetzt musst du nur noch die $bExists Variable wegschmeißen!

  • Accelerators UDF

    • alpines
    • 15. April 2020 um 11:54
    Zitat von BugFix

    For $i = 0 To UBound($aAccelerators) -1
    If $aAccelerators[$i][0] = $_HotKey Then
    $bExists = True
    ExitLoop
    EndIf
    Next
    If $bExists Then Return SetError(1,0,0)

    Alles anzeigen

    Da sieht man mal wieder ein Standardkonstrukt :D

    Bool vor der Schleife erzeugen, in der Schleife prüfen und dann rausspringen und später prüfen wofür man es braucht.

    Du hättest hier ruhig das $bExists komplett weglassen können und einfach direkt aus der Funktion returnen können wenn du deine Funktion so eng zusammenstauchst, du verwendest es später ja nicht mehr. Aber gut, Stilsache.

    Ich würde dir vielleicht noch raten dich an die Namenskonvention zu halten, damit das ein wenig deckungsgleich mit UDFs ist.

    _GUIDummy_CreateWithAccelerator() oder sowas.

  • Font size ist irgendwie komisch

    • alpines
    • 15. April 2020 um 09:56
    Zitat von Professor Bernd

    Diesmal habe ich mal NICHT vorher recherchiert, sondern frage erstmal hier.

    Du Frevel, wenn ich das hier nochmal sehe dann gibts was auf die Finger.

    Ich hab deinen Post gelesen, aber ich sehe nirgends ein Fragezeichen. Was ist denn deine Frage?

    LibreOffice mit AutoIt zu vergleichen ist etwas unpraktisch, denn viele Software benutzen nicht die Standardfont bzw. irgendwas standardmäßiges von Windows wenn sie ihre GUI erzeugen. Siehe Chrome, Steam, Skype, TeamViewer.

    Es kann auch noch sein, dass du einige Optionen im LibreOffice Dokument hast die die Schriftart etwas modifizieren: Zoom, DPI und dergleichen.

    Wenn du ganz sicher gehen willst, dass es nicht AutoIts Schuld ist, dann nehm direkt die WinAPI-Funktionen um Schriftarten zu erzeugen und zeichne sie so auf deine GUI.

  • TreeViewItems als Array

    • alpines
    • 9. April 2020 um 12:10

    Du kannst im Case angeben von wo bis wohin das greifen soll. Da AutoIt intern alle Controls aufsteigend durchnummeriert kannst du dir das zu nutze machen, wenn du die TreeViews alle hintereinander erzeugst.

    Anschließend musst du dem GetText nur noch das selektierte Item übergeben, und das findest du ebenfalls mit der entsprechenden Funktion raus.

    C
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <StaticConstants.au3>
    #include <TreeViewConstants.au3>
    #include <GUITreeView.au3>
    #include <WindowsConstants.au3>
    
    Example_Tree()
    Func Example_Tree()
        GUICreate("My test treeview GUI", 350, 210)
        Local $idTreeview = GUICtrlCreateTreeView(5, 5, 340, 200)
        Local $idTreeview1 = GUICtrlCreateTreeViewItem("#1",$idTreeview)
        Local $idTreeview2 = GUICtrlCreateTreeViewItem("#2",$idTreeview)
        Local $idTreeview3 = GUICtrlCreateTreeViewItem("#3",$idTreeview)
        Local $idTreeviewArray[4]
        $idTreeviewArray[0] = GUICtrlCreateTreeViewItem("#1.1",$idTreeview1)
        $idTreeviewArray[1] = GUICtrlCreateTreeViewItem("#1.2",$idTreeview1)
        $idTreeviewArray[2] = GUICtrlCreateTreeViewItem("#2.1",$idTreeview2)
        $idTreeviewArray[3] = GUICtrlCreateTreeViewItem("#2.2",$idTreeview2)
        GUICtrlSetState($idTreeview2, BitOR($GUI_EXPAND, $GUI_DEFBUTTON))
        GUISetState(@SW_SHOW)
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $idTreeview1 To $idTreeviewArray[3]
                    MsgBox(0,"you pressed",_GUICtrlTreeView_GetText($idTreeview, _GUICtrlTreeView_GetSelection($idTreeview)))
            EndSwitch
        WEnd
    EndFunc
    Alles anzeigen

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™