Seite 1 von 1

String Font

Verfasst: 19.04.2005 16:58
von Konne
Wie kann ich aus einem Stringgadget die Formatrerung des Textes mit auslesen?

Wenn es eine Lösung geben sollte bin ich seh dankbar

PS: Die Funktion sollte auch mehrere Farbwerte auslesen können

Verfasst: 19.04.2005 19:33
von Lukas-P
wie willst du den den Text Formatieren?

Verfasst: 19.04.2005 19:53
von Konne
Sorry hab mich verschrieben meinte Editorgadget (oh man Blackouts gibts) die Proceduren heißen:

Code: Alles auswählen

 Procedure Editor_FontSize(Gadget, FontSize.l) 
   format.CHARFORMAT 
   format\cbSize = SizeOf(CHARFORMAT) 
   format\dwMask = #CFM_SIZE 
   format\yHeight = FontSize * 20 
   SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
 EndProcedure 

Procedure Editor_Font(Gadget, FontName.s) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_FACE 
  PokeS(@format\szFaceName, FontName) 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

Procedure Editor_FontColor(Gadget, Color.l) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_COLOR 
  format\crTextColor = Color 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

Procedure SetTextOptions(Gadget,red,green,blue,font.s,fontsize) 
 Editor_Font(Gadget, font.s)
 Editor_FontColor(Gadget,RGB(red,green,blue))
 Editor_FontSize(Gadget, fontsize)
EndProcedure 

Verfasst: 19.04.2005 20:32
von MJP
Das würde ich auch gerne wissen wie das geht... :mrgreen:

Verfasst: 19.04.2005 21:31
von Konne
MJP wie bist du den druff^^ Naja wenigstens abrbeitest du was im gegensatzt zu Max^^ :allright:

Verfasst: 20.04.2005 06:49
von DarkDragon
Du kannst doch einfach den Courser über ein Zeichen bewegen(Selektierungsprozeduren gibt es zu genüge im CodeArchiv) und dann mit SendMessage_(GadgetID(Gadget), #EM_GETCHARFORMAT, #SCF_SELECTION, @format) die Formatierung auslesen.

Verfasst: 25.04.2005 16:39
von Konne
Danke für den Tipp mit dem Textmarkieren das bekomme ich jetzt auch schon gut hin jetzt hab ich nur noch das "kleine" Problem das ich jetzt keine Ahnung hab wie ich daraus zB die Schriftfarbe ermitteln kann. ICh hab jetzt schon tagelang gesucht und rumprobiert kriegs aber einfach net hin .
Könnte vielleicht irgendjeman eine Procedure posten, der man die GadgetID übergibt und die dann die Formatierung zurückgibt.

Bidde bidde helft mir :praise: :praise: :praise: :praise: :praise: :praise: :praise:

Verfasst: 29.04.2005 18:09
von MJP
Also ich hab auch ein bissi was probiert :mrgreen:
Hab dabei das Codearchive benutzt 8)
So jetzt hab ich genau das selbe problem wie der Konne... Wie lese ich das ganze aus und kann die Farbe einstellen???

Code: Alles auswählen

Declare WndProc(hWnd, uMsg, wParam, lParam) 

Structure ENLINK 
  nmhdr.NMHDR 
  msg.l 
  wParam.l 
  lParam.l 
  chrg.CHARRANGE 
EndStructure 

Structure CHARFORMAT2 
  cbSize.l 
  dwMask.l 
  dwEffects.l 
  yHeight.l 
  yOffset.l 
  crTextColor.l 
  bCharSet.b 
  bPitchAndFamily.b 
  szFaceName.b[#LF_FACESIZE] 
  _wPad2.w 
  wWeight.w 
  sSpacing.w 
  crBackColor.l 
  lcid.l 
  dwReserved.l 
  sStyle.w 
  wKerning.w 
  bUnderlineType.b 
  bAnimation.b 
  bRevAuthor.b 
  bReserved1.b 
EndStructure 

#EN_LINK = $70b 
#ENM_LINK = $4000000 
#CFM_LINK = $20 
#CFE_LINK = $20 

Procedure WndProc(hWnd, uMsg, wParam, lParam) 
  result = #PB_ProcessPureBasicEvents 
  Select uMsg 
    Case #WM_NOTIFY 
      *el.ENLINK = lParam 
      If *el\nmhdr\code=#EN_LINK 
        If *el\msg=#WM_LBUTTONDOWN 
          StringBuffer = AllocateMemory(512) 
          txt.TEXTRANGE 
          txt\chrg\cpMin = *el\chrg\cpMin 
          txt\chrg\cpMax = *el\chrg\cpMax 
          txt\lpstrText = StringBuffer 
          SendMessage_(GadgetID(0), #EM_GETTEXTRANGE, 0, txt) 
          Debug PeekS(StringBuffer) 
          FreeMemory(0) 
        EndIf 
      EndIf 
  EndSelect 
  ProcedureReturn result 
EndProcedure 

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget, "PureBasic Window")=0:End:EndIf 
If CreateGadgetList(WindowID())=0:End:EndIf 
EditorGadget(0, 0, 0, WindowWidth(), WindowHeight()) 
SendMessage_(GadgetID(0), #EM_SETEVENTMASK, 0, #ENM_LINK|SendMessage_(GadgetID(0), #EM_GETEVENTMASK, 0, 0)) 
 
 If LoadFont(0,"Arial",10)
      SetGadgetFont(0,FontID())
 EndIf 

Colors.l=RGB(222,111,11)
EditorText$ = "I don't wanna be a link,"+Chr(10)+"but I am a link,"+Chr(10)+"what do you think?" 
Link$ = "I am a link" 
SetGadgetText(0, EditorText$) 
Start = FindString(EditorText$, Link$, 1) 

SendMessage_(GadgetID(0), #EM_EXGETSEL, 0, chr.CHARRANGE) 
SendMessage_(GadgetID(0), #EM_HIDESELECTION, #TRUE, 0) 
SendMessage_(GadgetID(0), #EM_SETSEL, Start-1, Start+Len(Link$)-1) 
cf.CHARFORMAT2 
cf\cbSize = SizeOf(CHARFORMAT2) 
SendMessage_(GadgetID(0), #EM_GETCHARFORMAT, #SCF_SELECTION, cf) 

cf\cbSize = SizeOf(CHARFORMAT2)   
cf\dwMask|#CFM_BOLD | #CFM_COLOR |#CFM_SIZE |#CFM_FACE   ;|#CFM_LINK
cf\dwEffects |#CFM_BOLD | #CFM_COLOR |#CFM_SIZE        |#CFM_ITALIC   ;|#CFM_LINK
cf\yHeight=150
cf\crTextColor=Colors
SendMessage_(GadgetID(0), #EM_SETCHARFORMAT, #SCF_SELECTION, cf) 

cf\cbSize = SizeOf(CHARFORMAT2) 
SendMessage_(GadgetID(0), #EM_GETCHARFORMAT, #SCF_SELECTION, cf)  

SendMessage_(GadgetID(0), #EM_EXSETSEL, 0, chr) 
SendMessage_(GadgetID(0), #EM_HIDESELECTION, #FALSE, 0) 
SetWindowCallback(@WndProc()) 
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow 
End 
Wie geht was hier...Link:http://msdn.microsoft.com/library/defau ... ormat2.asp
THx 4 Help MJP :allright:

Verfasst: 30.04.2005 21:26
von Andre
Schonmal die neue UserLib "LibEditorPlus" probiert ?

Gibts im Showcase auf www.PureArea.net :wink: