Editor erstellen wie pb-ide/jaPBe
-
- 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.
-
- 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.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- 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.