Seite 1 von 2
Editor erstellen wie pb-ide/jaPBe
Verfasst: 20.03.2006 01:40
von Toshy
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
Verfasst: 20.03.2006 01:49
von edel
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
Verfasst: 06.04.2006 13:41
von funk.munich
Hi zusammen,
wenn ich den Code ausprobiere erhalte ich nur Fehlermeldungen, das
z.B. TextHeight() is not a function, an array or ...
Was mache ich falsch?
Danke + Gruß,
Daniel
Verfasst: 06.04.2006 13:45
von edel
Du benutzt bestimmt <= PB 3.94 . der Code oben ist ab PB Version 4
Verfasst: 06.04.2006 13:45
von Kiffi
> 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
Verfasst: 06.04.2006 13:47
von edel
Danke
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.
Ich liebe Windows

Verfasst: 06.04.2006 13:54
von Kiffi
> Ich liebe Windows
ich weiss nicht, welche Schriftart bei mir anstelle von Couriere verwendet
wird. Courier ist es allerdings nicht
Grüße ... Kiffi
Verfasst: 06.04.2006 13:54
von MVXA
Bei mir hat Windows das nicht gemacht

...
Verfasst: 06.04.2006 14:42
von Kaeru Gaman
> 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...
Verfasst: 06.04.2006 14:58
von DarkDragon
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...
Ich dachte MS Sans Serif ist die standard schriftart.