Beiträge von Velted

    Habe schon eine erste Version gebaut, funktioniert aber noch nicht so wie gewünscht.

    Moin, wie wäre es denn gewünscht?


    Geht es nur darum eine variable Zahl von Icons (mit einer bekannten Maximalzahl) und zugehörigen Texten in zwei Reihen neben/untereinander anzuzeigen (wobei die Icon-IDs und der gemeinsame Text für 'Unterschrift' und Tooltip aus einer Access-DB geladen werden)?


    Und, wie sollen sie eingelesenen Werte sortiert werden (bzw. was steht in den Spalten 0 -3)?

    Na gut, dann ist das jetzt mein allerletzter Beitrag zu diesem Thema.


    Du hast im ersten Beitrag ein Problem beschrieben. In der Folge hast Du einige Informationen geliefert, wie der das Problem verursachende Hänger entsteht. Dann hat sich die Sache für DIch erledigt, weil eine neue Software eingesetzt werden soll, die das Problem höchstwahrscheinlich nicht mehr entstehen lässt.


    Ich wünsche Dir, dass Deine Hoffnungen erfüllt werden. Eine Lösung für das ursprünglich beschriebene Problam ist es aber nicht.

    Moin Windi,


    ich habe das schon gelesen. Bei diesem Betrag erschließt sich mir aber nicht wirklich, welche Probleme Du lösen willst.


    Aber gut, kommen wir auf das "Wie.......????????" im ersten Beitrag zurück:

    Ich habe dann keine Möglichkeit die Gui zu beenden.

    Auch nicht mit dem Taskmanager, da das Hintergrundbild aktiv bleibt.

    Gibt es eine Möglichkeit wenigstens das Hintergrundbild weg zu schalten.

    Für mehr Info bitte melden.

    Du zeigst da ein recht einfaches Skript mit zwei Fenstern. Mir ist völlig unklar, warum sich das Skript nicht beenden oder mit dem Taskmanager abschießen lassen sollte. Beide Fenster haben ja einen Close-Button.

    Oder meinst Du mit 'die Gui zu beende' das Fenster eines externen Programms? Wenn es über einen Button des Skripts gestartet wurde, gibt es auch hier für mich keinen ersichtlichen Grund, warum der Taskmanager das nicht killen können sollte.


    Ich bitte deshalb um mehr Info.

    Moin Windi,


    ich bin mir nicht sicher, ob ich das Zusammenspiel der Programme korrekt verstehe. Ich staune nur immer wieder, wenn ich von Programmen höre, die die Manipulation von wichtigen Daten wie einer Kundennummer zulassen. Wenn beide Programme zu einem 'zugelassenen System' gehören, erfüllen sie folgende Anforderung aus dem Leitfaden schonmal nicht:

    Zitat

    Das Programm muß sicher sein und Abstürze sowie Datenverluste durch Fehlbedienung weitestgehend ausschließen.


    Das Problem mit dem Taskmanager ist mir bisher auch nicht klar.

    Moin,


    noch eine Anmerkung zum Thema

    AutoIt
             _TimerSleep(4) ; "Sleep" mit Timer kann auch niedrigere Werte, allerdings mit 100% Last (ein Kern)

    Mit einer nicht dokumentierten Windowsfunktion geht das auch mit deutlich weniger CPU-Last:

    Die Funktion soll sich nach Allem, was ich bisher dazu gefunden habe, nur auf den aufrufenden Prozess auswirken. Einmal aufrufen und dann die Sleep() Aufrufe durch den zugehörigen DllCall ersetzen.

    AutoIt
    Func _ShortSleep($mSec)
        DllCall("Kernel32.dll", "None", "Sleep", "DWORD", $mSec)
    EndFunc

    Eine Auflösung von 1 Millisekunde (Minimalwert) wird zwar nicht immer erreicht, man kommt dem aber recht nahe.

    Moin,


    ich habe noch ein paar Minuten Google nachgelegt. Wenn Du diesen Artikel noch nicht kennst, könnte er Dir helfen.


    Ich musste in der ini die Stationsnummer ($s_uID) in Anführungszeichen setzen z.B. "02" und nicht 02

    Das stimmt so nicht. In der Nachricht belegen die Geräteadresse (ID) und der 'funktionale Code' (FC) jeweils ein Byte und beide sind numerisch.


    In der Hex-Darstellung brauchst Du für ein Byte zwei Zeichen. Aus dem numerischen Wert 2 wird dabei 02. Wenn Du den Wert als Text/String mit zwei Zeichen übergibst, klappt das nur bis zur Zahl 9, weil der Text"09" den zwei Halbbytes für den Wert entspricht. Ab "10" wird das aber falsch. Die hexadezimale Darstellung für die Zahl 10 ist 0A. Wenn Du stattdessen "10" übergibst, entspricht das dem Wert 16. Deshalb:

    AutoIt
    _ModbusTCP_Send($mainsocket, "0x" & Hex($TI, 4) & "0000" & Hex($iBytesToSend, 4) & Hex($s_uID, 2) & Hex($FC2, 2) & Hex($iStart, 4) & Hex($iNum, 4))

    Du kannst auch für die unterschiedlichen Abfragen/funktionalen Codes Formatspezifikationen für StringFormat erstellen. Ich finde das übersichtlicher. Für FC 0x04 könnte das dann so aussehen:

    Moin,


    wie erzeugt man eine so unüberscichtliche Codestruktur?


    Mein Wissen über den Modbus beschränkt sich auf das Ergebnis von 30 Minuten Google-Studium, aber

    AutoIt
        _ModbusTCP_Send($mainsocket, "0x" & Hex($TI, 4) & "0000" & Hex($iBytesToSend, 5)  & $s_uID & Hex($FC2, 2) & Hex($iStart, 4) & Hex($iNum, 4)) ;; komisch Hex($iBytesToSend, 4) ist sonst OK

    4 ist nicht 'sonst' OK, 4 ist 'einzig und allein' OK. Bei 5 sind alle folgenden Bytes um 1 verschoben. Es würde mich sehr wundern, wenn dabei etwas vernünftiges zurückgegeben wird.

    Moin,


    guter Fund. Ich habe mich früher mal mit RichEdits beschäftigt und hätte das auch gern gehabt, habe es aber nicht geschafft. Vielleicht lag es aber auch an Win XP.


    Ich habe mit Deiner Lösung gespielt. Offensichtlich ist die GuiRichEdit.au3 schon länger nicht mehr aktualisiert worden. Bereits mit WIn 8 sind viele Optionen hinzugekommen, von denen sich in der UDF nichts findet.


    Für die automatische Link-Erkennung gibt es z.B. die Option AURL_ENABLEDRIVELETTERS = 16, die auch normale Dateipfade findet. Die kann man mit _GUICtrlRichEdit_AutoDetectURL() leider nicht nutzen, weil die Funktion für den Parameter intern eine IsBool() Prüfung macht. Außerdem gibt es für die Links die Option SES_HYPERLINKTOOLTIPS = 8, die das Ziel als Tooltipps anzeigt. Das ist zwar eher eine Spielerei, man kann sie aber mit der UDF auch nicht nutzen, weil sowohl die Definition als auch eine Funktion für die Nachricht EM_SETEDITSTYLE fehlen. Auch für die Nachricht EM_SETOPTIONS gibt es keine Funktion. Damit kann man z.B. die Option ECO_SELECTIONBAR = 0x01000000 aktivieren, die an der linken Seite des RichEdit einen Auswahlbereich für Zeilen einrichtet.


    Ich habe noch einen weiteren Vorschlag. Für die Einfügeposition kannst DU meiner Meinung nach direkt den Wert cp aus $tagENDROPFILES mutzen. Dann kannst Du auf die Abfrage zu Zeichen- und Mauspositionen verzichten.


    Ich habe meine Ideen in das folgende Skript einfliessen lassen. Vielleicht ist da auch etwas für Dich dabei. Wenn Alles funktionieren soll, braucht es aber mindestens Win 8.


    Viel Spaß noch!

    Hierfür müssen die Zahlen in der Klammer immer weiter addiert werden, z.B. ($aNumber[0] + $aNumber[1] + $aNumber[2] + .... $aNumber[n])

    AutoIt
        $Loesung = $aNumber[0] * ($aNumber[0] + $aNumber[1] + $aNumber[2])

    Soll es nun * oder + sein?


    Bei + kannst Du alles innerhalb der For-Schleife addieren.

    casi4712:


    Ich war ein paar Tage offline, deshalb erst jetzt:

    Ich habe gelesen, dass Dir die Lösung mit GDIPlus durchaus bekannt ist. Ich hab diesen Lösungsweg aber nie vorgeschlagen und weiß deshalb auch nicht, warum Du mir das sagst.


    Wenn Du richtig gelesen hast, dann weißt Du, dass ich meine Lösung in Dein Skript aus Beitrag #19 eingebaut habe und das Flickern damit hier beseitigt habe. Ich glaube nicht, dass Du es jemals versucht hast:

    So und jetzt habe ich mir auch noch mal deinen Beitrag @Ve in dem anderen Posting angeschaut. Dies ist für sich gesehenein schönes Beispiel, hat aber mit meiner AdLibRegister Funktion, in der nur fallweise was angezeigt wird nicht viel zu tun.

    'Angeschaut' heißt wohl eher nicht 'ausprobiert'. Dass in meinem Beispiel die Funktion AdLibRegister() nicht aufgerufen wird, ist völlig egal. Diese Funktion zeigt zwar das 'Flickerproblem', ist aber nicht die eigentliche Ursache. Es liegt schlicht und einfach daran, wie das Fenster mitsamt der Steuerelemente nach einer Änderung neu gezeichnet wird. Es ist absolut egal, was die Änderung bewirkt.


    Wenn Du schon so viele Stunden mit der Lösungssuche verbracht hast, hättest Du die zwei Minuten, die es braucht, Dein Skript aus #19 anzupassen, wohl auch noch investieren können. Wir wüssten dann, ob die Lösung für Dich taugt.

    Was ist hier falsch? Aus dem Skript in #16:

    AutoIt
    Global $sSelected = "L01"
    ...
            If $aData[$i][1] = $sSelected Then

    ist gleich

    AutoIt
            If $aData[$i][1] = "L01" Then

    In der Zeile mit C14435440 steht in $aData[$i][1] aber UC-L01. Damit gibt es keine Übereinstimmung / keinen Treffer.


    Bei meinem Hinweis auf SA-L01 hatte ich mich in der Zeile vertan. Das hättest Du vielleicht selbst bemerken können. ;)

    Moin,


    AutoIt
                For $j = 2 To UBound($aData, 2) - 1         ; alle Spalten rechts davon verarbeiten
                    $sRow = $sRow & $aData[$i][$j] & "|"    ; mit | als TrennzeichenWenn verknüpfen 
                    ConsoleWrite($sRow & @CRLF)             ; und auf Konsole ausgeben
                    $sRow = ""                              ; <<<<< und gleich danach vernichten ???
                Next

    wenn man Daten in einer Schleife in einer Variablen sammeln will, macht es eher keinen Sinn, die Variable am Ende jedes Schleifendurchlaufs zu leeren.

    Moin,


    noch ein "Weg nach Rom", die "handwerkliche" Basisvariante. Bei derart überschaubaren Problemen, kann man auch auf einfache Lösungen zurückgreifen: