ich habe einen Text-Editor geschrieben. Es ist nichts besonderes, aber zumindest kann er folgendes:
-Suchen
-Ersetzen
-RegEx-Suchen
-Case Sensitive-Unterstützung
-Rückgängig machen
-Datei-Kodierung ändern
-Anzeige von Zeile/Spalte/Zeichen
Special thanks to "just me", deine Funktionen waren mir dabei eine große Hilfe!
Bitte postet Lob/Kritik/BugReport/Verbesserungsvorschläge. Vielen Dank.
Eine Verbesserung fällt mir selber schon spontan ein (bin aber zu faul das umzusetzen
![Wink ;)](./images/smilies/icon_e_wink.gif)
So, hier ist das Script:
Code: Select all
; Was man verbessern könnte...
;
; Statt das ganze Script zu speichern (für Rückgängig) reicht es aus die geänderten Zeichen zu speichern (
; Beispiel: 10. Änderung: Ersetze zeichen 300-302 ("bei") durch "in der Nähe von"
; --> Inhalt.10 := "300|15|bei" (von Zeichen "300" an "15" Zeichen durch "bei" ersetzen)
; --> Inhalt.10 := CursorPos "|" StrLen(Ersetzen) "|" gefunden1 (CaseSensitive beachten!)
;
#Include Holles_Lib.ahk
OnExit, Exit
Bildbreite := A_ScreenWidth/(A_ScreenDPI/96)-14
Bildhoehe := A_ScreenHeight/(A_ScreenDPI/96)-74
CreateGui:
{
FontSize := Round(BildHoehe/65.83)
Gui,Main:Font,S%FontSize% cDefault,arial
x := Round(Bildbreite/152.2),y:= Round(Bildhoehe/52.67),w := Round(Bildbreite/30.44),h := Round(Bildhoehe/26.33)
Gui,Main:add,Text,x%x% y%y% w%w% h%h%,Datei:
x := Round(Bildbreite/25.37),y:= Round(Bildhoehe/79),breite := Bildbreite-Round(Bildbreite/21.74)
Gui,Main:add,Button,x%x% y%y% w%breite% hp gSelectFile vSelectFile,Bitte eine Textdatei auswählen...
x := Round(Bildbreite/152.2),y:= Round(Bildhoehe/13.17),w := Round(Bildbreite/15.22),h := Round(Bildhoehe/39.5)
Gui,Main:add,Text,x%x% y%y% w%w% h%h%,Suchen nach:
y:= Round(Bildhoehe/8.78)
Gui,Main:add,Text,xp y%y% wp hp,Ersetzen mit:
x := Round(Bildbreite/13.84),y:= Round(Bildhoehe/13.86),w := Round(Bildbreite/5.07)
Gui,Main:add,Edit,x%x% y%y% w%w% vSuchen gEditSuchen Disabled
y:= Round(Bildhoehe/9.08)
Gui,Main:add,Edit,xp y%y% wp vErsetzen gEditErsetzen Disabled
x := Round(Bildbreite/3.624),y:= Round(Bildhoehe/13.86),w := Round(Bildbreite/15.22),h := Round(Bildhoehe/14.11)
,xp := Round(Bildbreite/13.836)
Gui,Main:add,Button,x%x% y%y% w%w% h%h% vButtonSuchen Disabled,Suchen
Gui,Main:add,Button,xp+%xp% yp wp hp vButtonErsetzen Disabled,Ersetzen
Gui,Main:add,Button,xp+%xp% yp wp hp vButtonAllesErsetzen Disabled,Alles Ersetzen
Gui,Main:add,Button,xp+%xp% yp wp hp vUndo Disabled,Rückgängig
Gui,Main:add,Button,xp+%xp% yp wp hp vSave Disabled,Speichern
Gui,Main:add,Button,xp+%xp% yp wp hp vSaveTo Disabled,Speichern unter
Gui,Main:add,Button,xp+%xp% yp wp hp vCodePage gKodierung Disabled, Kodierung
x := Round(Bildbreite/13.84) , xp := 50+round((Bildbreite-600)/18.44)
Gui,Main:add,Checkbox,x%x% y+8 vCS gCheckboxen,A != a
Gui,Main:add,Checkbox,xp+%xp% yp vRegexSuche gCheckboxen TabStop,RegEx
Gui,Main:add,Checkbox,xp+%xp% yp vRueckwaerts gCheckboxen,Rückwärts
x := Round(Bildbreite/25.37),y:= Round(Bildhoehe/5.267)
, ZeilenAnzahl := floor((Bildhoehe-(Bildhoehe/4.247))/(FontSize*1.542)),hoehe := Round(ZeilenAnzahl*(FontSize*1.542)+6)
Gui,Main:add,Edit,x%x% y%y% w%breite% h%hoehe% vEdit gEdit hwndhEdit +0x100 WantTab -Tabstop Disabled
y := Round(Bildhoehe/5.032+hoehe),w := Round(Bildbreite/10.15),xp := Round(Bildbreite/10.147)
Gui,Main:add,Text,xp y%y% w%w% vEditZeile,Zeile:
Gui,Main:add,Text,xp+%xp% yp wp vEditSpalte,Spalte:
Gui,Main:add,Text,xp+%xp% yp wp vEditZeichen,Zeichen:
Gui,Main:Font,S%FontSize% cGray,arial
x:= Round(Bildbreite/152.2),y := Round(Bildhoehe/5.163),w := Round(Bildbreite/33.82),hoehe -= 6
Gui,Main:Add,Text,x%x% y%y% w%w% Right h%hoehe% vShowRow -VScroll
Gui,Main:show,w%Bildbreite% h%Bildhoehe%,Simple Text-Editor
}
CreateGuiKodierung:
{
Gui,Kodierung:+OwnerMain +AlwaysOnTop
Gui,Kodierung:Font,S12 cDefault,arial
Gui,Kodierung:add,GroupBox, x10 y10 w180 h115,Kodierung
Gui,Kodierung:add,Radio, x20 y40 vRadioUTF8 gKodierungRadio Group,UTF-8
Gui,Kodierung:add,Radio, x20 y65 vRadioUTF16 gKodierungRadio,UTF-16
Gui,Kodierung:add,Radio, x20 y90 vRadioCP gKodierungRadio,CP
Gui,Kodierung:add,Edit, x65 y87 w100 vCpNummer Disabled,
Gui,Kodierung:add,Button,x80 w40,OK
}
EditSubClassCallback := RegisterCallback("EditSubclassProc") ; für eine Event-Message wenn gescrollt wird
DllCall("Comctl32.dll\SetWindowSubclass", "Ptr", hEdit, "Ptr", EditSubClassCallback, "Ptr", eHedit, "Ptr", 0)
return
;################################## Autostart Ende ##################################
MainGuiClose:
ExitApp
WindowsMessage:
WindowsMessage()
return
WindowsMessage() {
global ZeilenAnzahl,hEdit,FileName
if !FileName ; Keine Text-Datei ausgewählt
return
sleep 1
ControlGet,CursorZeile,CurrentLine,,Edit3,A
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
GuiControlGet,EditZeile,Main:
EditZeile := RegExReplace(EditZeile,"\D*")
if (EditZeile != CursorZeile)
GuiControl,Main:,EditZeile,Zeile: %CursorZeile%
GuiControlGet,EditSpalte,Main:
EditSpalte := RegExReplace(EditSpalte,"\D*")
if (EditSpalte != CursorSpalte)
GuiControl,Main:,EditSpalte,Spalte: %CursorSpalte%
GuiControlGet,EditZeichen,Main:
EditZeichen := RegExReplace(EditZeichen,"\D*")
CursorPos := 0
Loop,%CursorZeile% {
ControlGet,Zeile,Line,%A_Index%,Edit3,A
CursorPos += (A_Index!=CursorZeile)?StrLen(Zeile)+!RegExMatch(zeile,"\s$"):CursorSpalte
}
if (EditZeichen != CursorPos)
GuiControl,Main:,EditZeichen,Zeichen: %CursorPos%
gosub RefreshShowRow
return
}
RefreshShowRow:
{
ShowRowBegin := RegExReplace(ShowRow,"`n.*")
if (ShowRowbegin = EM_GETFIRSTVISIBLELINE(hEdit))
return
ShowRow := ""
loop,%ZeilenAnzahl%
ShowRow .= "`n" a_index + EM_GETFIRSTVISIBLELINE(hEdit) -1
StringTrimLeft,ShowRow,ShowRow,1
GuiControl,Main:,ShowRow,%ShowRow%
return
}
Edit:
{
GuiControlGet, Edit, Main:
if !(StrReplace(Edit,"`r`n,`n") == Inhalt[Inhalt.Index]) {
Inhalt.Index += 1,Inhalt[Inhalt.Index] := StrReplace(Edit,"`r`n,`n")
GuiControl, Main:-Disabled, Undo
GuiControl, Main:-Disabled, Save
}
ControlGet,CursorZeile,CurrentLine,,Edit3,A
if (EditZeile != CursorZeile) {
GuiControl,Main:,EditZeile,Zeile: %CursorZeile%
gosub RefreshShowRow
}
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
if (EditSpalte != CursorSpalte)
GuiControl,Main:,EditSpalte,Spalte: %CursorSpalte%
CursorPos := 0
Loop,%CursorZeile% {
ControlGet,Zeile,Line,%A_Index%,Edit3,A
CursorPos += (A_Index!=CursorZeile)?StrLen(Zeile)+!RegExMatch(zeile,"\s$"):CursorSpalte
}
if (EditZeichen != CursorPos)
GuiControl,Main:,EditZeichen,Zeichen: %CursorPos%
if (Inhalt.index = 0) {
GuiControl,Main:Disable,Undo
if (Kodierung_Original == Kodierung)
GuiControl,Main:Disable,Save
}
return
}
Checkboxen:
EditSuchen:
EditErsetzen:
{
GuiControlGet,Suchen,Main:
If Suchen||(Suchen="0") {
GuiControl,Main:-Disabled,ButtonSuchen
GuiControl,Main:-Disabled,ButtonErsetzen
GuiControl,Main:-Disabled,ButtonAllesErsetzen
}
else {
GuiControl,Main:Disable,ButtonSuchen
GuiControl,Main:Disable,ButtonErsetzen
GuiControl,Main:Disable,ButtonAllesErsetzen
}
StartPos := CursorPos?(FundPos:=CursorPos):(FundPos:=FundPosVorher)+1
gosub MainButtonSuchen ; Live-Suche
return
}
MainButtonSuchen:
MainButtonErsetzen:
MainButtonAllesErsetzen:
{
FundPosVorher := FundPos,gefunden := ""
ControlGet,CursorZeile,CurrentLine,,Edit3,A
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
if !StartPos
Loop,%CursorZeile% {
ControlGet,Zeile,Line,%A_Index%,Edit3,A
StartPos := (A_Index!=CursorZeile)?StrLen(Zeile)+!RegExMatch(zeile,"\s$"):CursorSpalte
}
GuiControlGet,Suchen,Main:
if !Suchen&&(Suchen!="0") {
markiert := ""
EM_SETSEL(hEdit,CursorPos,CursorPos)
ControlGet,CursorZeile,CurrentLine,,Edit3,A
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
EM_LINESCROLL(hEdit,CursorZeile-EM_GETFIRSTVISIBLELINE(hEdit)-ZeilenAnzahl/2)
return
}
GuiControlGet,Edit,Main:
StringReplace,Edit,Edit,`n,`r`n,All
GuiControlGet,Ersetzen,Main:
GuiControlGet,CS,Main:
GuiControlGet,RegexSuche,Main:
GuiControlGet,Rueckwaerts,Main:
Rueckwaerts := (A_ThisHotkey="+F3")?!Rueckwaerts:Rueckwaerts
if RegexSuche {
if Rueckwaerts {
FundPos := StartPos-1-StrLen(RegExReplace(SubStr(Edit,1,StartPos-2),CS?"s).*(" suchen ")":"is).*(" suchen ")","$1"))
RegExMatch(Edit,CS?"s)(" suchen ")":"is)(" suchen ")",gefunden,FundPos)
FundPos := FundPos=1?RegExMatch(Edit,CS?"^(" suchen ")":"i)^(" suchen ")"):FundPos
If !FundPos||(StartPos<=2)
StartPos := StrLen(Edit)+1
, FundPos := StartPos-1-StrLen(RegExReplace(SubStr(Edit,1,StartPos-2),CS?"s).*(" suchen ")":"is).*(" suchen ")","$1"))
, FundPos := FundPos=1?RegExMatch(Edit,CS?"^(" suchen ")":"i)^(" suchen ")"):FundPos
, RegExMatch(Edit,CS?"s)(" suchen ")":"is)(" suchen ")",gefunden,FundPos)
}
else {
FundPos := RegExMatch(Edit,CS?"s)(" suchen ")":"is)(" suchen ")",gefunden,StartPos)
If !FundPos
StartPos := 1 , FundPos := RegExMatch(Edit,CS?"s)(" suchen ")":"is)(" suchen ")",gefunden,StartPos)
}
}
else {
FundPos := InStr(Edit,Suchen,CS,Rueckwaerts?StartPos-2-StrLen(Edit):StartPos)
If !FundPos
StartPos := Rueckwaerts?StrLen(Edit):1
, FundPos := InStr(Edit,Suchen,CS,Rueckwaerts?StartPos-2-StrLen(Edit):StartPos)
}
if (A_GuiControl="Suchen")||(A_GuiControl="ButtonSuchen")||(A_GuiControl="CS")||(A_GuiControl="RegexSuche")||(A_ThisHotkey="F3")||(A_ThisHotkey="+F3") {
EM_SETSEL(hEdit,FundPos,FundPos+(RegexSuche?StrLen(gefunden1):StrLen(Suchen)))
ControlGet,CursorZeile,CurrentLine,,Edit3,A
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
EM_LINESCROLL(hEdit,CursorZeile-EM_GETFIRSTVISIBLELINE(hEdit)-ZeilenAnzahl/2)
StartPos := FundPos+1,markiert := FundPos ; um beim ersetzen zuerst den markierten Eintrag zu ersetzen
}
else if FundPos&&((A_GuiControl="ButtonErsetzen")||(A_GuiControl="ButtonAllesErsetzen")) {
Inhalt.Index += 1,Inhalt[Inhalt.Index] := Inhalt[Inhalt.Index-1]
if markiert
FundPos := markiert,markiert := ""
if (A_GuiControl="ButtonErsetzen")
Inhalt[Inhalt.Index] := StrLeft(Edit,FundPos-1) Ersetzen StrTrimLeft(Edit,FundPos+StrLen(Suchen)-1)
else if (A_GuiControl="ButtonAllesErsetzen") {
if !RegexSuche
Inhalt[Inhalt.Index] := StrReplace(Edit,RegExReplace(Suchen,",","\,") "," RegExReplace(Ersetzen,",","\,"),CS?1:0)
, FundPos := StrLen(Inhalt[Inhalt.Index])-(StrLen(Edit)-InStr(Edit,Suchen,CS,0))+StrLen(suchen)-StrLen(Ersetzen)
else
Inhalt[Inhalt.Index] := RegExReplace(Edit,CS?Suchen:"i)" suchen,Ersetzen) ; Ersetzen
, RegExMatch(Edit,CS?"s).*(" suchen ")":"is).*(" suchen ")",gefunden) ; letzten Treffer im "Klartext"
, FundPos := gefunden1?StrLen(Inhalt[Inhalt.Index])-(StrLen(Edit)-InStr(Edit,gefunden1,CS,0))+StrLen(gefunden1)-StrLen(Ersetzen):0 ; ...um den den letzten Treffer zu markieren
}
if (Inhalt[Inhalt.Index] == Inhalt[Inhalt.Index-1]) {
Inhalt[Inhalt.Index] := "",Inhalt.Index -= 1
return
}
StartPos := FundPos+StrLen(Ersetzen)
GuiControl,Main:-Disabled,Undo
GuiControl,Main:,Edit,% Inhalt[Inhalt.Index]
GuiControl,Main:-Disabled,Save
EM_SETSEL(hEdit,FundPos,FundPos+StrLen(Ersetzen))
ControlGet,CursorZeile,CurrentLine,,Edit3,A
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
EM_LINESCROLL(hEdit,CursorZeile-EM_GETFIRSTVISIBLELINE(hEdit)-ZeilenAnzahl/2)
}
Gosub RefreshShowRow
return
}
MainButtonRückgängig:
{
Inhalt[Inahlt.index] := "",Inhalt.index -= 1
GuiControl,Main:,Edit,% Inhalt[Inhalt.Index]
if (Inhalt.index = 0) {
GuiControl,Main:Disable,Undo
if (Kodierung_Original==Kodierung)
GuiControl,Main:Disable,Save
}
StartPos := 0
GuiControlGet,Edit,Main:
Inhalt.0 := gespeichert?StrReplace(Inhalt[gespeichert],"`r`n,`n"):Inhalt.0
if Inhalt.0&&!(Inhalt.0==Edit)
GuiControl, Main:-Disabled,Save
return
}
MainButtonSpeichern:
MainButtonSpeichernUnter:
{
Ueberschreiben := False
if ((A_GuiControl="SelectFile")||!A_GuiControl)&&MsgBox("Sollen die Datei " FileName " überschrieben werden?","Überschreiben?",262180) = "YES" ; Neue Datei gewählt, oder Exit
Ueberschreiben := True
if (A_GuiControl="Save")||(Ueberschreiben=True) { ; Überschreiben
FileDelete,%FileName%
FileAppend,% Inhalt[Inhalt.Index],%FileName%,%Kodierung%
}
else { ; Speichern unter
FileSelectFile,NewFileName,S24,,Speichern unter...
If !NewFileName
return
SplitPath,NewFileName,FileName
FileAppend,% Inhalt[Inhalt.Index],%FileName%,%Kodierung%
GuiControl,Main:,SelectFile,%FileName%
}
gespeichert := Inhalt.Index
GuiControl,Main:Disable,Save
FadeText("Erfolgreich gespeichert!")
return
}
SelectFile:
{
Gui +OwnDialogs
GuiControlGet,Edit,Main:
Inhalt.0 := gespeichert?StrReplace(Inhalt[gespeichert],"`r`n,`n"):Inhalt.0
if Inhalt.0&&!(Inhalt.0==Edit)
if MsgBox("Sollen die Änderung in " FileName " gespeichert werden?","Änderungen speichern?",262180)="YES"
Gosub MainButtonSpeichern
Inhalt := Object()
GuiControl,Main:Disable,Suchen
GuiControl,Main:,Suchen,
GuiControl,Main:Disable,Ersetzen
GuiControl,Main:,Ersetzen,
GuiControl,Main:Disable,ButtonSuchen
GuiControl,Main:Disable,ButtonErsetzen
GuiControl,Main:Disable,ButtonAllesErsetzen
GuiControl,Main:Disable,Undo
GuiControl,Main:Disable,Save
GuiControl,Main:Disable,SaveTo
GuiControl,Main:Disable,CodePage
GuiControl,Main:,CodePage,Kodierung
GuiControl,Kodierung:,CpNummer
GuiControl,Main:,Edit,
GuiControl,Main:,ShowRow,
GuiControl,Main:Disable,Edit
IniRead, LastFile,SimpleEditor.ini,Options,LastFile,%A_Space%
FileSelectFile,FileName,3,%LastFile%,Textdatei auswählen
If !(Kodierung := IsTextFile(FileName)) {
GuiControl,Main:,SelectFile,Bitte eine Textdatei auswählen...
if FileName
MsgBox("Die gewählte Datei ist keine Textdatei!","Fehler",262160)
FileName = ""
return
}
IniWrite,%FileName%,SimpleEditor.ini,Options,LastFile
Kodierung_Original := Kodierung := (Kodierung="CP65001")?"UTF-8":(Kodierung="CP1200")?"UTF-16":Kodierung
GuiControl,Main:,CodePage,% Kodierung
GuiControl,Main:-Disabled, CodePage
SplitPath,FileName,FileName
GuiControl,Main:,SelectFile,%FileName%
FileRead,temp,%FileName%
CursorPos:=1,ShowRow:="",Inhalt.0:=StrReplace(temp,"`r`n,`n"),temp:="",Inhalt.Index:=0 ; Inhalt.0 ist der Originalzustand
GuiControl,Main:,Edit,% Inhalt.0
GuiControl,Main:-Disabled,Suchen
GuiControl,Main:,Suchen,
GuiControl,Main:-Disabled,Ersetzen
GuiControl,Main:,Ersetzen,
GuiControl,Main:-Disabled,SaveTo
GuiControl,Main:-Disabled,Edit
GuiControl,Main:+Default,ButtonSuchen
Loop,%ZeilenAnzahl%
ShowRow .= "`n" a_index
StringTrimLeft,ShowRow,ShowRow,1
GuiControl,Main:,ShowRow,%ShowRow%
return
}
Kodierung:
{
RadioAuswahl := "Radio" StrReplace(Kodierung,"-,")
if (SubStr(Kodierung,1,2)="CP") {
RadioAuswahl := "RadioCP"
GuiControl,Kodierung:-Disabled,CpNummer
GuiControl,Kodierung:,CpNummer,% StrTrimLeft(Kodierung,2)
}
else
GuiControl,Kodierung:Disable,CpNummer
GuiControl,Kodierung:,%RadioAuswahl%,1
Gui,Main:+Disabled
Gui,Kodierung:show,w200,Kodierung
return
}
KodierungRadio:
{
GuiControlGet,RadioCP,Kodierung:
if RadioCP
GuiControl,Kodierung:-Disabled,CpNummer
else
GuiControl,Kodierung:Disable,CpNummer
return
}
KodierungGuiClose:
{
Gui,Main:-Disabled
Gui,Kodierung:Hide
return
}
KodierungButtonOK:
{
Gui,Main:-Disabled
GuiControlGet,RadioCP,Kodierung:
if RadioCP {
GuiControlGet,RadioCP,Kodierung:
GuiControlGet,CpNummer,Kodierung:
if !IsIn(CpNummer, "037,437,500,708,709,710,720,737,775,850,852,855,857,858,860,861,862,863,864,865,866,869,870,874,875,932,936,949,950,1026,1047,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1200,1201,1250,1251,1252,1253,1254,1255,1256,1257,1258,1361,10000,10001,10002,10003,10004,10005,10006,10007,10008,10010,10017,10021,10029,10079,10081,10082,12000,12001,20000,20001,20002,20003,20004,20005,20105,20106,20107,20108,20127,20261,20269,20273,20277,20280,20284,20285,20290,20297,20420,20423,20424,20833,20838,20866,20871,20880,20905,20924,20932,20936,20949,21025,21027,28591,28591,28593,28594,28595,28596,28597,28598,28599,28603,28605,29001,38598,50220,50221,50222,50225,50227,50930,50931,50933,50935,50936,50937,50939,51932,51936,51949,51950,52936,54936,57002,57003,57004,57005,57006,57007,57008,57009,57010,57011,65000,65001")
Exit MsgBox("Unbekannte Code-Page!`nDie Kodierung " Kodierung " bleibt bestehen.","Fehler",262160)
Kodierung := "CP" CpNummer
}
else {
GuiControlGet,RadioUTF8,Kodierung:
Kodierung := RadioUTF8?"UTF-8":"UTF-16"
}
GuiControl,Main:,CodePage,% Kodierung
if (Kodierung != Kodierung_Original)
GuiControl,Main:-Disabled,Save
else {
GuiControlGet, Edit,Main:
if (StrReplace(Edit,"`r`n,`n")==Inhalt[Inhalt.Index])
GuiControl,Main:Disable,Save
}
Gui,Kodierung:Hide
return
}
Exit:
{
if FinalExit
ExitApp
Gui +OwnDialogs
GuiControlGet,Edit,Main:
Inhalt.0 := gespeichert?StrReplace(Inhalt[gespeichert],"`r`n,`n"):Inhalt.0
if Inhalt.0&&!(Inhalt.0==Edit)
if MsgBox("Sollen die Änderung in " FileName " gespeichert werden?","Änderungen speichern?",262180)="YES" {
Gosub MainButtonSpeichern
FinalExit := true
SetTimer,Exit,-2000
return
}
Inhalt := ""
ExitApp
}
F3::
+F3::
{
gosub MainButtonSuchen
return
}
~PGUP::
~PGDN::
{
ControlGetFocus, focus, A
if (focus = "Edit3") {
ControlGet,CursorZeile,CurrentLine,,Edit3,A
EM_LINESCROLL(hEdit,CursorZeile-EM_GETFIRSTVISIBLELINE(hEdit))
WindowsMessage()
}
return
}
Up::
Down::
Left::
Right::
{
ControlGetFocus,focus,A
if (focus = "Edit3") {
ControlGet,CursorZeile,CurrentLine,,Edit3,A
EM_LINESCROLL(hEdit,CursorZeile-EM_GETFIRSTVISIBLELINE(hEdit))
send {%A_ThisHotkey%}
WindowsMessage()
}
else if ((focus="Edit1")||(focus="Edit2"))&&((A_ThisHotkey="Left")||(A_ThisHotkey="Right"))
send {%A_ThisHotkey%}
return
}
~LButton::
{
if !FileName ; Keine Text-Datei ausgewählt
return
ControlGetFocus,focus,A ; vorheriges Focus
MouseGetPos,,,id,control ; angeklicktes control
if (Control="Edit3") {
sleep 1
if (focus!="Edit3")&&markiert
SendMessage,0xB1,FundPos-1,FundPos+StrLen(Suchen)-1,,ahk_id %hEdit% ; 0xB1 ist EM_SETSEL
ControlGet,CursorZeile,CurrentLine,,Edit3,A
ControlGet,CursorSpalte,CurrentCol,,Edit3,A
GuiControl,Main:,EditZeile,Zeile: %CursorZeile%
GuiControl,Main:,EditSpalte,Spalte: %CursorSpalte%
gosub RefreshShowRow
CursorPos := 0
Loop,%CursorZeile% {
ControlGet,Zeile,Line,%A_Index%,Edit3,A
CursorPos += (A_Index!=CursorZeile)?StrLen(Zeile)+!RegExMatch(zeile,"\s$"):CursorSpalte
}
StartPos := CursorPos := CursorPos?CursorPos:1
GuiControl,Main:,EditZeichen,Zeichen: %CursorPos%
}
else {
GuiControl,Main:,EditZeile,Zeile:
GuiControl,Main:,EditSpalte,Spalte:
GuiControl,Main:,EditZeichen,Zeichen:
}
return
}
; functions from "just me" ...
EM_GETFIRSTVISIBLELINE(HWND) {
; EM_GETFIRSTVISIBLELINE = 0x00CE -> msdn.microsoft.com/en-us/library/bb761574(v=vs.85).aspx
Return (DllCall("User32.dll\SendMessage", "Ptr", HWND, "UInt", 0x00CE, "Ptr", 0, "Ptr", 0, "Ptr") + 1)
}
EM_LINESCROLL(HWND, Lines, Chars := 0) {
; EM_LINESCROLL = 0x00B6 -> msdn.microsoft.com/en-us/library/bb761615(v=vs.85).aspx
Return DllCall("User32.dll\SendMessage", "Ptr", HWND, "UInt", 0x00B6, "Ptr", Chars, "Ptr", Lines, "Ptr")
}
EM_SETSEL(HWND, Start, End) {
; EM_SETSEL = 0x00B1 -> msdn.microsoft.com/en-us/library/bb761661(v=vs.85).aspx
Return DllCall("User32.dll\SendMessage", "Ptr", HWND, "UInt", 0x00B1, "Ptr", Start - 1, "Ptr", End - 1, "Ptr")
}
EditSubclassProc(hWnd, uMsg, wParam, lParam, uIDSubclass, dwRefData) {
Static SB := {4: "THUMBPOSITON", 5: "THUMBTRACK"}
If (uMsg = 522) || ((uMsg = 277) & SB.HasKey(wParam & 0xFFFF))
SetTimer, WindowsMessage, -1
Return DllCall("Comctl32.dll\DefSubclassProc", "Ptr", hWnd, "UInt", uMsg, "Ptr", wParam, "Ptr", lParam)
}
Letzte Änderung: Die zuletzt geöffnete Datei wird bei der Dateiauswahl "voreingestellt"