N-Edit | ein kleiner Notepad-Klon | Bitte um Kritik!!!

Anwendungen, Tools, Userlibs und anderes nützliches.
JohnMC
Beiträge: 85
Registriert: 06.01.2006 17:04
Wohnort: http://www.j-soft.de.ms
Kontaktdaten:

N-Edit | ein kleiner Notepad-Klon | Bitte um Kritik!!!

Beitrag von JohnMC »


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
[/b][/b][/code]
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Tip: Weniger fett schreiben. :wink:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Für ein Einsteigerprogramm schon sehr passabel.

Folgende Dinge sind noch nicht korrekt:
OpenFileRequester für Speichern
Beim Drucken ist der Text so klein, das ich ein "Mikroskop" brauche :wink:

Folgende Dinge fehlen:
Kontextmenü
Toolbar ausblenden
Zeilenumbruch an/aus

Das war erstmal das auffälligste. Ist ja auch ganz schön Mutig,
Billys bestes Stück zu clonen :lol:

//Nachtrag: Hier kann was nicht stimmen:

Code: Alles auswählen

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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Macros
Beiträge: 1366
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Man kann das Dokument nur 1 mal durchsuchen!

übrigens, hab eingebaut, dass beim Suchen das Wort markiert wird.
http://www.testem.de/roger/files/temp/template.pb

PS: am Montag lösche ich den Code wieder.
Zuletzt geändert von Macros am 03.02.2006 16:58, insgesamt 1-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Punkt 1:

Versuch mal, die Anzahl der globalen Variablen auf ein Mindestmaß zu
reduzieren. Globale Variablen sollte man nur da verwenden, wo es sich
nicht vermeiden lässt.

Punkt 2:

sowas:

Code: Alles auswählen

MenuItem(#neu,"&Neu....                                Strg+N")
kann man prima ersetzen durch:

Code: Alles auswählen

MenuItem(#neu,"&Neu...." + #TAB$ + "Strg+N")
Die Shortcuts werden dann automatisch ausgerichtet.

Punkt 3:

Der Text des Messagerequesters, der erscheint, wenn man nach Ändern
eines Textes den Menüpunkt 'Neu' aufruft, sollte noch geändert werden. ;-)

Ansonsten: Für ein Anfängerprojekt ist das eine solide Leistung :allright:

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

und Codeeinrückung wär gut, das is sinnvoll bei größeren Projekten, da man dort schnell die Übersicht verlieren kann :wink:
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Antworten