Hallo!
Ich bin ein ziemlicher Einsteiger in Purebasic und habe mal nen kleinen Texteditor programmiert. Es sollte ein Notepad Klon werden....
Ich bitte um Kritik, Lob oder Anregungen für neue Ideen zum Einbauen.
Danke!
Ach ja, hier ist der Code:
Code:
Code: Alles auswählen
Global sp,olds$,pr,loc,fsize,lo,le,datei,a,pro.f,opro.f,rf$,rfa,otext$,ex
Procedure error()
MessageRequester("N-Edit","Es ist ein Fehler aufgetreten. Das Programm wird beendet.")
End
EndProcedure
OnErrorGosub(@error())
var=0
If ReadFile(datei,"font")
fontname$=ReadString()
size=Val(ReadString())
fsize=size
sytle=Val(ReadString())
If LoadFont(font,fontname$,size,style)
var=1
EndIf
CloseFile(datei)
Else
CreateFile(datei,"file")
CloseFile(datei)
LoadFont(font,"Arial",10)
var=1
EndIf
Dim rf$(3)
Dim orf$(3)
If ReadFile(datei,"file")
a=0
Repeat
a=a+1
rf$(a)=ReadString()
Until Eof(datei)<>0 Or a=3
rfa=a
Else
CreateFile(datei,"file")
CloseFile(datei)
rfa=0
EndIf
Dim aus$(10000000)
;- Enumeration
Enumeration
#p1:#p2:#p3:#statuswindow:#forts:#druck:#druckt:#suchet:#toolbar:#newt:#opent:#savet
#help
#format
#info
#neu
#suchen
#wsuchen
#einf
#kop
#zaehl
#editor
#save
#window
#saveas
#open
#end
#Windowsuche
#String_0
#Text_0
#suchbutton
#abbrechen
EndEnumeration
;- PROCEDURES
Procedure addprinterline(line$)
Locate(200,200+loc)
DrawText(line$)
loc=loc+(fsize*10)
pline$=""
EndProcedure
Procedure drucken(save$)
loc=0
pritext$=GetGadgetText(#editor)
If save$=""
savep$="Unbennantes Dokument"
Else
savep$=save$
EndIf
pr=0
prints=0
If PrintRequester()
pr=1
If StartPrinting(GetFilePart(savep$)+" - N-Edit")
If StartDrawing(PrinterOutput())
prints=1
DrawingFont(UseFont(font))
For a=1 To Len(pritext$)
If Mid(pritext$,a,2)=(Chr(13)+Chr(10))
addprinterline(pline$)
pline$=""
a=a+1
Else
pline$=pline$+Mid(pritext$,a,1)
EndIf
Next
StopDrawing()
EndIf
StopPrinting()
EndIf
EndIf
If prints=1
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.s open_searchwindow(oldsuche$)
ret=0
OpenWindow(#Windowsuche, 308, 123, 281, 100, #PB_Window_SystemMenu | #PB_Window_TitleBar , "N-Edit - Suchen")
CreateGadgetList(WindowID())
StringGadget(#String_0, 10, 40, 260, 20, oldsuche$)
TextGadget(#Text_0, 10, 5, 260, 30, "Bitte geben Sie den Suchbegriff ein, nachdem Sie suchen möchten:")
ButtonGadget(#suchbutton, 160, 70, 105, 25, "Suchen")
ButtonGadget(#abbrechen, 15, 70, 110, 25, "Abbrechen")
Repeat
sevent=WaitWindowEvent()
If sevent=#pb_eventgadget
Select EventGadgetID()
Case #suchbutton
ret=1
Break
Case #abbrechen
ret=0
Break
EndSelect
EndIf
Until sevent=#pb_event_closewindow
retu$=GetGadgetText(#string_0)
CloseWindow(#windowsuche)
UseWindow(#window)
ActivateWindow()
If ret=1
ProcedureReturn retu$
Else
ProcedureReturn "0"
EndIf
EndProcedure
Procedure pos(spos,stext2$)
sabs=0
For a=1 To spos
If Mid(stext2$,a,1)=Chr(10)
sabs=sabs+1
EndIf
Next
ProcedureReturn sabs
EndProcedure
Procedure suche(stext$,suchs$,neues)
If neues=0
spos=0
EndIf
If suchs$<>olds$
spos=0
EndIf
For a=sp To Len(stext$)
spos=FindString(stext$,suchs$,a)
If spos<>0
suchpos=pos(spos,stext$)+1
MessageRequester("N-Edit - Suche","Das gesuchte Wort befindet sich in Zeile "+Str(suchpos)+"!",#pb_messagerequester_OK)
olds$=suchs$
sp=spos+1
Break
EndIf
Next
If spos=0
MessageRequester("N-Edit","Das gesuchte Wort wurde leider nicht gefunden",#pb_messagerequester_OK)
EndIf
ActivateWindow()
spos=0
EndProcedure
Procedure zaehlen()
ztext$=""
absaetze=0
buchst=0
leerz=0
ztext$=GetGadgetText(#editor)
For a=1 To Len(ztext$)
If Mid(ztext$,a,1)=Chr(10)
absaetze=absaetze+1
EndIf
If Mid(ztext$,a,1)=" "
leerz=leerz+1
EndIf
buchst=buchst+1
Next
erg$="In dieser Datei stehen..."+Chr(10)+Str(buchst)+" Zeichen, davon.."+Chr(10)+Str(leerz)+" Leerzeichen und"+Chr(10)+Str(absaetze)+" Zeilenumbrüche"
MessageRequester("N-Edit",erg$,#pb_messagerequester_OK)
EndProcedure
Procedure dateil(save3$)
ReadFile(datei2,save3$)
le=0
Repeat
le=le+1
ReadString()
Until Eof(datei2)
CloseFile(datei2)
ProcedureReturn le
EndProcedure
Procedure.s auslesen(save$)
dlen=dateil(save$)
ReadFile(datei,save$)
ClearGadgetItemList(#editor)
atext$=""
otext$=""
ntext$=""
a=0
OpenWindow(#statuswindow, 0,0, 209, 37, #pb_window_screencentered , "N-Edit - Dateistatus")
CreateGadgetList(WindowID())
ProgressBarGadget(#forts, 5, 5, 200, 30, 0, dlen, #PB_ProgressBar_Smooth)
Repeat
a=a+1
pro.f=(a/dlen)*100
UseWindow(#window)
If a=1
atext$=ReadString()
Else
atext$=atext$+Chr(13)+Chr(10)+ReadString()
EndIf
UseWindow(#statuswindow)
SetGadgetState(#forts,a)
If pro.f<>opro.f
SetWindowTitle(#statuswindow,"N-Edit - Dateistatus "+Str(pro.f)+" %")
opro.f=pro.f
EndIf
Until Eof(datei)<>0
CloseWindow(#statuswindow)
UseWindow(#window)
ActivateWindow()
CloseFile(datei)
SetGadgetText(#editor,atext$)
For a=1 To 3
orf$(a)=""
Next
ReadFile(zb,"file")
a=0
Repeat
a=a+1
Orf$(a)=ReadString()
Until Eof(zb)<>0 Or a=2
rfs=a
CloseFile(zb)
If CreateFile(zb,"file")
WriteStringN(save$)
For a=1 To rfs
WriteStringN(orf$(a))
Next
CloseFile(zb)
EndIf
If ReadFile(datei,"file")
a=0
Repeat
a=a+1
rf$(a)=ReadString()
Until Eof(datei)<>0 Or a=3
Else
CreateFile(datei,"file")
CloseFile(datei)
rfa=0
EndIf
For a=1 To rfa
FreeMenu(a)
Next
rfa=a
rfs=0
ProcedureReturn atext$
EndProcedure
Procedure recentfile(rcfnr)
ex=0
ntext$=GetGadgetText(#editor)
If ntext$<>otext$
yn=MessageRequester("N-Edit","Die Datei wurde geändert. Vor dem Beenden abspeichern?",#pb_messagerequester_yesno)
If yn=6
If save$ =""
save$=OpenFileRequester("Text speichern","C:\","Alle Dateien (*.*) | *.*",0)
EndIf
CreateFile(datei,save$)
WriteStringN(text$)
CloseFile(datei)
EndIf
EndIf
save$=rf$(rcfnr)
If ReadFile(datei,save$)
ex=1
CloseFile(datei)
EndIf
If ex=1
otext$=auslesen(save$)
otext$=GetGadgetText(#editor)
SetGadgetText(#editor,otext$)
SetWindowTitle(#window,"N-Edit - "+GetFilePart(save$))
Else
MessageRequester("N-Edit","Datei konnte nicht göffnet werden!")
EndIf
EndProcedure
;- OPENWINDOW
OpenWindow(#window,0,0,700,500, #pb_window_minimizegadget | #pb_window_maximizegadget |#pb_window_systemmenu|#pb_window_screencentered | #pb_window_sizegadget,"N-Edit - Unbenanntes Dokument")
CreateToolBar(#toolbar,WindowID())
ToolBarStandardButton(#newt,#pb_toolbaricon_new)
ToolBarStandardButton(#opent,#pb_toolbaricon_open)
ToolBarStandardButton(#savet,#pb_toolbaricon_save)
ToolBarStandardButton(#suchet,#pb_toolbaricon_find)
ToolBarStandardButton(#druckt,#pb_toolbaricon_print)
CreateGadgetList(WindowID())
CreateStatusBar(sbar,WindowID())
AddStatusBarField((WindowWidth()-100))
AddStatusBarField(100)
EditorGadget(#editor,0,27,WindowWidth(),WindowHeight()-65)
CreateMenu(menu,WindowID())
MenuTitle("&Datei")
MenuItem(#neu,"&Neu.... Strg+N")
MenuItem(#open,"&Öffnen... Strg+O")
MenuItem(#save,"&Speichern... Strg+S")
MenuItem(#saveas,"S&peichern unter... Strg+Shift+S")
OpenSubMenu("Zuletzt benutzte Dateien...")
For a= 1 To rfa
If a=1
MenuItem(#p1,GetFilePart(rf$(a)))
ElseIf a=2
MenuItem(#p2,GetFilePart(rf$(a)))
ElseIf a=3
MenuItem(#p3,GetFilePart(rf$(a)))
EndIf
Next
CloseSubMenu()
MenuItem(#druck,"Drucken... Strg+P")
MenuBar()
MenuItem(#end,"&Beenden Strg+Q")
MenuTitle("&Bearbeiten")
MenuItem(#suchen,"S&uchen... Strg+F")
MenuItem(#wsuchen,"&Weitersuchen F3")
MenuItem(#format,"&Textformat... Strg+T")
MenuItem(#zaehl,"&Zeichen Zählen Strg+Shift+Z")
MenuTitle("&Hilfe")
MenuItem(#help,"Hilfe... F1")
MenuItem(#info,"Über... F2")
;- Shortcuts
AddKeyboardShortcut(#window,#pb_shortcut_F2,#info)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_T,#format)
AddKeyboardShortcut(#window,#pb_shortcut_F1,#help)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_n,#neu)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_p,#druck)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_f,#suchen)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_F3,#wsuchen)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_o,#open)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_q,#end)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_shift | #pb_shortcut_s,#saveas)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_s,#save)
AddKeyboardShortcut(#window,#pb_shortcut_control | #pb_shortcut_shift |#pb_shortcut_z,#zaehl)
wh=WindowHeight()
ww=WindowWidth()
If var=1
SetGadgetFont(#editor,UseFont(font))
EndIf
cmd$=ProgramParameter()
If cmd$
save$=cmd$
otext$=auslesen(save$)
otext$=GetGadgetText(#editor)
SetGadgetText(#editor,otext$)
SetWindowTitle(#window,"N-Edit - "+GetFilePart(save$))
EndIf
;- MAIN
Repeat
event=WaitWindowEvent()
If WindowHeight()<>wh Or WindowWidth()<>ww
ResizeGadget(#editor,0,27,WindowWidth(),WindowHeight()-65)
ww=WindowWidth()
wh=WindowHeight()
EndIf
If event=#pb_eventmenu
Select EventMenuID()
Case #p1
If rf$(1)
recentfile(1)
EndIf
Case #p2
If rf$(2)
recentfile(2)
EndIf
Case #p3
If rf$(3)
recentfile(3)
EndIf
Case #druck
If drucken(save$)=1
ElseIf pr=1
MessageRequester("N-Edit","Beim Drucken ist ein Fehler aufgetreten!")
EndIf
Case #druckt
If drucken(save$)=1
ElseIf pr=1
MessageRequester("N-Edit","Beim Drucken ist ein Fehler aufgetreten!")
EndIf
Case #format
If FontRequester("Arial",12,0)
LoadFont(font,SelectedFontName(),SelectedFontSize(),SelectedFontStyle())
fsize=SelectedFontSize()
If CreateFile(datei,"font")
WriteStringN((SelectedFontName()))
WriteStringN((Str(SelectedFontSize())))
WriteStringN((Str(SelectedFontStyle())))
CloseFile(datei)
EndIf
SetGadgetFont(#editor,UseFont(font))
EndIf
Case #info
MessageRequester("Über N-Edit 0.1","M E d i t o r V e r s i o n 0 . 1"+Chr(10)+"(c) by Jonas Haag"+Chr(10)+Chr(10)+"Written in Purebasic by Jonas Haag"+Chr(10)+"This Program is Freeware!"+Chr(10)+Chr(10)+Chr(10)+"Get Information:"+Chr(10)+"http://www.jonashaag.ch.vu"+Chr(10)+"Copyright (c) by Jonas Haag 2005. All rights reserved.",#pb_messagerequester_OK)
Case #neu
ntext$=GetGadgetText(#editor)
If ntext$<>otext$
yn=MessageRequester("N-Edit","Die Datei wurde geändert. Vor dem Beenden abspeichern?",#pb_messagerequester_yesno)
If yn=6
If save$ =""
save$=OpenFileRequester("Text speichern","C:\","Alle Dateien (*.*) | *.*",0)
EndIf
CreateFile(datei,save$)
WriteStringN(text$)
CloseFile(datei)
EndIf
EndIf
ClearGadgetItemList(#editor)
save$=""
otext$=""
ntext$=""
SetWindowTitle(#window,"N-Edit - Unbenanntes Dokument")
Case #open
If save$<>""
sort$=GetPathPart(save$)
Else
sort$=""
EndIf
save1$=""
save1$=OpenFileRequester("Datei öffnen",sort$,"Alle Dateien (*.*) | *.*",0)
If save1$
save$=save1$
otext$=auslesen(save$)
otext$=GetGadgetText(#editor)
SetGadgetText(#editor,otext$)
SetWindowTitle(#window,"N-Edit - "+GetFilePart(save$))
EndIf
Case #newt
ntext$=GetGadgetText(#editor)
If ntext$<>otext$
yn=MessageRequester("N-Edit","Die Datei wurde geändert. Vor dem Beenden abspeichern?",#pb_messagerequester_yesno)
If yn=6
If save$ =""
save$=OpenFileRequester("Text speichern","C:\","Alle Dateien (*.*) | *.*",0)
EndIf
CreateFile(datei,save$)
WriteStringN(text$)
CloseFile(datei)
EndIf
EndIf
ClearGadgetItemList(#editor)
save$=""
otext$=""
ntext$=""
SetWindowTitle(#window,"N-Edit - Unbenanntes Dokument")
Case #help
RunProgram("Readme.txt")
Case #opent
If save$<>""
sort$=GetPathPart(save$)
Else
sort$=""
EndIf
save1$=""
save1$=OpenFileRequester("Datei öffnen",sort$,"Alle Dateien (*.*) | *.*",0)
If save1$
save$=save1$
otext$=auslesen(save$)
otext$=GetGadgetText(#editor)
SetGadgetText(#editor,otext$)
SetWindowTitle(#window,"N-Edit - "+GetFilePart(save$))
EndIf
Case #wsuchen
If olds$<>""
stext$=GetGadgetText(#editor)
olds2$=olds$
suche(stext$,olds2$,0)
Else
stext$=GetGadgetText(#editor)
suchs$=open_searchwindow(olds$)
If suchs$<>"0"
suche(stext$,suchs$,1)
EndIf
EndIf
Case #suchen
stext$=GetGadgetText(#editor)
suchs$=open_searchwindow(olds$)
If suchs$<>"0"
suche(stext$,suchs$,1)
EndIf
Case #suchet
If olds$<>""
stext$=GetGadgetText(#editor)
olds2$=olds$
suche(stext$,olds2$,0)
Else
stext$=GetGadgetText(#editor)
suchs$=open_searchwindow(olds$)
If suchs$<>"0"
suche(stext$,suchs$,1)
EndIf
EndIf
Case #zaehl
zaehlen()
Case #end
Gosub ende
Case #save
If save$
sort$=GetPathPart(save$)
Else
sort$=""
EndIf
text$=GetGadgetText(#editor)
If save$ =""
save1$=SaveFileRequester("Datei speichern...",sort$,"Alle Dateien (*.*) | *.*",0)
If save1$<>""
save$=save1$
EndIf
EndIf
If CreateFile(datei,save$)
WriteString(text$)
CloseFile(datei)
otext$=GetGadgetText(#editor)
EndIf
otext$=GetGadgetText(#editor)
Case #savet
If save$<>""
sort$=GetPathPart(save$)
Else
sort$=""
EndIf
text$=GetGadgetText(#editor)
If save$ =""
save1$=SaveFileRequester("Datei speichern...",sort$,"Alle Dateien (*.*) | *.*",0)
If save1$<>""
save$=save1$
EndIf
EndIf
If CreateFile(datei,save$)
WriteString(text$)
CloseFile(datei)
otext$=GetGadgetText(#editor)
EndIf
otext$=GetGadgetText(#editor)
Case #saveas
save1$=SaveFileRequester("Datei speichern unter...","C:\","Alle Dateien (*.*) | *.*",0)
If save1$
save$=save1$
If DeleteFile(save$)
CreateFile(datei,save$)
WriteString(text$)
CloseFile(datei)
otext$=GetGadgetText(#editor)
EndIf
EndIf
EndSelect
EndIf
Until event=#pb_event_closewindow
Gosub ende
ende:
yn=0
ntext$=GetGadgetText(#editor)
If ntext$<>otext$
yn=MessageRequester("N-Edit","Die Datei wurde geändert. Vor dem Beenden abspeichern?",#pb_messagerequester_yesno)
If yn=6
If save$ =""
save$=OpenFileRequester("Text speichern","C:\","Alle Dateien (*.*) | *.*",0)
EndIf
If CreateFile(datei,save$)
WriteStringN(ntext$)
CloseFile(datei)
EndIf
Else
End
EndIf
EndIf
End
Return
