Editor erstellen wie pb-ide/jaPBe
- 
				Toshy
- Beiträge: 713
- Registriert: 22.03.2005 00:29
- Computerausstattung: Computer und Strom vorhanden
- Wohnort: LK Wolfenbüttel
Editor erstellen wie pb-ide/jaPBe
Hallo.
Nix besonderes, brauche aber für mehrere kleine Projekte nen kleinen Editor. Gibt es ja ansich ein Gadget zu, aber ich will da ich es klasse finde so machen wie in jaPBe, also Links ne Spalte mit Zeilennummern (oder evtl. anderen Daten) und dann auch die Möglichkeit bieten Zeilen auszublenden.
Wie macht man das? Bin durch den jaPBe Quelltext noch nicht durchgestiegen.
Erster Punkt ist wie erstellt man die Spalte mit den Zeilennummern?
Ist das ein bestimmtes Gadget oder sind es zwei Gadget nebeneinander ....
Zweiter Punkt, wie blendet man in der "Zeilenspalte" und im Editor die Zeilen aus? Ist das ein Gadget bzw. eine Funktion die das automatisch macht oder muß ich das selbst machen (Zeilennummer erkennen und klick erkennen, dann Zeilen entfernen bzw. einfügen)?
Ich brauche nicht unbedingt ne fertige Vorlage, bastele mir eh lieber alles selber damit ich es verstehe, aber irgenwo muß man ja mal anfangen und es verstehen. Bin für Tips dankbar.
Grüßle
Toshy
			
			
									
									Nix besonderes, brauche aber für mehrere kleine Projekte nen kleinen Editor. Gibt es ja ansich ein Gadget zu, aber ich will da ich es klasse finde so machen wie in jaPBe, also Links ne Spalte mit Zeilennummern (oder evtl. anderen Daten) und dann auch die Möglichkeit bieten Zeilen auszublenden.
Wie macht man das? Bin durch den jaPBe Quelltext noch nicht durchgestiegen.
Erster Punkt ist wie erstellt man die Spalte mit den Zeilennummern?
Ist das ein bestimmtes Gadget oder sind es zwei Gadget nebeneinander ....
Zweiter Punkt, wie blendet man in der "Zeilenspalte" und im Editor die Zeilen aus? Ist das ein Gadget bzw. eine Funktion die das automatisch macht oder muß ich das selbst machen (Zeilennummer erkennen und klick erkennen, dann Zeilen entfernen bzw. einfügen)?
Ich brauche nicht unbedingt ne fertige Vorlage, bastele mir eh lieber alles selber damit ich es verstehe, aber irgenwo muß man ja mal anfangen und es verstehen. Bin für Tips dankbar.
Grüßle
Toshy
1. Win10
PB6.1
						PB6.1
