Beiträge von BugFix

    Ich habe folgendes Skript erstellt, um mir Style und StyleEx von Fenstern in Namenform ausgeben zu lassen:

    Das kann man wohl nicht generell festlegen. Ich habe z. B. eine Messmittelverwaltung in einer DB mit 3 Tabellen. Da habe ich kpl. auf zusätzliche Keys verzichtet und speichere gezielt redundant, weil das Datenaufkommen so gering ist, dass Redundanzvermeidung und Indexing keinen Vorteil bringen.

    Es hängt also stark von deiner Anwendung ab.

    Man kann sich stur an irgendwelche Regeln halten, wenn es so vorgegeben ist (z. B. Qualitätsmanagement) muss man es auch, aber es lohnt sich schon Abläufe zu hinterfragen.

    Also, das Skript war einfach nicht lauffähig. Man geht auch anders vor: Erst Erstellen aller GUI (deine MsgBox ist auch eine GUI) und dann bei Bedarf aktualisieren und einblenden.

    Ich habe das mal an deinem Musterskript geändert:

    Einige Editor-Funktionen basieren auf dem Wert der aktuellen Cursorposition. Man muss dann immer auf dieser Basis andere Funktionen aufrufen.

    Ich habe das mal in eine Funktionsgruppe integriert um etwas übersichtlicher und direkter die gewünschten Parameter abzufragen. Evtl. ist das auch für euch interessant.


    Das Bsp. selber funktioniert, wie du es wünschst:

    Falls der Aufbau deiner Datei von deinem gezeigten Muster abweicht, greift natürlich das Pattern nicht mehr. Da muss man natürlich wissen, wie die Datei aussehen kann.

    Die Zeile local core = require "alien.core" wird in der Verarbeitung von require zu local core = require "alien" eingedampft.

    Das hatte ich wohl falsch interpretiert.

    Wie mir jetzt klar wurde, bedeutet der Punkt schlicht und einfach: "this folder" und gibt an, dass die nachfolgend benannte Datei aus diesem Ordner geladen werden soll. Ist ja auch sinnvoll, da einige Bibliotheken selbst zusätzliche, nur für diesen Zweck gültige, Bibliotheken nachladen, die aber namentlich mit anderen Bibliotheken identisch sind (core, struct). So bleibt ordentlich beisammen, was zusammen gehört.


    Die Funktionsweise habe ich jetzt im Skript im Startpost angepasst. -- Noch ergänzt um Erkennung von Mehrfach-require in einer Zeile.

    Kannst du auch so lösen:

    EDIT:

    Wenn ich das richtig interpretiere ist die Anzahl der Treffer in der Datei unterschiedlich. Dann solltest du in der GUI die Werte als Liste/Listview (dynamische Ctrl) eintragen oder musst die GUI bei Verwendung von Label (statische Ctrl) selbst dynamisch gestalten. Dafür mal ein Bsp. aus meiner Sammlung:

    Hier mal ein Skript aus meiner Sammlung, zum Wechseln von Ctrl zu Ctrl mittels ENTER.

    Das Skript arbeitet im OnEventMode. Da kannst du deine Aläufe entsprechend anpassen und integrieren.

    Oui, oui, oui :huh:

    bevor ich irgendwie näher auf dein Problem eingehe: Schau dir bitte mal die Bsp. zu GuiCreate etc. an.

    Du erstellst in einer Schleife immer wieder GUI und Controls! Das macht man einmalig vor dem Mainloop.

    Alle anderen Probleme resultieren mit Sicherheit daraus.

    Was soll übrigens dein While 1, While 2, ... bedeuten? Ich vermute dir ist die Funktion der Schleifen nicht ganz klar. Du brauchst nur eine einzige Schleife in der du alle Ereignisse auswertest.

    Die Position des gewünschten Backslash ermitteln. Dann kannst du dort ersetzen (String- Funktionen).


    Python
    1. $sText = "c:\1\2\3\4\5\test.txt"
    2. $pos1 = StringInStr($sText, '\', 0, 1)
    3. $pos2 = StringInStr($sText, '\', 0, 2)
    4. $posLetzter = StringInStr($sText, '\', 0, -1)
    5. $posVorLetzter = StringInStr($sText, '\', 0, -2)

    Gibt ja noch das FileSystemObject:

    Python
    1. Global $sPathWin = @WindowsDir
    2. Global $sPathNotExists = 'C:\Fantasy'
    3. ConsoleWrite('_DirExists($sPathWin) ' & _DirExists($sPathWin) & @CRLF)
    4. ConsoleWrite('_DirExists($sPathNotExists) ' & _DirExists($sPathNotExists) & @CRLF)
    5. Func _DirExists($_sDir)
    6. Local Static $oFileSystem = ObjCreate('Scripting.FileSystemObject')
    7. Return $oFileSystem.FolderExists($_sDir)
    8. EndFunc


    Edit:

    Noch eine Variante

    Python
    1. Func _DirExists($_sDir)
    2. Local $aRet = DllCall('shlwapi.dll', 'bool', 'PathIsDirectoryW', 'wstr', $_sDir)
    3. Return ($aRet[0] > 0 ? True : False)
    4. EndFunc

    Na genau diese 'Aufbewahrungsfunktion' ist doch mein _Obj/_ArrVarsHandler.

    Static Variablen behalten ihren Wert auch nach dem Funktionsaufruf. Innerhalb der Funktion als Local Static sind es somit Lokale Variablen die man aus der Funktion abfragen und die man ändern kann. Genau was du willst.

    Wir hatten vor viiiiielen Jahren mal eine Diskussion zur Vermeidung Globaler Variablen. Da hatte ich zwei Funktionen zum Variablenmanagement erstellt (tun beide dasselbe), um alle Variablen im Lokalen Namespace einer Funktion zu halten. Die Variablen werden intern im Skript als Strings verwendet.


    Den Thread hier zu finden ist gar nicht leicht. Könntest du den im Thread "FAQ - SciTE Editor" verlinken, z. B. Im Posting #11?

    He, He - das war das Erste, was ich nach dem Verschieben der Posts in diesen Thread getan habe. Beide Threads sind wechselseitig miteinander verlinkt:

    Zitat von FAQ - SciTE Editor / Startpost


    (Die Frage-Antwort-Posts werde ich der Übersichtlichkeit halber danach entfernen --> verschieben: Link )

    Zitat von dieser Thread / Startpost

    Da in der FAQ ( Link ) Diskussionen entstehen

    8o

    Ich würde das völlig anders lösen. Nicht warten bis die Tasten released sind, sondern sie freigeben und Send() abschicken.


    Stimmt, aber so ganz verstehe ich die Funktion nicht.

    Es ist ja nichts drin, wo die strg-Taste wieder losgelassen wird.

    Nein, aber die Funktion feuert Send erst ab, wenn die Tasten freigegeben sind. Ist das nach 1s noch nicht passiert kommt die Fehlermeldung.

    Wenn du schon Erfahrungen hast, geht es also darum, den richtigen Weg zu finden.


    - auf beiden PC brauchst du Server und Client

    - jeweils an unterschiedlichem Port

    - definiere ein Protokoll

    z. B. könntest du nach folgendem Muster senden: '1#1056#NACHRICHT#0'

    # = Trennzeichen

    1 = beginne zu senden

    1056 = Anzahl Bytes der Sendung (gesamter String)

    NACHRICHT = die Nachricht selbst

    0 = fertig mit senden


    Der Empfänger bestätigt dann mit der empfangenen Bytezahl (worauf der Sender wartet). Wird diese Nachricht mit falschem Wert oder außerhalb eines Zeitfensters empfangen, wird erneut gesendet.


    Ich meine mich zu erinnern, dass hier im Forum ein Bsp. zur Interprozesskommunikation existiert, welches auf TCP Basis arbeitet. Such einfach mal.