Nochmal EditorGadget - Einzelne Wörter färben

Für allgemeine Fragen zur Programmierung mit PureBasic.
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Nochmal EditorGadget - Einzelne Wörter färben

Beitrag von Calloway »

Hallo!

In einem anderem Thread habe ich einen Code gefunden, mit dem man Zeilen eines Editorgadgets anderes färben oder be-font-en kann . :wink:

Meine Frage ist nun, ob man statt ganzer Zeilen auch einzelne Wörter oder Buchstaben anders färben kann.

Vielen Dank für mögliche Antworten...

Ach ja: die Suchfunktion habe ich ausnahmsweise mal nicht benutzt... /:->
--
Gruß, Martin.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Der original Sourcecode vom PBEditor (IDE), und zwar die Proceduren" helfen dir da bestimmt weiter.

http://purebasic-cvs.dyndns.org/index.c ... web-markup

>>> PS: Ist mir auch erst jetzt eingefallen

MfG Falko
Zuletzt geändert von Falko am 29.10.2004 15:32, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Nochmal EditorGadget - Einzelne Wörter färben

Beitrag von Kiffi »

> Ach ja: die Suchfunktion habe ich ausnahmsweise mal nicht benutzt...

grmpf, das hättest Du mal tun sollen. Das Thema hatten wir erst gestern.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Editbox: Textfragmente selektieren, ersetzen oder färben.

Beitrag von Falko »

Hab jetzt was passendes über die API gestrickt
bzw. in der Eile ohne Ordnung zusammengestellt :mrgreen: .

Code: Alles auswählen

;Selektierte Buchstaben ersetzen bzw. färben. 
;Codeschnipsel written by Falko 
String$="Mein Test" 
Buffer$=Space(255) 
Global hdc
Global mychar.CHARFORMAT

  ;
  ;Ermittle die Anzahl Buchstaben der obrigen Zeile
  ;
  Procedure.l GetCursorPos(YPos.l)
   Result = SendMessage_(hdc,#EM_LINEINDEX,YPos,0)
   ProcedureReturn Result
  EndProcedure
 ;
 ; Farbe und Fontattribute setzen
  Procedure SetCharFormat(Mask.l,Effects.l,Color.l)
     ;mychar.CHARFORMAT ; Sollte vorher als global deklariert werden.
     mychar\cbSize=SizeOf(CHARFORMAT) 
     mychar\dwMask=Mask;#CFM_BOLD|#CFM_COLOR ; Fettschrift und Color setzen  
     mychar\dwEffects=Effects 
     mychar\yHeight=500
     mychar\crTextColor=Color 
     mychar\bCharSet=0
     PokeS(@mychar\szFaceName, "Symbol")
     EndProcedure
  
  
  If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0)) 
     hdc.l=EditorGadget (0,8,8,485,385,#PB_Container_Raised) 
     AddGadgetItem(0,0,"Wie wäre es mit dieser Zeile, die wir ändern wollen.")
     AddGadgetItem(0,1,"Wie wäre es mit dieser Zeile, die wir ändern wollen.")    
     AddGadgetItem(0,2,"Wie wäre es mit dieser Zeile, die wir ändern wollen.") 
     ;
     ;In dieser Zeile ein Teilstring, Farbe und Fontattribut verändern
     ;
     Char=GetCursorPos(1)
     SendMessage_(hdc,#EM_SETSEL,Char+16,Char+28); markiere Textteil, der geändert werden soll
     SetCharFormat(#CFM_BOLD|#CFM_COLOR,1,$0000FF)
     SendMessage_(hdc,#EM_SETCHARFORMAT,#SCF_SELECTION,mychar); Setzen der Attribute auf selection
     SendMessage_(hdc,#EM_REPLACESEL,0,String$); Ersetze diesen Teil duch den String$ 
     ;
     ;Textteil Markieren und durch nur Farbe Blau und Fontattribute ersetzen 
     ;
     
     Char=GetCursorPos(2)
     SendMessage_(hdc,#EM_SETSEL,Char+8,Char+8+8); markiere Textteil, der gefärbt werden soll 
     SetCharFormat(#CFM_FACE | #CFM_SIZE | #CFM_COLOR,1,$FF0000)
     SendMessage_(hdc,#EM_SETCHARFORMAT,#SCF_SELECTION,mychar);Chare-Attribute setzen
     SendMessage_(hdc,#EM_GETSELTEXT,0,Buffer$); kopiere Selektieren Text in den Buffer  
     SendMessage_(hdc,#EM_REPLACESEL,0,Buffer$); ersetze Text dann aus dem Buffer mit den Attributen
     
    
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
  EndIf
Hab leider nicht viel Zeit. Heute mal wieder die letzte Nachtschicht für diese Woche. :mrgreen:

>>>>> Edit: Wörter oder Buchstaben färben, ersetzen oder andere Fonts
>>>>> vergeben mittels API-Funktionen
MfG Falko
Zuletzt geändert von Falko am 29.10.2004 22:00, insgesamt 14-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

Wobei imho das einfärben via RTF schöner, wenn auch wesentlich
komplizierter ist. Für ein Beispiel kannst du dir z.B. meine Brainfuck IDE
angucken, die du im PureBoard Archiv finden solltest, oder auch das
angesprochene Beispiel des PB Editors, wobei das natürlich etwas
komlizierter zu durchschauen ist.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@Calloway
Der source mit API-Funktionen ist soweit angepasst, so das du
damit Buchstaben, Sätze oder Wörter färben, austauschen oder sogar
einen Font vergeben kannst. Ich hoffe du kannst es brauchen.

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten