GeirGrusom Skrevet 31. januar 2007 Del Skrevet 31. januar 2007 Sånn før jeg begynner å skrive min egen RTF-renderer, er det noen som vet om det er en enkel metode å rendre RTF tekst til et Graphics objekt, uten å bruke RichTextBox? Hvis ikke, må jeg skrive min egen, og da kunne jeg spart maaaaassse tid. Lenke til kommentar
Manfred Skrevet 2. februar 2007 Del Skrevet 2. februar 2007 Jeg sleit med dette i 1.1 i alle fall, og fant egentlig ikke noen løsning på det. Så det endte med at vi skrev en hel renderer selv, for å få til en RTF-utskrift. Lykke til Lenke til kommentar
GeirGrusom Skrevet 2. februar 2007 Forfatter Del Skrevet 2. februar 2007 Takk, da har jeg begynt med det. Har RTF 2007 dokumentasjon Og jeg har løst det ved å lage en Linked list for hver linje, og hver linje er en array med objekter, som kan være et stykke med Tekst med formatering, et bilde, eller en tabell. Tabellen er ganske uferdig enda, jeg har ikke funnet noen god løsning på dette enda. Takk for svar Lenke til kommentar
j000rn Skrevet 2. februar 2007 Del Skrevet 2. februar 2007 Takk, da har jeg begynt med det.Har RTF 2007 dokumentasjon Og jeg har løst det ved å lage en Linked list for hver linje, og hver linje er en array med objekter, som kan være et stykke med Tekst med formatering, et bilde, eller en tabell. Tabellen er ganske uferdig enda, jeg har ikke funnet noen god løsning på dette enda. Takk for svar 7854519[/snapback] Og dere post'er vel koden når den er ferdig? Lenke til kommentar
GeirGrusom Skrevet 3. februar 2007 Forfatter Del Skrevet 3. februar 2007 Urgh! Mye jobb Begynner å komme seg nå, jeg kan redigere tekst, endre font, og trykke enter for å lage en ny linje. (delete fungerer ikke enda ) Tabeller er ganske uferdig enda though. Lenke til kommentar
GeirGrusom Skrevet 3. februar 2007 Forfatter Del Skrevet 3. februar 2007 Ok, nytt problem: Når jeg nå trykker piltastene på min RichTextBox kontroll, så vil alltid ScrollBarene begynne å bevege seg, istedet for Caret... hvordan overrider jeg det? Lenke til kommentar
GeirGrusom Skrevet 10. februar 2007 Forfatter Del Skrevet 10. februar 2007 (endret) Jeg har funnet svaret på mitt eget spørsmål: Hvordan få tak i piltastene uten at scrollbarene kødder det til (inkludert tab) protected override bool IsInputKey(Keys key) Returner true i denne funksjonen hvis kontrollen din tar imot den tasten. edit: Lag en ny klasse som inheriter HScrollBar og VScrollBar og legg til dette, for å hindre scrollbar i å være latterlig irriterende. Endret 10. februar 2007 av GeirGrusom Lenke til kommentar
GeirGrusom Skrevet 10. februar 2007 Forfatter Del Skrevet 10. februar 2007 (endret) Hehe, gir ut et skryte-screenshot av RtfEditor kontrollen min Den er laget av en annen klasse, som heter RtfFile Den firkanten på bildet er en tabell, men tabell er ganske uferdig enda. Edit: Enda en oppdatering, RtfTextBox kontrollen min kan nå lage Rtf tekst og filer, som kan leses av Word og Wordpad knirkefritt støtter unicode Litt jobb enda med velging av tekst, men det kommer seg, bare Rtf parseren igjen. Endret 11. februar 2007 av GeirGrusom Lenke til kommentar
ze5400 Skrevet 11. februar 2007 Del Skrevet 11. februar 2007 Sikkert et dumt spørsmål detta, men hva benytter du for å tegne opp kontrollen? System.Drawing på et panel eller noe sånt? Lenke til kommentar
GeirGrusom Skrevet 12. februar 2007 Forfatter Del Skrevet 12. februar 2007 Jeg laget en UserControl som overider IsInputKey() får å gjøre sånn at den kan ta imot Tab, Enter og Piltaster. Resten blir tegnet med System.Drawing.Graphics. Jeg bruker CreateGraphics for å tegne opp linjen man endrer (for å få opp hastigheten), mens resten blir tegnet i Paint event (for å slippe flimring) Og scrollbarene bruker Graphics.ScreenCopy(eller hva den nå het igjen) også pga. hastighet Lenke til kommentar
GeirGrusom Skrevet 13. februar 2007 Forfatter Del Skrevet 13. februar 2007 Huja! Jeg kan skrive Rtf dokumenter i min egen rtf edtitor som både Word 2007 og Wordpad leser! Men parseren.... Vel, jeg har laget en klasse: public class RtfSegment { protected string m_controlword; protected bool m_value; protected bool m_parent; // Will this be a list? ( e.g. fonttbl, colortbl ) protected RtfSegmentFunction m_parser; // Parser function delegate public bool IsParent { get { return m_parent; } } public bool IsValue { get { return m_value; } } public string ControlWord { get { return m_controlword; } } public RtfSegment(string controlword, bool parent, bool value, RtfSegmentFunction parser) (...) public RtfSegment(string controlword, bool parent, RtfSegmentFunction parser) (...) public RtfSegment(string controlword, RtfSegmentFunction parser) (...) public override string ToString() (...) } Denne klassen inneholder iogforseg ingen parse kode, men hver definerer et controlword/controlcharacter og spesifiserer en funksjon i parseren som skal kalles, hver gang disse control word/char støtes på i filen... jeg får litt problemer med { } grunnet at jeg ikke heeeelt forstår hva i svarte de er til... det står "pushes the stack" eller noe sånt skit i dokumentasjonen, noen som vet? problemet ligger i om jeg må skrive en recursive funskjon read eller ikke, helst ikke, recursive funksjoner er fandens barn, og unngås hvis det er mulig. Lenke til kommentar
kaffenils Skrevet 13. februar 2007 Del Skrevet 13. februar 2007 Ok, nytt problem:Når jeg nå trykker piltastene på min RichTextBox kontroll, så vil alltid ScrollBarene begynne å bevege seg, istedet for Caret... hvordan overrider jeg det? 7863059[/snapback] Offtopic, men jeg spør allikevel. Har .Net innebygde klasser for å tegne carets (tekstmarkør) i Graphics-objekter, eller tegner du den selv? Eller bruker du caret-funksjonene (CreateCaret SetCaretPos etc) i user32.dll? Lenke til kommentar
GeirGrusom Skrevet 14. februar 2007 Forfatter Del Skrevet 14. februar 2007 Jeg tegner den selv, men jeg har vurdert å bytte, siden det bare er en strek som ikke blinker. Men foreløpig har ikke dette vært fokus. Lenke til kommentar
kaffenils Skrevet 14. februar 2007 Del Skrevet 14. februar 2007 Jeg tegner den selv, men jeg har vurdert å bytte, siden det bare er en strek som ikke blinker.Men foreløpig har ikke dette vært fokus. 7939174[/snapback] Har du virkelig tenkt å implementere hele RTF-spesifikasjonen? Det høres ut som en forferdelig mengde med arbeid. Syk, syk mann , men lykke til uansett! Lenke til kommentar
GeirGrusom Skrevet 15. februar 2007 Forfatter Del Skrevet 15. februar 2007 (endret) Jeg har implementert Caret funksjonene, istedet, som du foreslo, så jeg gir ut en Caret klasse, hvis noen er interesert public class Caret : IDisposable { private uint m_ms; private int m_width; private int m_height; private Control m_target; private bool m_visible; private Bitmap m_bmp; [System.Runtime.InteropServices.DllImport("user32")] private static extern int CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight); [System.Runtime.InteropServices.DllImport("user32")] private static extern int ShowCaret(IntPtr hWnd); [System.Runtime.InteropServices.DllImport("user32")] private static extern int HideCaret(IntPtr hWnd); [System.Runtime.InteropServices.DllImport("user32")] private static extern int DestroyCaret(); [System.Runtime.InteropServices.DllImport("user32")] private static extern int SetCaretPos(int x, int y); [System.Runtime.InteropServices.DllImport("user32")] private static extern int GetCaretPos(ref Point p); [System.Runtime.InteropServices.DllImport("user32")] private static extern int SetCaretBlinkTime(uint ms); public Caret(Control target, Bitmap bmp) { m_bmp = bmp; m_target = target; m_width = SystemInformation.BorderSize.Width; m_height = SystemInformation.BorderSize.Height; Create(); } public Caret(Control target) { m_target = target; m_ms = (uint)SystemInformation.CaretBlinkTime; Create(); } public void Destroy() { DestroyCaret(); } public void Create() { CreateCaret(m_target.Handle, (m_bmp == null ? IntPtr.Zero : m_bmp.GetHbitmap()), m_width, m_height); if (m_visible) Show(); else Hide(); } public void Show() { ShowCaret(m_target.Handle); m_visible = true; } public void Hide() { HideCaret(m_target.Handle); m_visible = false; } public bool Visible { get { return m_visible; } set { if (value) Show(); else Hide(); } } public Point Position { get { Point p = new Point(); GetCaretPos(ref p); return p; } set { SetCaretPos(value.X, value.Y); } } public uint BlinkTime { get { return m_ms; } set { m_ms = value; SetCaretBlinkTime(value); } } public int Height { get { return m_height; } set { m_height = value; Create(); } } public int Width { get { return m_width; } set { m_width = value; Create(); } } #region IDisposable Members public void Dispose() { DestroyCaret(); System.GC.SuppressFinalize(this); } #endregion ~Caret() { DestroyCaret(); } } Endret 15. februar 2007 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå