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.:
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
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.
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.