Das Aktuelle SciTe Editor Script aus SciTe Lesen?

  • 8o 8o 8o 8o 8o Hallo liebe Mit AutoItler & AutoItlerinen, 8o 8o 8o 8o 8o

    Folgendes, ich versuch ein Programm zu entwickeln, was mit einem Tastendruck sagenwir F8,
    den SciTe Editor aktualisiert, was den Bereich des Automatischen einfügens und ergänzens der Functions
    (UDFs) und der Constanten (auch UDFs) angeht. (SciTeDir\API\User.Call.Tips.api)
    Es soll das jeweilige aktuelle SciTe Script Analysieren auch Includs and Sub-Includes und die Besagte File auf Aktuellen stand bringen.

    Dazu benötige ich noch folgendes.

    • Wie man Funktionierend das Aktuelles Script aus SciTe heraus lesen und komplet oder Zeilenweise in eine Variable oder Array Variable einliest. (Ps. der Befehl ControlGetText("[CLASS: SciTEWindow]", "", "[CLASS: Scintilla1; CLASSNN: Scintilla; INSTANCE: 1]") hat so und in anderen Varianten nicht Funktioniert.
    • Wie man der SciTe Editor die (User.Call.Tip.api und seine anderen Einstellungs Dateien neu einließt ohne das man SciTe neu starten muss. Bsw. ein Tastenkombination die man an SciTe schickt oder ein DDE befehl, nur kenn ich diesen halt noch nicht.

    Wenn alles klappt wie ich es vorhab dann werde ich das Programm und die Scripts hier im Forum veröffentlichen
    so das alle was davon haben, sollte es aber scheitern, behalte ich mir vor alles zurückzuziehen.

    Es wäre schön, hättet ihr eine Lösung den das würde das Programmieren in SciTe essentiell verbessern
    wie es beispielsweise in VB und C/C++ ist. Da geht ja auch bei allen Befehlen egal wo und wann sie geschrieben
    wurden und wo sie stehen (halt auch neue UDFs sozusagen) ein einfüg hilfe auf.

    nach dem Prinzip:

    NewFunctyTest(_
    [NewFunctyTest($Parm1, $Parm2) require #include <OwnNewFile.au3>]

    Es dauert leider bis ich alles mitbekomme, da ich selbst kein Internet hab sondern alles bei einem Freund mache
    was Internet angeht, aber ich versuch regelmäsig vorbei zu schauen nach neuem.

    Alsden, Allen alles gute...
    :thumbup: :thumbup: :thumbup:

    Einmal editiert, zuletzt von Mr.Script (21. September 2009 um 21:14)

  • An PokerFace... / Benne

    Ich hab dieses "OrganizeIncludes 4.3" schon versucht anzuwenden aber
    es hat nicht so geklappt wie ich wollte, beziehungsweise weis ich auch nicht
    es richtig anzuwenden...

    Außerdem wenn ich mich nicht irre ist "OrganizeIncludes 4.3" nur für Include UDF Dateien im AutoIt
    Include Verzeichnis. Mein Programm soll jeweils das noch im SciTe Editor stehende Script
    Analysieren mit den jeweiligen Functionen und Constanten und allen im Script aufgerufenen include Files
    und deren Func. und Const... und so weiter... und diese dann nur in die API\User.Call.tip.api File von SciTe
    Überschreiben. Mein Programm könnte dann SciTe direct mit einer Taste auf den Stand des Aktuellen
    Projects setzten.

    LG & Danke fürs zügige Antworten... :rolleyes:

    Einmal editiert, zuletzt von Mr.Script (15. September 2009 um 15:28)

    • Offizieller Beitrag

    und diese dann nur in die API\User.Call.tip.api File von SciTe

    Also mit dem Satz kann ich gar nix anfangen. Was willst du denn mit den Calltipps?

    Und alles andere erledigt OrganizeIncludes für dich (Analyse des aktuellen Skripts, erforderliche Includes einbinden). Schau dir den Thread von Xenobiologist an, dort ist genau beschrieben, wie du es einrichten mußt.

    • Offizieller Beitrag

    Hi,

    ich bin derzeit dabei das Thema Organize Includes im Eng Forum im versteckten MVP Forum mit Jos & anderen zu besprechen.
    Danach werde ich mit der Umsetzung beginnen. Ziel ist es OI schnell zu machen und dann in Scite4Autoit zu integrieren.
    Dafür gibt es aber noch einige Details zu klären bevor ich anfangen kann.
    Die Umsetzung wird dann sicher auch noch jede Menge Zeit in Ansoruch nehmen.

    Was willst du denn noch enbauen, außer das Finden der richtigen includes?

    Mega

  • Eigentlich nur das was ich beschrieben hatte.

    Aber danke, ich melde mich wenn mir noch was einfällt...

    Danke für die Mühe & Hilfe

    Alles gute... :thumbup:
    Mr.Script

    [Ps. Noch an BugFix: C:\Programme\AutoIt3.3\SciTe\API\User.Call.tips.api oder so ungefähr lautet der name einer SciTe Datei in der die Benutzer
    zusätzliche Befehle und Konstanten eintippen können. Diese werden dann
    wenn man ein Script am Screiben ist als einfüg hilfe angeboten.]

    So ich muss jetzt aber hab keine Zeit mehr.

    Nicht vergessen ich bin ohne eigenes Internet nur seltener zu erreichen, aber danke trozdem
    man höhrt/liest sich. :thumbup:

    Alles Gute...
    Mr.Script

    • Offizieller Beitrag

    http://www.autoitscript.com/forum/index.php?showtopic=22636
    http://www.autoitscript.com/forum/index.php?showtopic=61974
    http://www.autoitscript.com/forum/index.php?showtopic=25029

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    Opt('WinSearchChildren', 1)

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

    Global $SciTECmd = 0
    $GUI = GUICreate('test')

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

    ; Get SciTE DirectorHandle
    $Scite_hwnd = WinGetHandle('DirectorExtension')
    GUIRegisterMsg($WM_COPYDATA, 'MY_WM_COPYDATA')
    $My_Dec_Hwnd = Dec(StringTrimLeft($GUI, 2))

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

    Global $opt = Opt('WinTitleMatchMode', 4)
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'askfilename:')
    ConsoleWrite($SciTECmd & @CRLF)
    $SciTECmd = StringReplace($SciTECmd, '\\', '\')
    ; ConsoleWrite($SciTECmd & @CRLF) ; Ausgabe kompletter Rückgabewert von askfilename:
    Global $FilePath = StringTrimLeft($SciTECmd, StringInStr($SciTECmd, ':', Default, 3))
    ;MsgBox(0, '', $FilePath) ; Ausgabe Dateipfad
    Global $FileName = StringSplit($SciTECmd, '\\')
    ;SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:' & $FileName) ; Ausgabe des Dateinamens in die Console
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'menucommand:106') ; save
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'menucommand:106') ; revert
    Opt('WinTitleMatchMode', $opt)

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

    ; Open File
    Local $h_file = FileOpen($FilePath, 0)
    If $h_file = -1 Then
    MsgBox(16, 'Error', 'Could not open file : ' & $FilePath, 5)
    Exit (0)
    EndIf
    ; Read file
    $source = FileRead($h_file)
    If @error > 0 Then
    MsgBox(16, 'Error', 'Could not read file : ' & $FilePath, 5)
    Exit (0)
    EndIf
    FileClose($h_file)
    MsgBox(64, 'Source', $source)

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

    ; Send command to SciTE
    Func SendSciTE_Command($My_Hwnd, $Scite_hwnd, $sCmd)
    $sCmd = ':' & $My_Dec_Hwnd & ':' & $sCmd
    ;ConsoleWrite('-->' & $sCmd & @LF)
    Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']')
    DllStructSetData($CmdStruct, 1, $sCmd)
    Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
    DllStructSetData($COPYDATA, 1, 1)
    DllStructSetData($COPYDATA, 2, StringLen($sCmd) + 1)
    DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
    DllCall('User32.dll', 'None', 'SendMessage', 'HWnd', $Scite_hwnd, _
    'Int', $WM_COPYDATA, 'HWnd', $My_Hwnd, _
    'Ptr', DllStructGetPtr($COPYDATA))
    EndFunc ;==>SendSciTE_Command

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

    ; Received Data from SciTE
    Func MY_WM_COPYDATA($hWnd, $msg, $wParam, $lParam)
    Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr', $lParam)
    Local $SciTECmdLen = DllStructGetData($COPYDATA, 2)
    Local $CmdStruct = DllStructCreate('Char[255]', DllStructGetData($COPYDATA, 3))
    $SciTECmd = StringLeft(DllStructGetData($CmdStruct, 1), $SciTECmdLen)
    EndFunc ;==>MY_WM_COPYDATA

    [/autoit]
  • Danke nochmals für deine Xenobiologist/eure.. mühe... 8o
    Ich hoffe es hat nicht zuviel arbeit bereitet.

    Ich kuck mal was ich daraus machen kann.

    Alles Gute noch, bis denden... :thumbup:
    Mr.Script

    Bin dann mal wieder weck, diesmal aber einwenig länger...

    • Offizieller Beitrag

    [Ps. Noch an BugFix: C:\Programme\AutoIt3.3\SciTe\API\User.Call.tips.api oder so ungefähr lautet der name einer SciTe Datei in der die Benutzer
    zusätzliche Befehle und Konstanten eintippen können. Diese werden dann
    wenn man ein Script am Screiben ist als einfüg hilfe angeboten.]


    :D Was Calltipps sind, weiß ich. ;)
    Ich erstelle sie zu fast all meinen UDF meist gleich mit Skript zur automatischen Ergänzung der calltip.api.

    Ich verstehe nur nicht in welchem Zusammenhang Calltipps mit deinem Problem stehen.

  • Es sollte einfach einprogramm von mir geschrieben werden was diese Datei
    automatisch an ein aktuell im SciTe Editor geladenem Script anpasst.

    Dasheißt es soll das Aktuelle Script und All seine unter Scripts nach Func Definitionen durchsucht werden
    und diese in einer gewaltigen Liste in die bezeichnete Datei eingefügt/überschrieben werden..
    und das halt voll automatisch auf Knopf-druck, sagen wir F8, dann sollte SciTe Aktualisiert werden entweder
    indem es automatisch neu startet oder refresht wird. Das Calltips dann auf das aktuelle Project abgestimmt
    sind.

    Du must wissen das ich eine/mehrere Erweiterungs Include Datei Schreibe die ich in alle meine Projecte einfüge
    diese tue ich aber auf keinenfall ins include Verzeichnis. "Org.Incl." macht eigentlich also dasselbe nur im
    include Verzeichnis. Das hatte bei mir nur probleme mit dem einbinden.

    Ich hatte für eine Externe gespeicherte Datei das Project schon fertig, nur wollte ich auch das
    andere Dateien hinzugefügt werden. Ich hab führe halt VB5 Projecte geschrieben und C++ da ging,
    auch alles viel schneller mit "Calltips" die immer auf dem Aktuellen stand waren.

    "[Ps. Danke Nochmal an Xenobiologist, das Script konnte ich erstklassig einbinden, das Project
    hat danke deiner/eurer (Engl. Forum) Hilfe, große schritte vorwärts gemacht, ich hätte sicher noch Monate gesucht. Danke nochmal fürs schnelle und Preziese eingreifen.
    8o ]"

    Alsden Allen alles Gute...
    Mr.Script :thumbup: