huhu,
ich hab mir mal gedacht, weil ich gerne auch Syntax Highlighting + Calltips für meine eigenen Funktinen/UDFs haben möchte, dass ich dazu ein Programm schreibe.
Man kann damit eigene Calltips und Syntax-Highlights erstellen.
Der Vorteil ist, dass man z.B. seine eigenen UDFs von den Standard-UDFs unterscheiden kann
(Ich kann z.B. eine Funktion so darstellen, als wäre es eine ganz normale AutoIt-Funktion.)
Viel Spaß damit !
Feedback ist natürlich erwünscht !
mfg Alcros
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GUIListView.au3>
Opt("GUIOnEventMode", 1)
Global $idG, $idGListView, $idGSpeichernB, $idGLogL, $idGNameI, $idGParameterI, $idGBeschreibungI, $idGTypC, $idGLoeschenB, $idGAendernB, $idGNeuB, $idGAboutL
Global $aTexte[6] = [0,"au3.CalltipsUndSyntax.functions=", "au3.CalltipsUndSyntax.keywords=", "au3.CalltipsUndSyntax.macros=", "au3.CalltipsUndSyntax.preprocessor=", "au3.CalltipsUndSyntax.udfs="]
Global $bSaved = True
if (@OSVersion = "WIN_XP") Then
Global $sPath = @MyDocumentsDir
Else
Global $sPath = @UserProfileDir
EndIf
_StartCheck()
_GUI()
_GetList()
GUISetState(@SW_SHOW)
_SetLog("Programm erfolgreich geladen.", "green")
While 1
Sleep(100)
WEnd
#region Funktionen
Func _GetList()
Local $sFile = FileRead($sPath&"\au3.CalltipsUndSyntax.api")
Local $aSplit = StringSplit($sFile, @CRLF,1)
if @error And $sFile="" Then Return
Local $iZaehler
For $iZaehler = 1 To UBound($aSplit)-1
Local $aTemp = StringRegExp($aSplit[$iZaehler], "(.+?) \((.*?)\) (.+?):(.+)",3)
GUICtrlCreateListViewItem($aTemp[0]&"|"&$aTemp[1]&"|"&$aTemp[2]&"|"&$aTemp[3], $idGListView)
Next
EndFunc
Func _StartCheck()
Local $sFile = FileRead($sPath & "\SciTEUser.properties")
if @error Then
$sPath = FileOpenDialog("Bitte Verzeichnis zur SCiTEUser.properties angeben.",$sPath, "SCiTE Profil (*.properties)")
if @error Then Exit MsgBox(16,"","Die Datei SciTEUser konnte nicht geöffnet werden."&@CRLF&"Skript wird beendet.",10000)
$sPath = StringTrimRight($sPath,StringLen($sPath) - StringInStr($sPath, "\", 0, -1) + 1)
EndIf
Local $sPattern = "import au3.CalltipsUndSyntax"
if Not StringRegExp($sFile, $sPattern) Then
Local $iMsgBoxAnswer = MsgBox(292, "Skript installieren ?", "Einträge in SciteUser eintragen ?")
If ($iMsgBoxAnswer = 7) Then
MsgBox(0,"Ende","Skript wird beendet.",5000)
Exit
EndIf
Local $sText
if (StringRight($sFile,2)<>@CRLF) Then $sText &= @CRLF
$sText &= "import au3.CalltipsUndSyntax"&@CRLF&"import au3.CalltipsUndSyntax.api"&@CRLF&"keywords8.$(au3)=$(au3.keywords.udfs) $(au3.keywords.user.udfs) $(au3.CalltipsUndSyntax.udfs)"&@CRLF&"api.$(au3)=$(SciteDefaultHome)\api\au3.api;$(SciteDefaultHome)\api\au3.autoit3wrapper.api;$(SciteUserHome)\au3.user.calltips.api;$(SciteUserHome)\au3.CalltipsUndSyntax.api"&@CRLF&"keywords.$(au3)=$(au3.keywords.keywords) $(au3.CalltipsUndSyntax.keywords)"&@CRLF&"keywords2.$(au3)=$(au3.keywords.functions) $(au3.CalltipsUndSyntax.functions)"&@CRLF&"keywords3.$(au3)=$(au3.keywords.macros) $(au3.CalltipsUndSyntax.macros)"&@CRLF&"keywords5.$(au3)=$(au3.keywords.preprocessor) $(au3.CalltipsUndSyntax.preprocessor)"
FileWrite($sPath&"\SciTEUser.properties",$sText)
EndIf
EndFunc
Func _OEidGSpeichernB()
Local $aTexteFile = $aTexte
Local $iZaehler
For $iZaehler = 0 To _GUICtrlListView_GetItemCount($idGListView) - 1
Local $aItemText = _GUICtrlListView_GetItemTextArray($idGListView, $iZaehler)
if ($aItemText[3] = "Funktion") Then $aTexteFile[1] &= StringLower($aItemText[1] & " ")
if ($aItemText[3] = "Schlüsselwort") Then $aTexteFile[2] &= StringLower($aItemText[1] & " ")
if ($aItemText[3] = "Makro") Then $aTexteFile[3] &= StringLower($aItemText[1] & " ")
if ($aItemText[3] = "Präprozessor") Then $aTexteFile[4] &= StringLower($aItemText[1] & " ")
if ($aItemText[3] = "UDFs") Then $aTexteFile[5] &= StringLower($aItemText[1] & " ")
Next
Local $sWriteToFile
For $iZaehler=1 To UBound($aTexteFile)-1
$sWriteToFile &= $aTexteFile[$iZaehler] & @CRLF
Next
$sWriteToFile = StringTrimRight($sWriteToFile,2)
Local $hFile = FileOpen($sPath & "\au3.CalltipsUndSyntax.properties",2)
FileWrite($hFile, $sWriteToFile)
FileClose($hFile)
Local $sWriteToFile = ""
For $iZaehler=0 To _GUICtrlListView_GetItemCount($idGListView) - 1
Local $aItemText = _GUICtrlListView_GetItemTextArray($idGListView, $iZaehler)
$sWriteToFile &= $aItemText[1] & " (" & $aItemText[2] &") " & $aItemText[3] & ":" & $aItemText[4] & @CRLF
Next
$sWriteToFile = StringTrimRight($sWriteToFile,2)
Local $hFile = FileOpen($sPath & "\au3.CalltipsUndSyntax.api",2)
FileWrite($hFile, $sWriteToFile)
FileClose($hFile)
_SetLog("Funktionen wurden gespeichert.","green")
$bSaved = True
EndFunc ;==>_OEidGSpeichernB
Func _OEidGNeuB()
Local $sName = GUICtrlRead($idGNameI)
Local $sParam = GUICtrlRead($idGParameterI)
Local $sTyp = GUICtrlRead($idGTypC)
Local $sBeschreibung = GUICtrlRead($idGBeschreibungI)
If ($sName = "" Or $sTyp = "" Or $sBeschreibung = "") Then
_SetLog("Sie müssen alle Felder ausfüllen", "red")
GUICtrlSetState($idGNameI, $GUI_FOCUS)
Return 0
EndIf
Local $iZaehler
For $iZaehler = 0 To _GUICtrlListView_GetItemCount($idGListView) - 1
Local $aName = _GUICtrlListView_GetItemTextArray($idGListView, $iZaehler)
If ($sName = $aName[1]) Then ExitLoop
Next
If ($iZaehler <= _GUICtrlListView_GetItemCount($idGListView) - 1) Then
_SetLog("Eine Funktion mit diesem Namen existiert bereits.", "red")
GUICtrlSetState($idGNameI, $GUI_FOCUS)
Return 0
EndIf
GUICtrlCreateListViewItem($sName & "|" & $sParam & "|" & $sTyp & "|" & $sBeschreibung, $idGListView)
_SetLog("Funktion " & $sName & " wurde erfolgreich hinzugefügt. Drücken Sie Speichern.", "green")
$bSaved = False
EndFunc ;==>_OEidGNeuB
Func _OEidGAendernB()
Local $sName = GUICtrlRead($idGNameI)
Local $sParam = GUICtrlRead($idGParameterI)
Local $sTyp = GUICtrlRead($idGTypC)
Local $sBeschreibung = GUICtrlRead($idGBeschreibungI)
If ($sName = "" Or $sTyp = "" Or $sBeschreibung = "") Then
_SetLog("Sie müssen alle Felder ausfüllen", "red")
GUICtrlSetState($idGNameI, $GUI_FOCUS)
Return 0
EndIf
Local $iZaehler
For $iZaehler = 0 To _GUICtrlListView_GetItemCount($idGListView) - 1
Local $aName = _GUICtrlListView_GetItemTextArray($idGListView, $iZaehler)
If ($sName = $aName[1]) Then ExitLoop
Next
If ($iZaehler <= _GUICtrlListView_GetItemCount($idGListView) - 1) Then
_SetLog("Eine Funktion mit diesem Namen existiert bereits.", "red")
GUICtrlSetState($idGNameI, $GUI_FOCUS)
Return 0
EndIf
Local $iSelected = _GUICtrlListView_GetSelectedIndices($idGListView)
If ($iSelected = "") Then Return _SetLog("Sie müssen erst eine Funktion auswählen.", "red")
_GUICtrlListView_SetItemText($idGListView, $iSelected, $sName, 0)
_GUICtrlListView_SetItemText($idGListView, $iSelected, $sParam, 1)
_GUICtrlListView_SetItemText($idGListView, $iSelected, $sTyp, 2)
_GUICtrlListView_SetItemText($idGListView, $iSelected, $sBeschreibung, 3)
_SetLog("Funktion " & $sName & " wurde erfolgreich geändert.Drücken sie Speichern.", "green")
$bSaved = False
EndFunc ;==>_OEidGAendernB
Func _OEidGLoeschenB()
Local $iSelected = _GUICtrlListView_GetSelectedIndices($idGListView)
If ($iSelected = "") Then Return _SetLog("Sie müssen erst eine Funktion auswählen.", "red")
Local $aName = _GUICtrlListView_GetItemTextArray($idGListView, $iSelected - 1)
_GUICtrlListView_DeleteItem($idGListView, $iSelected)
_SetLog("Funktion " & $aName[1] & " wurde erfolgreich gelöscht.Drücken sie Speichern.", "green")
$bSaved = False
EndFunc ;==>_OEidGLoeschenB
Func _exit()
If Not $bSaved Then
Local $iMsgBoxAnswer = MsgBox(292, "Wirklich beenden ?", "Es wurden noch nicht alle Änderungen gespeichert." & @CRLF & "Wollen sie wirklich beenden")
If ($iMsgBoxAnswer = 7) Then Return 0
EndIf
Exit
EndFunc ;==>_exit
Func _SetLog($sText, $sColour = "white")
If ($sColour = "white") Then $sColour = 0xFFFFFF
If ($sColour = "red") Then $sColour = 0xFF0000
If ($sColour = "green") Then $sColour = 0x00FF00
GUICtrlSetData($idGLogL, $sText)
GUICtrlSetBkColor($idGLogL, $sColour)
Return 0
EndFunc ;==>_SetLog
Func _GUI() ; Erstellung der GUI
#region ### START Koda GUI section ### Form=d:\programmieren\programm\koda_1.7.0.1\forms\calltips ush.kxf
$idG = GUICreate("Calltips und Syntax-Highlighting", 1125, 482, 189, 109)
$idGListView = GUICtrlCreateListView("Name|Parameter|Typ|Beschreibung", 8, 64, 1113, 385)
GUICtrlSendMsg(-1, 0x101E, 0, 150)
GUICtrlSendMsg(-1, 0x101E, 1, 200)
GUICtrlSendMsg(-1, 0x101E, 2, 100)
GUICtrlSendMsg(-1, 0x101E, 3, 650)
$idGLogL = GUICtrlCreateLabel("idGLogL", 8, 456, 940, 17)
$idGNameI = GUICtrlCreateInput("Name", 8, 40, 217, 21)
$idGParameterI = GUICtrlCreateInput("z.B. Nummer, Zahl", 232, 40, 201, 21)
$idGTypC = GUICtrlCreateCombo("", 440, 40, 89, 25, 3) ; $CBS_DROPDOWNLIST
GUICtrlSetData(-1, "Funktion|Schlüsselwort|Makro|Präprozessor|UDFs")
GUICtrlSetData(-1, "UDFs")
$idGBeschreibungI = GUICtrlCreateInput("Beschreibung", 536, 40, 585, 21)
$idGNeuB = GUICtrlCreateButton("Neu", 648, 4, 113, 25, 0)
$idGAendernB = GUICtrlCreateButton("Ändern", 768, 4, 113, 25, 0)
$idGLoeschenB = GUICtrlCreateButton("Löschen", 888, 4, 113, 25, 0)
$idGSpeichernB = GUICtrlCreateButton("Speichern", 1008, 4, 113, 25, 0)
$idGAboutL = GUICtrlCreateLabel("© Made by Alcros (http://www.autoit.de)", 952, 456, 166, 17)
#endregion ### END Koda GUI section ###
GUISetOnEvent(-3, "_exit") ; $GUI_EVENT_CLOSE
GUICtrlSetOnEvent($idGNeuB, "_OEidGNeuB")
GUICtrlSetOnEvent($idGAendernB, "_OEidGAendernB")
GUICtrlSetOnEvent($idGLoeschenB, "_OEidGLoeschenB")
GUICtrlSetOnEvent($idGSpeichernB, "_OEidGSpeichernB")
EndFunc ;==>_GUI
#endregion Funktionen