HTML-Editor

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

HTML-Editor

Beitrag von Dark Skillu »

Hab hier nen sehr einfache HTML-Editor, klappt soweit auch alles, der erstellt ne HTML Datei mit allen befehlen die ich im editor gadget definiert hab etc. das Problem ist ich kann nur die Datei öffnen die ich im Programm definiert und in eine vordefinierte datei speichern, wie schaffe ich sowas wie beim windows editor mit Datei öffnen/speichern etc. ?

Hier der Code:

Code: Alles auswählen

;coded by Sebastian
;Vielen Dank an die Mitglieder des PureBoards für ihre Hilfe

;strings
Hallo$ = " Hallo"
Halllo$ = " Hallloo"



If OpenWindow(0, 45, 100, 570, 300, "HTML-Editor by Sebastian ", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget) And CreateGadgetList(WindowID(0))
  
        EditorGadget(1, 30,  90, 510, 180 )
        ButtonGadget(2, 30,  45, 60, 30, "1")
        ButtonGadget(3, 105, 45, 60, 30, "2")
        ButtonGadget(4, 180, 45, 60, 30, "3")
        ButtonGadget(5, 255, 45, 60, 30, "4")
        ButtonGadget(6, 330, 45, 60, 30, "5")
        ButtonGadget(7, 405, 45, 60, 30, "Öffnen")
        ButtonGadget(8, 480, 45, 60, 30, "Speichern")
        
EndIf

Repeat

Event = WindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()

  If Event = #PB_Event_CloseWindow
   a=1
  EndIf
  
  If Event = #PB_Event_Gadget 
   If GadgetID = 2 
        String$ = GetGadgetText(1)
     SetGadgetText(1, String$+Hallo$) 
   EndIf
  EndIf
  
  If Event = #PB_Event_Gadget 
   If GadgetID = 3 
     String$ = GetGadgetText(1)
     SetGadgetText(1, String$+Halllo$) 
   EndIf
  EndIf
  
  If Event = #PB_Event_Gadget 
   If GadgetID = 7 
     speichern$ = GetGadgetText(1)
      OpenFile(0,"text.html")
      oeffnen$=ReadString(0)
      SetGadgetText(1, oeffnen$) 
      CloseFile(0)
      
      
   EndIf
  EndIf
  
  If Event = #PB_Event_Gadget 
   If GadgetID = 8 
     speichern$ = GetGadgetText(1)
      CreateFile(0,"text.html")
       WriteString(0, speichern$ )
      CloseFile(0)
   EndIf
  EndIf
  
  

Until a = 1
Ich benutze PureBasic 4.0.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

OpenFileRequester()
SaveFileRequester()

Hilfe und Examples sind deine Freunde und durch aus sinnvoll...
Besonders für deine Syntax sollteste ma die Examples studieren die ist gruselig...
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 »

Beispiel für Speichern:

Code: Alles auswählen

  If Event = #PB_Event_Gadget
    If GadgetID = 8
      speichern$ = GetGadgetText(1)
      ;CreateFile(0,"text.html")
      File$ = SaveFileRequester("HTML-Speichern", "text.html", "HTML (*.html)|*.html;|Alle Dateien (*.*)|*.*", 0)
      If File$ <> "" ; nicht abgebrochen
        If CreateFile(0, File$); immer überprüfen!!!! wichtig
          WriteString(0, speichern$ )
          CloseFile(0)
        EndIf
      EndIf


    EndIf
  EndIf



Until a = 1
Du solltest Variablen deklarieren, konstanten mit aussagekräftigen Namen
für Gadgets usw. So machste Dir das Leben schwer, weil schon bei so wenig
Zeilen kann man den Überblick verlieren! Wie soll das bei tausenden von
Zeilen werden?

Nur so als Tip

Gruß
Thomas
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
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

Danke, den Befehl zum öffnen hab noch ich in der Hilfe gefunden aber wenn ich eine HTML-Datei öffne wird nicht der ganze Inhalt ausgelesen sondern nur der erste Befehl.Laut Hilfe liest ein String alle Zeichen aus bis ein "Ende der Zeile " Zeichen gefunden wird, wie kann ich den ganzen Inhalt auslesen?

Code: Alles auswählen

;Fenster Öffnen Gadgets etc.

If OpenWindow(0, 143, 223, 611, 316, "HTML-Editor",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) And CreateMenu(s, WindowID(0))
      MenuTitle("Datei")
      MenuItem(1, "Öffnen")
      MenuItem(2, "Speichern")
      MenuTitle("Bearbeiten")
      MenuTitle("Einfügen")
      MenuTitle("Settings")
EndIf

If CreateGadgetList(WindowID(0))
      EditorGadget(3, 30, 60, 555, 210)
      ButtonGadget(4, 45, 15, 90, 30, "")
      ButtonGadget(5, 150, 15, 90, 30, "")
      ButtonGadget(6, 255, 15, 90, 30, "")
      ButtonGadget(7, 360, 15, 90, 30, "")
      ButtonGadget(8, 465, 15, 90, 30, "")
EndIf
  
;strings  

Repeat

  Event = WaitWindowEvent()

  If Event = #PB_Event_CloseWindow
    quit=1
  EndIf  

        
      Select Event
       Case #PB_Event_Menu             
          Select EventGadget()
             
             Case 2
               save$ = GetGadgetText(3)
                File$ = SaveFileRequester("HTML-Speichern", "index.html", "HTML (*.html)|*.html;|Alle Dateien (*.*)|*.*", 0)
                 If File$ <> "" ; nicht abgebrochen
                 If CreateFile(0, File$); immer überprüfen!!!! wichtig
                 WriteString(0, save$ )
                CloseFile(0)
                EndIf
                EndIf
                
              Case 1
               
                File$ = OpenFileRequester("HTML Datei Öffnen", "index.html", "HTML (*.html)|*.html;|Alle Dateien (*.*)|*.*", 0)
                 If File$ <> "" ; nicht abgebrochen
                  If OpenFile(0, File$); immer überprüfen!!!! wichtig
                      open$=ReadString(0)
                     CloseFile(0)
                  EndIf
                EndIf
                SetGadgetText(3, open$) 
                
          EndSelect
        EndSelect


Until quit=1

 

Ich benutze PureBasic 4.0.
Benutzeravatar
Bax
Beiträge: 20
Registriert: 16.08.2005 21:45
Wohnort: Erlensee

Beitrag von Bax »

Mit Loc(#File) kriegst du die aktuelle Cursorposition in der Datei, mit Lof(#File) die gesamte Länge der Datei.

Wenn der Lese-/Schreibcursor noch nicht am Ende der Datei angekommen ist (Loc(#File) = Lof(#File)), gibt es noch was auszulesen.

In deinem Beispiel könntest du es so machen:

Code: Alles auswählen

Repeat 
  AddGadgetItem(3, -1, ReadString(0))  ; eine Zeile zum Editorgadget hinzufügen (-1: unten anfügen)
Until Loc(0) = Lof(0)
Grüße,
Bax
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

ich meine wenn man aus einer HTML Datei den Inhalt mit ReadString() ausliest wird nicht alles ausgelesen sondern nur der erste html befehl ...
Ich benutze PureBasic 4.0.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Könnte evtl daran liegen das du nur einen String übergibst?!
Nur schade das du die Codes einfach nur übernimmst ohne dir mal die Hilfe zu den für dich anscheinend neuen Befehlen durchzulesen...
Dann wärst du nämlich spätestens bei OpenFile() auf ReadFile() gestossen und hättest dir damit dein Problem selbst lösen können...

Spoiler:

Code: Alles auswählen

Case 1
  File$ = OpenFileRequester("HTML Datei Öffnen", "index.html", "HTML (*.html)|*.html;|Alle Dateien (*.*)|*.*", 0)
    If File$ = File$
      If ReadFile(0, File$)
        While Eof(0) = 0
        open$ = ReadString(0)
        SetGadgetText(3, GetGadgetText(3) + Chr(10) + open$)
      Wend
      CloseFile(0)
    Else
      MessageRequester("Information","Konnte Datei nicht öffnen!")
    EndIf
[OT]
B> [Spoiler]-Tag 1ea
[/OT]
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Dark Skillu hat geschrieben:ich meine wenn man aus einer HTML Datei den Inhalt mit ReadString() ausliest wird nicht alles ausgelesen sondern nur der erste html befehl ...
Ja, eben das hat Bax doch erklärt wie du es machen sollst.
Das ganze geht aber auch mit EoF(#Datei) statt Lof und Loc.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Bax
Beiträge: 20
Registriert: 16.08.2005 21:45
Wohnort: Erlensee

Beitrag von Bax »

@Dark Skillu
In deinem Code musst du

Code: Alles auswählen

open$=ReadString(0)
durch

Code: Alles auswählen

Repeat
  AddGadgetItem(3, -1, ReadString(0))  ; eine Zeile zum Editorgadget hinzufügen (-1: unten anfügen)
Until Loc(0) = Lof(0)
ersetzen und

Code: Alles auswählen

SetGadgetText(3, open$)
auskommentieren.

Guck dir auch mal (wie D@nte schon angemerkt hat) den Befehl ReadFile() und das Beispiel dort an!


@D@nte:
Jo, mit EoF() geht auch.
In deinen Code ist aber irgendwie eine Zeile zuviel (If File$ = File$), sonst funktionierts.


Grüße,
Bax
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag von Dark Skillu »

wieso funktioniert das mit openfile nicht und soll readfile verwenden?
Ich benutze PureBasic 4.0.
Antworten