EditorGadget mit Multiformatierungen und HTML-Export
Verfasst: 17.02.2006 13:08
Hallo Leute,
hab mich mal gestern und heute ein ganzes Stück lang gespielt, bis ich endlich so weit war, wie ich sein wollte. Ich habe versucht, ein EditorGadget mehrfach zu formatieren (z.B. markierten Text fett und kursiv) und diese Formatierung dann in HTML-Code zu exportieren.
Jetzt bin ich aber kein Profi, somit schaut der Programmcode ein wenig hakelig aus. Darum die Bitte, falls jemand Optimierungen, Verbesserungen oder Anregungen hat, meldet euch.
Ansonsten kann dieser Code von jedem frei verwendet werden. Hab in der Hinsicht nicht viel Material auf dem Board und im CodeArchiv gefunden, drum möcht ich euch das zur Verfügung stellen.
Hoffe, jemand kanns brauchen. Vielleicht gibts ja auch die eine oder andere Anregung.
Servus, Bamsagla
hab mich mal gestern und heute ein ganzes Stück lang gespielt, bis ich endlich so weit war, wie ich sein wollte. Ich habe versucht, ein EditorGadget mehrfach zu formatieren (z.B. markierten Text fett und kursiv) und diese Formatierung dann in HTML-Code zu exportieren.
Jetzt bin ich aber kein Profi, somit schaut der Programmcode ein wenig hakelig aus. Darum die Bitte, falls jemand Optimierungen, Verbesserungen oder Anregungen hat, meldet euch.
Ansonsten kann dieser Code von jedem frei verwendet werden. Hab in der Hinsicht nicht viel Material auf dem Board und im CodeArchiv gefunden, drum möcht ich euch das zur Verfügung stellen.
Code: Alles auswählen
; EditorGadget mit Multiformatierungen und HTML-Exporter
; Bamsagla - Harry Wessner - 17.02.2006 - PureBasic 4.00 Beta 3
; Globale Formatierungsvariablen werden erstellt
Global Editorfettdr, Editoritalic, Editorunderl, Editorstrike
; EditorGadget Format Zeichen für Zeichen auslesen
Procedure Formatlesen(Gadget,Position)
SendMessage_(GadgetID(Gadget),#EM_SETSEL,Position,Position+1)
preval.CHARFORMAT
preval\cbSize=SizeOf(CHARFORMAT)
SendMessage_(GadgetID(Gadget),#EM_GETCHARFORMAT,#SCF_SELECTION,@preval)
Pretyp=preval\dwEffects
If Pretyp & #CFM_STRIKEOUT: Editorstrike=1: Else: Editorstrike=0: EndIf
If Pretyp & #CFM_UNDERLINE: Editorunderl=1: Else: Editorunderl=0: EndIf
If Pretyp & #CFM_ITALIC: Editoritalic=1: Else: Editoritalic=0: EndIf
If Pretyp & #CFM_BOLD: Editorfettdr=1: Else: Editorfettdr=0: EndIf
EndProcedure
; EditorGadget formatieren mit Berücksichtigung bestehender Formate
Procedure Formatsetzen(Gadget,Neuformat)
Speicher1.l=0: Speicher2.l=0
SendMessage_(GadgetID(Gadget),#EM_GETSEL,@Speicher1,@Speicher2)
For Formatieren=Speicher1 To Speicher2-1
Formatlesen(Gadget,Formatieren): Gesamtformat=0
If Neuformat=#CFM_BOLD And Editorfettdr=0: Gesamtformat=Gesamtformat|#CFM_BOLD: EndIf
If Neuformat<>#CFM_BOLD And Editorfettdr=1: Gesamtformat=Gesamtformat|#CFM_BOLD: EndIf
If Neuformat=#CFM_ITALIC And Editoritalic=0: Gesamtformat=Gesamtformat|#CFM_ITALIC: EndIf
If Neuformat<>#CFM_ITALIC And Editoritalic=1: Gesamtformat=Gesamtformat|#CFM_ITALIC: EndIf
If Neuformat=#CFM_UNDERLINE And Editorunderl=0: Gesamtformat=Gesamtformat|#CFM_UNDERLINE: EndIf
If Neuformat<>#CFM_UNDERLINE And Editorunderl=1: Gesamtformat=Gesamtformat|#CFM_UNDERLINE: EndIf
If Neuformat=#CFM_STRIKEOUT And Editorstrike=0: Gesamtformat=Gesamtformat|#CFM_STRIKEOUT: EndIf
If Neuformat<>#CFM_STRIKEOUT And Editorstrike=1: Gesamtformat=Gesamtformat|#CFM_STRIKEOUT: EndIf
format.CHARFORMAT
format\cbSize=SizeOf(CHARFORMAT)
format\dwMask=#CFM_ITALIC|#CFM_BOLD|#CFM_STRIKEOUT|#CFM_UNDERLINE
format\dwEffects=Gesamtformat
SendMessage_(GadgetID(Gadget),#EM_SETCHARFORMAT,#SCF_SELECTION,@format)
Next
SendMessage_(GadgetID(Gadget),#EM_SETSEL,Speicher1,Speicher2)
EndProcedure
; Hauptteil mit Anwendungsfenster und Abfragen
If OpenWindow(100,0,0,400,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Editor-Test")
If CreateGadgetList(WindowID(100))
ButtonGadget(100,10,10,40,25,"Fett")
ButtonGadget(110,50,10,50,25,"Kursiv")
ButtonGadget(120,100,10,80,25,"Unterstrichen")
ButtonGadget(130,180,10,100,25,"Durchgestrichen")
ButtonGadget(140,280,10,110,25,"HTML Exportieren")
EditorGadget(200,10,45,WindowWidth(100)-20,WindowHeight(100)-55)
EndIf
; Rechtsklick-Menü für EditorGadget wird erstellt
If CreatePopupMenu(100)
MenuItem(110,"Ausschneiden"+Chr(9)+"Strg+X")
MenuItem(120,"Kopieren"+Chr(9)+"Strg+C")
MenuItem(130,"Einfügen"+Chr(9)+"Strg+V")
MenuItem(140,"Alles markieren"+Chr(9)+"Strg+A")
MenuBar()
MenuItem(150,"Rückgängig"+Chr(9)+"Strg+Z")
OpenSubMenu("Formatieren")
MenuItem(160,"Fett"+Chr(9)+"Strg+Shift+F")
MenuItem(170,"Kursiv"+Chr(9)+"Strg+Shift+K")
MenuItem(180,"Unterstrichen"+Chr(9)+"Strg+Shift+U")
MenuItem(190,"Durchgestrichen"+Chr(9)+"Strg+Shift+D")
CloseSubMenu()
EndIf
SetGadgetFont(200,LoadFont(100,"Tahoma",10))
; URLs werden automatisch als Links dargestellt
SendMessage_(GadgetID(200),#EM_AUTOURLDETECT,#True,0)
; Shortcuts für Editor-Fenster werden hinzugefügt
AddKeyboardShortcut(100,#PB_Shortcut_Control|#PB_Shortcut_Shift|#PB_Shortcut_F,160)
AddKeyboardShortcut(100,#PB_Shortcut_Control|#PB_Shortcut_Shift|#PB_Shortcut_K,170)
AddKeyboardShortcut(100,#PB_Shortcut_Control|#PB_Shortcut_Shift|#PB_Shortcut_U,180)
AddKeyboardShortcut(100,#PB_Shortcut_Control|#PB_Shortcut_Shift|#PB_Shortcut_D,190)
Repeat
Select WindowEvent()
Case #WM_RBUTTONDOWN
If GetActiveGadget()=200: DisplayPopupMenu(100,WindowID(100)): EndIf
Case #PB_Event_CloseWindow
Ende=1
Case #PB_Event_Gadget
Select EventGadget()
Case 100: Formatsetzen(200,#CFM_BOLD)
Case 110: Formatsetzen(200,#CFM_ITALIC)
Case 120: Formatsetzen(200,#CFM_UNDERLINE)
Case 130: Formatsetzen(200,#CFM_STRIKEOUT)
Case 140
; Hier werden die Formate des EditorGadgets in eine HTML-Datei exportiert
HtmlExporter$=SaveFileRequester("HTML Exportieren","","Alle HTML-Dateien (*.htm,*.html)|*.htm;*.html",0)
If HtmlExporter$<>""
If Right(HtmlExporter$,3)="htm": Gegeben=1: EndIf
If Right(HtmlExporter$,4)="html": Gegeben=1: EndIf
If Gegeben=0: HtmlExporter$=HtmlExporter$+".htm": EndIf
If CreateFile(100,HtmlExporter$)
WriteStringN(100,"<HTML><HEAD><TITLE>Export aus einem EditorGadget</TITLE></HEAD><BODY>")
SendMessage_(GadgetID(200),#EM_SETSEL,0,-1)
Speicher1.l=0: Speicher2.l=0
SendMessage_(GadgetID(200),#EM_GETSEL,@Speicher1,@Speicher2)
HtmlFettdr=0: HtmlKursiv=0: HtmlUnters=0: HtmlStrike=0
Zeilenschaltung$=Chr(10)
Erweitertezeile$=Chr(13)+Chr(10)
Textfeld$=ReplaceString(GetGadgetText(200),Erweitertezeile$,Zeilenschaltung$)
For Formatieren=Speicher1 To Speicher2
Formatlesen(200,Formatieren)
Aktuellzeichen$=Mid(Textfeld$,Formatieren+1,1)
If Editorfettdr=0 And HtmlFettdr=1: WriteString(100,"</B>"): HtmlFettdr=0: EndIf
If Editoritalic=0 And HtmlKursiv=1: WriteString(100,"</I>"): HtmlKursiv=0: EndIf
If Editorunderl=0 And HtmlUnters=1: WriteString(100,"</U>"): HtmlUnters=0: EndIf
If Editorstrike=0 And HtmlStrike=1: WriteString(100,"</S>"): HtmlStrike=0: EndIf
If Aktuellzeichen$=Zeilenschaltung$: WriteStringN(100,"<BR>"): Formatieren=Formatieren+1: EndIf
If Editorfettdr=1 And HtmlFettdr=0: WriteString(100,"<B>"): HtmlFettdr=1: EndIf
If Editoritalic=1 And HtmlKursiv=0: WriteString(100,"<I>"): HtmlKursiv=1: EndIf
If Editorunderl=1 And HtmlUnters=0: WriteString(100,"<U>"): HtmlUnters=1: EndIf
If Editorstrike=1 And HtmlStrike=0: WriteString(100,"<S>"): HtmlStrike=1: EndIf
If Not Aktuellzeichen$=Zeilenschaltung$: WriteString(100,Aktuellzeichen$): EndIf
Letzteszeichen$=Aktuellzeichen$
Next
If HtmlFettdr=1: WriteString(100,"</B>"): EndIf
If HtmlKursiv=1: WriteString(100,"</I>"): EndIf
If HtmlUnters=1: WriteString(100,"</U>"): EndIf
If HtmlStrike=1: WriteString(100,"</S>"): EndIf
WriteStringN(100,"</BODY></HTML>")
CloseFile(100)
Else
MessageRequester("Fehler!","Die Erstellung der HTML-Datei ist leider fehlgeschlagen."+Chr(10)+"Der Vorgang war nicht erfolgreich!",#MB_ICONERROR)
EndIf
EndIf
EndSelect
Case #PB_Event_Menu
Select EventMenu()
; Befehle des Rechtsklick-Menüs vom EditorGadget
Case 110: SendMessage_(GadgetID(200),#WM_CUT,0,0)
Case 120: SendMessage_(GadgetID(200),#WM_COPY,0,0)
Case 130: SendMessage_(GadgetID(200),#WM_PASTE,0,0)
Case 140: SendMessage_(GadgetID(200),#EM_SETSEL,0,-1)
Case 150: SendMessage_(GadgetID(200),#EM_UNDO,0,0)
Case 160: If GetActiveGadget()=200: Formatsetzen(200,#CFM_BOLD): EndIf
Case 170: If GetActiveGadget()=200: Formatsetzen(200,#CFM_ITALIC): EndIf
Case 180: If GetActiveGadget()=200: Formatsetzen(200,#CFM_UNDERLINE): EndIf
Case 190: If GetActiveGadget()=200: Formatsetzen(200,#CFM_STRIKEOUT): EndIf
EndSelect
Case 0: Delay(1)
EndSelect
Until Ende=1
EndIf
End
Servus, Bamsagla