Seite 1 von 2

Word Wrap nach X Zeichen

Verfasst: 01.04.2010 20:42
von CSHW89
Hey Leute,
ich möchte gerne mein EditorGadget so haben, das es nach genau X zeichen in der nächsten zeile schreibt. also so ne art word wrap. allerdings sollen leerzeichen ect. keine rolle spielen. also so was z.b.:

Code: Alles auswählen

So möcht
e ich da
s haben
hab mir schon 'EM_SETWORDBREAKPROC' angeschat. aber ka wie das funzt. vielleicht bin ich auch nur zu blöd dazu. hat jemand ne idee oder direkt ein beispiel.
danke schon mal
lg kevin

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 21:59
von CSHW89
na gut, um es vielleicht ein wenig einfacher zu machen:

der font ist 'courier'. d.h. die breite des textes ist in jeder zeile immer gleich. und mein editorgadget könnte ich auch so verkleinern, dass nur noch die gewünschte anzahl an zeichen in eine zeile passt. aber wie gesagt. er wrapt auch bei einem leerzeichen. kann man das nicht i-wie ausschalten.

lg kevin

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 22:03
von ts-soft
Eine solche API-Funkton gibt es nicht, dafür mußte Dir schon was selber basteln.

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 22:29
von CSHW89
oh nööööööööööö >_< . ich hab geahnt das so was passiert.

na gut, dann ne andere frage, wie könnte ich am besten einzelne characters entfernen bzw. hinzufügen ohne 'EM_REPLACESEL' zu benutzen.

lg kevin

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 22:41
von ts-soft
Im Callback #WM_CHAR abfangen, Zeichen zählen und wenn die Zeile voll ist, ein #CRLF$ einfügen, damit es umbricht.

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 22:47
von CSHW89
das funktioniert ist kein thema, mir macht das 'einfügen' probleme. da ja die zeilenumbrüche dann an einer anderen stelle sein können. dann muss ich alle umbrüche entfernen und an anderer stelle einfügen. das möchte ich möglichst schnell erledigen. also ohne text zu selektieren.

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 23:20
von ts-soft
Als Anfang, aber hoch und runter bewegungen mußte noch einbauen :mrgreen:

Code: Alles auswählen

Procedure EditCB(hwnd, msg, wparam, lparam)
  Protected result, oldcb, item, text.s
  Static count
  oldcb = GetProp_(hwnd, "oldcb")
  result = CallWindowProc_(oldcb, hwnd, msg, wparam, lparam)
  Select msg
    Case #WM_CHAR
      
      Select wparam
        Case #VK_RETURN
          item = CountGadgetItems(0) - 2
          text = GetGadgetItemText(0, item)
          text = RemoveString(text, #LF$)
          RemoveGadgetItem(0, item)
          AddGadgetItem(0, -1, text)
         Default
          count + 1
          If count = 10
            count = 0
            AddGadgetItem(0, -1, "")
          EndIf
      EndSelect

  EndSelect
  ProcedureReturn result
EndProcedure


OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "", #PB_Window_SystemMenu)
EditorGadget(0, 5, 5, 630, 470)
SetProp_(GadgetID(0), "oldcb", SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @EditCB()))

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
RemoveProp_(GadgetID(0), "oldcb")
CloseWindow(0)

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 23:31
von CSHW89
das funktioniert doch so weit bei mir.
nur das EINFÜGEN nicht. das krieg ich denk ich schon i-wie hin. ich möchte nur wissen, ob es nicht eine einfache möglichkeit gibt, ein bestimmtes zeichen (ich weiß auch wo es ist) zu löschen und ein zeichen an einer bestimmten stelle einzufügen ohne ein text zu selektieren (bruacht nämlich zeit und produziert zu viele events)
lg kevin

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 23:47
von TomS

Code: Alles auswählen

text.s = "abcdefghi"
;text.s = GetGadgeText() 
pos.i = 5

text = Left(text,pos-1) + Right(text,Len(text)-pos) ;Zeichen an Position löschen
Debug text
;SetGadgetText()

text = Left(text,pos-1) +"X"+ Right(text,Len(text)-pos+1) ;Zeichen an Position einfügen
Debug text
;SetGadgetText()
Oder was meinst du mit "wo es ist"?
Die Position oder zwischen < und >?

Re: Word Wrap nach X Zeichen

Verfasst: 01.04.2010 23:56
von CSHW89
wie ich ein zeichen in einem string einfügen kann, sollte ich schon können. :freak:

ich hab ein EditorGadget, sagen wir mal mit 10000 zeilen. nun möchte ich schnell alle zeilenumbrüche löschen und sie an einer anderen position setzen. und das SCHNELL, ich dachte, es gibt eine api-message, mit der ich ein zeichen an einer bestimmten stelle löschen bzw. einfügen kann.