Beiträge von autoiter

    Hallo Leute,
    ich habe ein kleines Tool, dass ich über einen Hotkey aus einem anderen Programm heraus starte.

    Beim Start liest es eine Liste ein und zeigt bestimmte Einträge in einer Listview an. Nach der Auswahl eines Eintrags wird das Programm beendet.

    Nun wollte ich das Programm so ändern, dass es sich nur versteckt und über den Hotkey wieder angezeigt wird, damit nicht jedes Mal erneut die Liste eingelesen werden muss.

    Nun habe ich einfach statt Exit die GUI versteckt und wollte das Programm wieder "aktivieren" in dem das andere Programm beim Hotkey die GUI per WinSetState wieder einblendet, was auch klappt. Allerdings reagiert das Fenster nicht mehr (WM_Notify schon - die normalen Gui Messages aber nicht).

    Code
    1. $hGUI = GUICreate("Example-GUI", 300, 200)
    2. $idButton = GUICtrlCreateButton("test", 210, 170, 85, 25)
    3. GUISetState(@SW_SHOW, $hGUI)
    4. While 1
    5. Switch GUIGetMsg()
    6. Case $idButton
    7. MsgBox(0, "", "test", 1)
    8. GUISetState(@SW_HIDE, $hGUI)
    9. EndSwitch
    10. WEnd

    Beim Klick auf den Button, wird kurz eine MsgBox eingeblendet und dann das Fenster versteckt. Wenn ich dann ein anderes Skript starte, in dem nur WinSetState("Example-GUI", "", @SW_SHOW) steht, wird das Fenster wieder eingeblendet. Der Button reagiert jedoch nicht und schließen lässt es sich auch nicht über die GUI.

    Was muss ich hier beachten?

    Nun, ich hatte das Skript von Oscar mal heruntergeladen und darin nach "find" gesucht und das gefunden.

    Kann sein, dass in einer neueren Version umgestellt wurde. Hast du denn gesucht und etwas gefunden?


    Ist nicht böse gemeint. Aber es gibt hier auch Bereiche, in denen man die Erstellung eines Skripts erfragen kann - mit oder ohne Gegenleistung.
    Kann es sein, dass du dort besser aufgehoben bist?

    Hallo Banana_2_Day


    Einerseits finde ich einen Wechsel zu SQLite überhaupt nicht kompliziert und halte das definitiv für eine Alternative.

    Andererseits hängt das auch von deinen Inhalten ab. Irgendwo hatte ich gelesen, um was es geht. Jetzt finde ich es aber nicht. Jedenfalls sah das nicht nach großen Datenmengen aus. Wenn das der Fall ist, geht es sicher auch flott ohne SQLite.

    Deine Frage nach der Skriptstelle lässt mich etwas ratlos zurück. Das ist schon ein Schlag in Oscars Gesicht, weil er sich hier richtig Mühe mit der Kommentierung gegeben hat. Hast du überhaupt danach gesucht?$iStart = _GUICtrlListView_FindInText($idListView, $sSearch, $iStart, False) ; Suche im Listview

    Vermaledeite Virenscanner..

    Ich wollte baldmöglichst wieder eine doppelklickbare Verknüpfung zum Programmstart für die Kollegen auf dem Desktop haben.

    Schreib so etwas in deine unkompilierten Skripte. Dann kannst du den Leuten eine Verknüpfung geben, die wieder völlig normal aussieht. Hier gilt natürlich auch, dass du bei einer portablen Nutzung den Pfad anpassen musst:

    Code
    1. Global $sScriptName = "Skriptname"
    2. If Not FileExists(@ScriptDir & "\" & $sScriptName & ".lnk") Then _
    3. FileCreateShortcut(@AutoItExe, $sScriptName, @ScriptDir, '"' & @ScriptFullPath & '"', "Testbeschreibung", @SystemDir & "\shell32.dll")
    4. ; Skript ...

    Hallo hipfzwirgel

    Allerdings ist das 2. S tatsächlich ein großes. Ist hier nur ein Tippfehler, sorry for that.

    Wegen deines Kommentars glaube ich, da bestehen Unklarheiten. Bei Funktionsnamen und Variablen wird Groß-/Kleinschreibung nicht beachtet.

    Code
    1. _TeST()
    2. Func _test()
    3. Local $sTEST = 1
    4. MsgBox(0, '"$sTEST"', $sTest)
    5. EndFunc

    Vielen Dank Oscar ! :D
    Funktioniert super! (?:.*?=(.*?)) hatte ich probiert. Das hatte aber nicht funktioniert. Was macht "v+"?


    EDIT: Ah, ok. Das v+ verstehe ich nun. "*(?:" ist wirklich wichtig. Das heißt, der Stern sagt eigentlich - so oft es vorkommt.

    Hallo Leute,


    ich bin ein absoluter Regex-Idiot und kann nur profanste Dinge. Mit dem Auslesen einer Ini bin ich aktuell überfordert.


    Vorweg: Ich bin mir der Iniread(Section)-Befehle bewusst, möchte aber die Datei lieber nur einmal lesen und dann mit dem String arbeiten.


    Ich kann die aktuelle Struktur ganz plump und erfolgreich nachbauen. Jedoch müsste ich das Pattern bei jeder Änderung in der Ini auch überarbeiten. Ich weiß, Regex kann mehr. Daher würde ich mich sehr freuen, wenn ein kenntnisreicheres Mitglied mir zeigen würde wie es geht. Wie erfasse ich nach der Sektion (\[(.*?)\]) beliebig viele Werte?

    Code
    1. #include <Array.au3>
    2. $sString = "[ID1]" & @CRLF & "Ab=2019/12/12" & @CRLF & "Nummer=" & @CRLF & "Text=Test" & _
    3. @CRLF & "An=User1" & @CRLF & "Von=User1" & @CRLF & "Erledigt am=" & @CRLF & "Erledigt von=" & @CRLF & _
    4. "Jeder=Nein" & @CRLF & "Zuletzt geprüft=2019/01/01" & @CRLF & "Serienregel=Nein" & @CRLF & _
    5. "Ablage=OrdnerX" & @CRLF & "Geöffnet von=User2" & @CRLF
    6. $aRet = StringRegExp($sString, "\[(.*?)\]\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n", 3)
    7. _ArrayDisplay($aRet)

    Hallo BugFix

    Ich denke das ist ein sehr wertvolles Snippet für alle, die sich nicht so recht mit den Editoren anfreunden können. Ich mache bspw. alles im Code, weil ich das Gefühl habe, insgesamt länger zu brauchen, wenn ich Koda benutze und später alles für mich anpasse, was Koda als Code ausspuckt. Wenn ich das dann noch einmal ändern will...

    Da sind solche Ansätze Gold wert! Ich habe häufiger (einfache) Programme mit (dennoch vielen) Einstellungen, die über Controls wie Checkboxen oder Combos gesetzt werden. Gerade wenn man viele Checkboxen hat und sich später im Workflow etwas ändert und man mehr braucht, möchte man gerne die ganze Gruppe verschieben können, statt in jedes Control zu gehen und Änderungen vorzunehmen..


    Daher gehe ich da etwas anders vor, als du es hier im Snippet zeigst. Leider habe ich mir selbst noch keine UDF daraus gebaut, sondern mache das mal so mal so.


    Der plumpeste Weg ist

    Code
    1. Local $hGUI = GUICreate("")
    2. Local $idStart = GUICtrlCreateButton("Start", 150, 370, 85, 25)
    3. Local $apos = ControlGetPos($hGUI, "", $idStart)
    4. Local $idOK = GUICtrlCreateButton("OK", 10, 370, 85, 25)
    5. Local $idCancel = GUICtrlCreateButton("Cancel", $apos[0] -140, 370, 85, 25)

    Man ermittelt die Position von einem Startelement und positioniert dann alle anderen Controls in Abhängigkeit.
    Das Prinzip kann man dann noch in eine Funktion auslagern, in der man mehrere "Fixpunkte" verwaltet und alle Controls die zur Gruppe eines Fixpunktes gehören mit verschiebt.

    Den zweiten Weg benutze ich oft bei bereits vorhandenen Skripten, die ich nachträglich dynamischer machen will.
    Da wird dann etwa aus Local $idOK = GUICtrlCreateButton("OK", 10, 370, 85, 25) folgendes Local $idOK = _CtrlPos(GUICtrlCreateButton("OK", 10, 370, 85, 25), $idStart, 10, 50). $idStart ist dann der Bezugspunkt und die Funktion 10 x-Punkte zum Bezugspunkt und 50y-Punkte zum Bezugspunkt und die Rückgabe der Funktion isr die ID.

    Ich füge dann einfach die Funktion in ein bestehendes Skript ein und umschließe die Controlerstellung und kann dann Änderungen recht leicht vornehmen.

    Hallo Joschy41

    Aktuelles Problem nur, dass die Liste sich nur aktualisiert, wenn sich das Programm neu startet.

    Schau dir mal die Fehlermeldungen der relevanten Funktionen an. Wenn das nicht weiterhilft, erstelle ein verkürztes Beispiel, das nichts anderes tun soll, als die Daten per FTP zu holen und in die Liste zu übernehmen.

    Wenn du dann noch Probleme hast, kannst du uns dieses Bsp zeigen. Aber meist löst sich das Problem, bei so einer Beispiel-Erstellung :D