Editor

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Ok ok,
hab schon verstanden! /:->
v6.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Thomas hat geschrieben:
C4rizz hat geschrieben:http://www.purebasic.fr/german/viewtopi ... 502#155502

DA genau das was du suchst :allright:
Dieses Ding klappt bei mir irgendwie nicht! :|
Gewoehnt euch das mal ab. Ihr macht den anderen damit keine
Freude wenn sie nur noch herumraten muessen was in eurem
Code nicht funktioniert.

Mit der DLL arbeiten ist recht einfach. Laed man diese DLL wird
intern eine neue Fensterklasse mit dem Namen "Scintilla" registriert.

Das Fenster koennte man dann so erstellen :

Code: Alles auswählen

#SCI_DLL    = 0
#WINDOW     = 0
#SCI_GADGET = 0

Procedure InitSCI()
  If Not OpenLibrary(#SCI_DLL,"scintilla.dll")
    MessageRequester("Fehler","scintilla.dll wurde nicht gefunden")
    End
  EndIf 
EndProcedure

Procedure CreateSCIWindow(id,x,y,cx,cy,hwnd_parent)
  ProcedureReturn CreateWindowEx_(#WS_EX_STATICEDGE,"scintilla",#Null,#WS_VISIBLE|#WS_CHILD,x,y,cx,cy,hwnd_parent,id,0,0)  
EndProcedure

Procedure Main()
      
  hwnd = OpenWindow(#WINDOW,#PB_Ignore,#PB_Ignore,640,480,"Scintilla Test")
  
  If hwnd
      
    hsci = CreateSCIWindow(id, 5,5,630,470,hwnd)
      
    Repeat  
      event = WaitWindowEvent()
       
    
    Until event = #PB_Event_CloseWindow
    
    DestroyWindow_(hsci)
  EndIf 
    
EndProcedure


InitSCI()
Main()
Wenn man einen Lexer laden moechte koennte das so aussehen :

Code: Alles auswählen

#SCI_DLL    = 0
#WINDOW     = 0
#SCI_GADGET = 0

Procedure InitSCI()
  ; "SCILEXER.DLL" LADEN
  ; "SCINTILlA.DLL" KANN AUCH GELADEN WERDEN, 
  ;  SOFERN VORHANDEN,ENTHAELT ABER KEINE LEXER
  
  If Not OpenLibrary(#SCI_DLL,"scilexer.dll")
    MessageRequester("Fehler","scilexer.dll wurde nicht gefunden")
    End
  EndIf 
  
EndProcedure

Procedure CreateSCIWindow(id,x,y,cx,cy,hwnd_parent)
  ; WINAPI SIEHE MSDN!
  ProcedureReturn CreateWindowEx_(#WS_EX_STATICEDGE,"scintilla",#Null,#WS_VISIBLE|#WS_CHILD,x,y,cx,cy,hwnd_parent,id,0,0)  
EndProcedure

Procedure Main()
    
  hwnd = OpenWindow(#WINDOW,#PB_Ignore,#PB_Ignore,640,480,"Scintilla Test")
  
  If hwnd
      
    hsci = CreateSCIWindow(id, 5,5,630,470,hwnd)
    
    ; LEXER LADEN
    SendMessage_(hsci,#SCI_SETLEXER,#SCLEX_VB,0)        
    ; STYLEBITS SETZEN (intern)
    SendMessage_(hsci,#SCI_SETSTYLEBITS,5,0) 
    ; VORDERGRUNDFARBE SETZEN                        
    SendMessage_(hsci,#SCI_STYLESETFORE,#STYLE_DEFAULT,$0)    
    ; HINTERGRUNDFARBE SETZEN
    SendMessage_(hsci,#SCI_STYLESETBACK,#STYLE_DEFAULT,$FFFFFF)
    ; FONT SETZEN
    SendMessage_(hsci,#SCI_STYLESETFONT,#STYLE_DEFAULT,"courier new")
    ; FONT GROESSE SETZEN
    SendMessage_(hsci,#SCI_STYLESETSIZE,#STYLE_DEFAULT,10)    
    ; ALLE STYLES MIT DEN SELBEN WERTEN WIE #STYLE_DEFAULT ANPASSEN
    SendMessage_(hsci,#SCI_STYLECLEARALL,0,0)                  
    ; SETZEN DER SCHLUESSELWOERTER                      
    SendMessage_(hsci,#SCI_SETKEYWORDS, 0,"function end dim as")          
    ; SETZEN DER VORDERGRUNDFARBE
    SendMessage_(hsci,#SCI_STYLESETFORE,#SCE_B_KEYWORD,$FD0502)            
    ; KOMMENTAR VORDERGRUND SETZEN
    SendMessage_(hsci,#SCI_STYLESETFORE,#SCE_B_COMMENT,$4038BF) 
            
    text.s = "Function test()"        + #LF$
    text.s + "  ' blub"               + #LF$
    text.s + "  Dim blub as Integer " + #LF$
    text.s + "End Function "          + #LF$      
    ; TEXT EINFUEGEN
    SendMessage_(hsci,#SCI_SETTEXT,0,text)
                   
    Repeat  
      event = WaitWindowEvent()
       
    
    Until event = #PB_Event_CloseWindow
        
    ;SCINTILLA FENSTER SCHLIESSEN
    DestroyWindow_(hsci)
  EndIf 
    
EndProcedure


InitSCI()
Main()

Weitere Hilfe gibt es hier : http://scintilla.sourceforge.net/ScintillaDoc.html
(gibt es von Kai auch als bequeme chm, link ist aber offline, also mal hoefflich bei ihm anfragen.)

http://www.purebasic.fr/german/search.p ... lts=topics
http://www.purebasic.fr/english/search. ... lts=topics

Wenn du das dann einigermassen verstanden hast, kannst du dann mit
einem eigenen Lexer und Folding ankommen ;)
Antworten