Code: Alles auswählen
  Procedure MAKELONG(low,high)
    ProcedureReturn low | (high<<16)
  EndProcedure 
  
  Structure DrawingInfoStruct
    Type.l
    Window.l
    DC.l
    ReleaseProcedure.l
    PixelBuffer.l
    Pitch.l
    Width.l
    Height.l
    Depth.l
  EndStructure
  
  Global DS.DrawingInfoStruct
  
  Procedure ReleaseOutput()
    ReleaseDC_(DS\Window,DS\DC)
  EndProcedure
  
  Procedure WindowIDOutput(hWnd) ; returns the outputID for the declared window handle
    DS\Type=1
    DS\Window=hWnd
    DS\DC=GetDC_(hWnd) ;GetWindowDC_(hWnd)
    DS\ReleaseProcedure=@ReleaseOutput()
    ProcedureReturn DS
  EndProcedure 
  
  Procedure _iEditor_CallBack(hwnd, msg, wParam, lParam)
    protected rc.rect
    protected fontsizecy
    shared OLDP
    shared *font.long
    protected point.point
    
    res = CallWindowProc_(OLDP, hwnd, msg, wParam, lParam)
    
    if msg = #WM_PAINT 
      
      HideCaret_(hwnd)
     
      GetClientRect_(hwnd,rc)
      
      startindex = SendMessage_(hwnd,#EM_CHARFROMPOS,0,@point)
      startline  = SendMessage_(hwnd,#EM_LINEFROMCHAR,startindex,0) 
      endindex = SendMessage_(hwnd,#EM_CHARFROMPOS,0,@rc\right)
      endline  = SendMessage_(hwnd,#EM_LINEFROMCHAR,endindex,0) 
       
      StartDrawing(WindowIDOutput(hwnd))
      
      box(0,0,48,rc\bottom,$C0C0C0)
      
      DrawingFont(*font\l)
      
      fontsizecy = TextHeight("M")
      
      lastLine = rc\bottom / fontsizecy + startline - 1
      
      x  =  43
      
      while (startline <= lastLine) and (startline <= endline)
        DrawText(x-TextWidth(str(startline+1)),y,str(startline+1),$000000,$C0C0C0) 
        y + fontsizecy
        startline + 1 
      wend
      
      
      StopDrawing()
      
      ShowCaret_(hwnd)
      ProcedureReturn 0
    endif 
     
    ProcedureReturn res
  EndProcedure
  
  
  ;#####################################################
  ;#
  ;#####################################################
  
  define.long *font
  Define.long *editor
  Define.long *window
  Define.l    Event
  
  
  *window = OpenWindow(#PB_Any,0,0,400,400,"",1|#WS_SYSMENU)
  
  If *window 
    
    CreateGadgetList(*window\l)
    
    *editor = EditorGadget(#pb_any,0,0,395,375)
    *font   = LoadFont(#pb_any,"Courier New",10)
    SetGadgetFont(*editor,*font\l)
    OLDP = SetWindowLong_(*editor\l,#GWL_WNDPROC,@_iEditor_CallBack())
    
    SendMessage_(*editor\l,#EM_SETMARGINS,#EC_LEFTMARGIN,MAKELONG(50,0))
    
    ;-
    Repeat
      Event = WaitWindowEvent()  
      
      
      
    Until Event = #WM_CLOSE
    ;-
  EndIf
  
  End
					Zuletzt geändert von edel am 06.04.2006 13:47, insgesamt 1-mal geändert.
									
			
									
						- 
				funk.munich
- Beiträge: 123
- Registriert: 27.03.2006 09:45
> Was mache ich falsch?
Der Code von hallodri musst Du mit PB4 ausführen.
@hallodri:
Da hat sich ein kleiner Typo eingeschlichen:
Grüße ... Kiffi
			
			
									
									Der Code von hallodri musst Du mit PB4 ausführen.
@hallodri:
Da hat sich ein kleiner Typo eingeschlichen:
Code: Alles auswählen
  *font   = LoadFont(#pb_any,"Couriere New",10)
                                     ^a²+b²=mc²
						Danke 
Ich liebe Windows 
			
			
									
									
						
Code: Alles auswählen
Hinweis: Unter Windows versucht der systemseitige Font-Mapper immer, einen passenden Zeichensatz für Sie zu finden. Wenn Sie z.B. versuchen einen Zeichensatz mit Namen "Tim Now Ronin" zu öffnen und dieser Zeichensatz-Name existiert nicht, dann versucht der Font-Mapper denn am besten passenden (anhand von Name, Zeichensatzhöhe, Stil, etc.) Zeichensatz zu finden und zu öffnen. Gehen Sie also nicht davon aus, dass kein Zeichensatz geladen wird, wenn Sie einen falsche(n) Namen oder Größe angeben. 

- 
				Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- 
				DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Ich dachte MS Sans Serif ist die standard schriftart.Kaeru Gaman hat geschrieben:> dann versucht der Font-Mapper denn am besten passenden Zeichensatz zu finden
halt ich fürn gerücht...
wenn ein zeichensatz nicht vorhanden ist, wird immer Arial verwendet...
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.
						



 ...
...