Problem Gelöst ! Hintergrund Farbe ermitteln Editor Text

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
N00B
Beiträge: 122
Registriert: 11.07.2007 22:28

Problem Gelöst ! Hintergrund Farbe ermitteln Editor Text

Beitrag von N00B »

EDIT: Problem gelöst ! Code geht, hab nur einen kleinen Fehler drin gehabt im Test Fetzen unten.

Ich Peife hab

SetFontBackColorForEditorSelection(#Editor,$000000)

gesetzt (was ja schwarz ist) und bei Schwarz kommt immer 0 raus !

--------------------------------------------------------------------

Hi

Ich versuche mit folgendem Code (Hab ich mir teils zusammen gesucht und zusammen gebastelt, Danke an die Herausgeber :) )

Code: Alles auswählen

  #CFM_BACKCOLOR = $4000000
  
  Procedure.l GetFontBackColorForEditorSelection(GID)
    
    format.CHARFORMAT2\cbSize = SizeOf(CHARFORMAT2)
    format\dwMask = $4000000   ; = #CFM_BACKCOLOR
    SendMessage_(GadgetID(GID), #EM_GETCHARFORMAT ,#SCF_SELECTION, @format)
    
    If format
      Font_Name.s         = PeekS(@format\szFaceName)
      Font_Style          = format\dwMask
      Font_Size           = format\yHeight/20
      Font_Color.l        = format\crTextColor
      Font_BackColor.l    = format\crBackColor 
    EndIf 
    
    Debug Font_Color
    Debug Font_BackColor
    Debug format\crBackColor
    
    If Font_BackColor
      ProcedureReturn Font_BackColor
    EndIf
    
  EndProcedure
Die Hintergrund Farbe einer selektion zu ermitteln, aber irgendwie bleibt
format\crBackColor b.z.w Font_BackColor immer leer. (BS XP SP3, PB5.31)

Font_Color. und format\crTextColor funzen, die brauch ich aber nicht.

Hier mal ein Testschnipsel.

Code: Alles auswählen

  
  ;/ WIN
  Enumeration
    #MainWin
  EndEnumeration
  
  ;/ GADGET
  Enumeration
    #Editor
    #Button
  EndEnumeration
  
  #CFM_BACKCOLOR = $4000000
  #CFE_AUTOBACKCOLOR = #CFM_BACKCOLOR
  
  
  Procedure Editor_Select(GNR,x1,y1,x9,y9)
    Protected Selected.CHARRANGE ,GID
    GID=GadgetID(GNR)
    Selected\cpMin = SendMessage_(GID, #EM_LINEINDEX, y1, 0) + x1 - 1   ;Anz. aller Zeichen vor Y1
    If y9 = -1 : y9 = SendMessage_(GID, #EM_GETLINECOUNT, 0, 0)-1 : EndIf
    Selected\cpMax = SendMessage_(GID, #EM_LINEINDEX, y9, 0)  ;Anz. aller Zeichen vor Y9
    If x9 = -1 :
      Selected\cpMax + SendMessage_(GID, #EM_LINELENGTH, Selected\cpMax, 0)
    Else
      Selected\cpMax + x9 - 1
    EndIf
    SendMessage_(GID, #EM_EXSETSEL, 0, @Selected)  ;selectiert alle Zeichen cpMin bis cpMax
    ;SendMessage_(GID, #EM_SETSEL, $FFFFFFF, $FFFFFFF)
  EndProcedure
  
  Procedure SetFontBackColorForEditorSelection(GNR, Color.l)
    Structure CHARFORMAT2_BC
      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
    ;Protected 
    format.CHARFORMAT2_BC
    format\cbSize = SizeOf(CHARFORMAT2_BC)
    format\dwMask = $4000000   ; = #CFM_BACKCOLOR
    format\crBackColor = Color
    SendMessage_(GadgetID(GID), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
  EndProcedure 
    
  Procedure.l GetFontBackColorForEditorSelection(GID)
    
    format.CHARFORMAT2\cbSize = SizeOf(CHARFORMAT2)
    format\dwMask = $4000000   ; = #CFM_BACKCOLOR
    SendMessage_(GadgetID(GID), #EM_GETCHARFORMAT ,#SCF_SELECTION, @format)
    
    If format
      Font_Name.s         = PeekS(@format\szFaceName)
      Font_Style          = format\dwMask
      Font_Size           = format\yHeight/20
      Font_Color.l        = format\crTextColor
      Font_BackColor.l    = format\crBackColor
      
      Debug "bla"
      
    EndIf 
    
    Debug Font_Color
    Debug Font_BackColor
    Debug format\crBackColor
    
    If Font_BackColor
      ProcedureReturn Font_BackColor
    EndIf
    
  EndProcedure
  
  OpenWindow(#MainWin,0,0,500,400,"New Prog",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  
  ButtonGadget(#Button,10,10,100,20,"test")
  EditorGadget(#Editor,10,40,300,200)
  AddGadgetItem(#Editor,-1,"bla11111111111") 
  AddGadgetItem(#Editor,-1,"bla22222222222") 
  AddGadgetItem(#Editor,-1,"bla33333333333") 
  AddGadgetItem(#Editor,-1,"bla44444444444") 
  AddGadgetItem(#Editor,-1,"bla55555555555") 
  
  SetGadgetColor(#Editor,#PB_Gadget_FrontColor,$8000FF) 
  
  Row = 2
  Editor_Select(#Editor,1,Row,-1,Row) ;wählt eine komplette Zeile aus
  SetFontBackColorForEditorSelection(#Editor,$000000)
  
  Debug GetFontBackColorForEditorSelection(#Editor)
  
  
  Repeat 
    
    Event = WaitWindowEvent()  
    
    If Event = #PB_Event_Gadget
      
      EventGadget = EventGadget()
      
      If EventGadget = #Button
        
        Font_BackColor = GetFontBackColorForEditorSelection(#Editor)
        
        If Font_BackColor
          SetGadgetColor(#Editor,#PB_Gadget_FrontColor,$000000) ; alle farben zurück stellen
          MessageRequester("","")
          Delay(500)
          SendMessage_(GadgetID(#Editor), #EM_SETSEL, Len(GetGadgetText(#Editor)), 0) ; alles markieren
          SetFontBackColorForEditorSelection(#Editor,Font_BackColor)
        EndIf 
        
      EndIf 
     
    EndIf 
    
    If Event = #PB_Event_CloseWindow
      Break
    EndIf
    
  ForEver  
ps: Die Boardsuche schmeist kein einziges Ergebniss für CFM_BACKCOLOR
raus, aber google.

https://www.google.de/search?num=100&si ... _BACKCOLOR