Przewijanie tekstu w RichTextBox

0

Witam
Mam komponent dziedziczący po rtb

    public class TransparentRichTextBox : RichTextBox
    {
        public TransparentRichTextBox()
        {
            base.ScrollBars = RichTextBoxScrollBars.None;
        }

        override protected CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x20;
                return cp;
            }
        }

        override protected void OnPaintBackground(PaintEventArgs e)
        {
        }
    } 

Jak zrobić aby tekst płynął z prawej w lewo(w kierunku czytania)
w timerze o 1 piksel z możliwością regulacji ticka?
nie zmieniając pozycji ani szerokości mojego RTB

1

1: Dziedziczenie (jeśli wierzyć somekindowi, a ja wierzę) z klas nieabstrakcyjnych to zło. (edit, bo komentarz się nie mieści: Nie jest tak żebym dla zasady dziedziczył tylko z abstrakcyjnych klas. Ale od kiedy się zacząłem nad tym zastanawiać zamiast klepać automatycznie zawsze dochodzę do wniosku że model z klasą abstrakcyjną jakby bardziej pasuje.)
2: Żadnego (co wynika również z powyższego punktu) ładnego rozwiązania nie ma. Jeśli darujesz sobie ten 1 px to możesz po prostu usuwać pierwszy znak z tekstu.
3: Możesz, jeśli 1px jest ci konieczny, darować sobie prostotę kodu i ew. napisać potworka zmieniającego kolor 1-go znaku na kolor tła i zmniejszający jego rozmiar w każdym ticku aż "zniknie" i zajmiesz się kolejnym. Przecież pisałem że potworka.
4: Możesz darować dobie Rich i dziedziczyć z TextBoxBase, wtedy wszystko będzie prostsze.
5: Możesz wpaść na genialny pomysł jak to zrobić, napisać o tym na forum i mnie uświadomić o nieznanym mi sposobie.

0
MSM napisał(a)

1: Dziedziczenie (jeśli wierzyć somekindowi, a ja wierzę) z klas nieabstrakcyjnych to zło.

To stwierdzenie dotyczy głównie modelu dziedziny czy logiki aplikacji.
W świecie WinFormsów nieraz jest przydatne. A czasem po prostu niezbędne (bo np. designer nie obsługuje klas abstrakcyjnych :/).

Prim0 napisał(a)

Jak zrobić aby tekst płynął z prawej w lewo(w kierunku czytania)
w timerze o 1 piksel z możliwością regulacji ticka?
nie zmieniając pozycji ani szerokości mojego RTB

Jeszcze się nad tym zastanowię, ale na moje oko to raczej niewykonalne. TextBox jest od literek, nie pikseli. Należałoby raczej wygenerować tekst jako grafikę i ją przesuwać...

Wydaje mi się to też zbędne - czemu przesuwać po pikselu a nie po literze? Kto zauważy różnicę?

0
somekind napisał(a)

Wydaje mi się to też zbędne - czemu przesuwać po pikselu a nie po literze? Kto zauważy różnicę?

A kto nie zauważy / chyba wszyscy zauważą
Czyli daruję sobie rtb łykam rtfy rysuję grafikę i przesuwam
Jedyne z czym trzeba się bujać to klasa która ręcznie rozparasuje rtfy
Dzięki za pomoc

1

Skoro już chcesz to zrobić w taki sposób... Chyba nie będziesz sam parsował tych rtf-ów...

Użyj metody .DrawToBitmap() kontrolki RichTextBox (i każdej innej) i wyświetlaj bitmapę przesuniętą. Wynik wyświetlaj w pictureboxie albo na panelu.

0
MSM napisał(a)

Skoro już chcesz to zrobić w taki sposób... Chyba nie będziesz sam parsował tych rtf-ów...

Użyj metody .DrawToBitmap() kontrolki RichTextBox (i każdej innej) i wyświetlaj bitmapę przesuniętą. Wynik wyświetlaj w pictureboxie albo na panelu.

Problem w tym że dla innych kontrolek mam taką metodę a dla RichTextBox nie / Nie wiem dlaczego ?

Ręcznie parasować nie będę musiał
znalazłem takie cosik http://nrtftree.sourceforge.net/

0
Prim0 napisał(a)

Nie wiem dlaczego ?

Nie wiesz, bo nie czytasz dokumentacji: http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.drawtobitmap.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1