Eine Frage an die Editorschreiber (Frank und Andreas)
In euren XProfan-Editoren kann man die Cursorzeile farbig hervorheben.
Welche API oder Procedur macht es möglich, die Zeile in einem Richedit farbig zu gestalten, in der sich grade der Cursor befindet ?
Bei der Hilfe denkt dran: alter Mann und von API soviel Ahnung "wie 'ne Kuh vom Stabhochsprung !"
Cursorzeile farbig in einem Edit
-
horst_ -
29. September 2010 um 06:16
-
-
-
Der Editor verwendet kein Richedit, sondern ein Scintilla-Edit, das zu normalen Edits nahezu kompatibel ist, aber in den Funktionen ungleich mächtiger. Ich glaube nicht, dass ein Richedit diese Funktion bietet. Da wirst du dann wohl subclassen müssen.
-
Hallo Horst,
Mein Editor benutzt weder ein Richedit noch Scintilla, wieder was anderes.
Mit dem Richedit geht es zwar auch ist aber alles andere als einfach.
Ein kleines Beispiel dazu.
Dort wird nicht weiter auf den benutzen Font ( in einer Zeile können sich ja verschiedene Fonts befinden), und Textposition ( wird im Beispiel immer bei 1 anfangen ) eingegangen. Das müsste also auch noch berücksichtigt werden. Das ganze wird sich also noch komplizierter gestalten.
Und das ist nur das Einfärben.
In der Hauptschleife bzw. SubClassProc muss permanent die Zeile abgefragt werden, und zwar nicht nur die aktuelle sondern auch die vorherige. Die müssen ja beide eingefärbt werden.Gruss
AndreasCode
Alles anzeigen$H Windows.ph $H Structs.ph $H Messages.ph Struct Rect = ~Rect Struct TM = ~TEXTMETRIC CLS Var RE& = Create("RichEdit",%hwnd,"",0,0,300,300) Settext Re&,"Ein Klick ins Fenster\nsollte die zweite Zeile färben\nund ieder zurück !" Waitinput selectLine(RE&,1,$0000FF,$00FFFF) Waitinput selectLine(RE&,1,$FFFFFF,$0) Waitinput End Proc SelectLine Parameters RichEdit&,SelectedLine&,BackColor&,TxtColor& Var Text$ = Space$(4095) Var s$ = "" Var R# = new(RECT) Var R1# = new(RECT) Var WLine& = 0 Var HLine& = 0 Var TM# = New(TM) Var DC& = ~GetDC(Richedit&) Var Brush& = ~CreateSolidBrush(BackColor&) SendMessage(Richedit&,~EM_GETLINE,SelectedLine&,Addr(Text$)) Text$ = Trim$(Text$) SendMessage(Richedit&,~EM_GETRECT,0,R#) WLine& = Int(R#.Right&-R#.Left&+1) ~GetTextMetrics(DC&,TM#) HLine& = Int(tm#.tmHeight& + tm#.tmExternalLeading&) ~SetRect(R1#,0,Int(SelectedLine&*HLine&),Int(WLine&+1),Int((SelectedLine&+1)*HLine&+1)) ~FillRect(DC&,r1#,Brush&) ~SetBkMode(DC&,~TRANSPARENT) ~SetTextColor(DC&,TxtColor&) ~TextOut(DC&,0,Int(SelectedLine&*HLine&+1),addr(text$),Len(text$)) ~DeleteObject(Brush&) Dispose R#,R1#,TM# EndProc
-
MüllSchlucker (wieso unregistriert ?)
In deinen Code werde ich mich jetzt einmal "verbeissen" !;)
Danke
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!