Skocz do zawartości

[Delphi] problem - RichEdit a kolor czcionki


Arthan

Polecane posty

Mój problem wygląda następująco:

Mam na Formie dwa komponenty RichEdit i Button i program ma działać w ten sposób że po kliknięciu na przycisk w RichEdit dopisuje się literka "a" o losowo wybranym kolorze dla tej literki.
Jak na razie udało mi się stworzyć coś takiego w kodzie przycisku:

[delphi][/delphi]

Jednak nie działa to tak jak powinno bo przy kilku literkach wszystkie mają taki kolor jak pierwsza za wyjątkiem ostatniej literki. Ktoś mi doradził żebym po ustawieniu koloru literce zmieniał go z powrotem na czarny, ale to nic nie zmieniało. Coś robię nie tak i nie wiem co sad.gif

Link do komentarza
Udostępnij na innych stronach

hehe... mnie nie chodzi w ogólę o to losowanie go może nawyt nie być ... zależy mi tylko na tym aby zmieniały się w RichEdicie kolory bez ingerencji użytkownika. To w zasadzie jest tylko przykład aby nie zaśmiecać forum.. mój program to klient telnetu i własnie próbuje w nim zrobić kolory wszystko działa za wyjątkiem tego. Randomize dałem tam po prostu żeby skrócić kod nie sądze żeby to cokolwiek pomogłojeśli umieszcze go przy metodzie Create. Nie mam w tej chwili delphi bo nie jestem u siebie więc nie mogę tego sprawdzić, ale moim zdaniem w zły sposób zaznaczam albo później odznaczam ten tekst. Co do Randomize to jeśli się nie myle to tym poleceniem inicjuje się bęben losujący dla naszego programu.. i co za różnica ile razy nim zakręce?? co prawda tak nie powinno się robić gdyż jest to nie potrzebne i zajmuje tylko czas ale to nie jest mój problem. Gdy uruchamiam mój program kolor losuje się dobrze widać że ostatnia literka zmienia kolor.. lecz później przy kolejnym przyciśnięciu przycisku zmienia swój kolor na kolor pierwszej literki.

Próbowałem również z ustawieniem najpierw focusu na RichEdita... a także nieco inne sposoby dodawania literki "a" np. przez RichEdit.Lines... jak równiez w odwrotnej kolejności tzn. ustawić żeby od miejsca skończenia tekstu był kolor wylosowany i wtedy dodać literkę następną.
Jak ort! nie dało mi to nic :/ jedynie w skrajnych przypadkach wcale nie kolorowało sad.gif

Tak czy inaczej dziękuję za zainteresowanie problemem wink.gif

Link do komentarza
Udostępnij na innych stronach

[quote] Jeśli chodzi o to randomize to sie mylisz, randomize powinno być wywyołane tylko RAZ w CAŁYM programie inaczej bedziesz ci losować ciągle tą SAMĄ liczbe. [/quote]

Mnie się wydaje że jest inna ale jeszcze to sprawdzę jak tylko dotrę do domu wink.gif

Link do komentarza
Udostępnij na innych stronach

CYTAT(Blind @ wto, 13 lut 2007 - 10:53) Jeśli chodzi o to randomize to sie mylisz, randomize powinno być wywyołane tylko RAZ w CAŁYM programie inaczej bedziesz ci losować ciągle tą SAMĄ liczbe.

więc dotarłem.. sprawdziłem i zacytuje ...
[quote] Description
Randomize initializes the built-in random number generator with a random value (obtained from the system clock). [/quote]

Cóż mogę powiedzieć.. to jednak Ty się mylisz chodź po części masz rację. wink.gif
Randomize do generowania liczb losowych używa zegara systemowego co w rezultacie skutkuje tym, że jeśli wywołuje się ją w tej samej sekundzie kilka razy to wylosuje tą samą liczbę... jednak jeśli w następnej sekundzie to wylosuje się już inna.. nie wiem jak Ty ale ja wciskam przycisk średnio od 1 do 2 razy na sekundę tak więc po kilku wciśnięciach musi zostać wygenerowana inna liczba.
dla celów edukacyjnych zamieszczam nieco przerobiony mój kod:
[code=Delphi]
procedure TForm1.Button1Click(Sender: TObject);
begin
RandoZ^NH[JĘHXY]K^HXY]K^
b33łb33łŁ&6VFCFWBŁ&6VFCFWBb33łb3(IĄQIĄQŹ))nd;
[/code]
Zyskaliśmy ładnie wyglądający kod i nawet działa losowanie w tej samej sekundzie, które mi do niczego nie jest potrzebne, natomiast ja widzę nadal ładny jednokolorowy rządek literek wink.gif (nie licząc ostatniej literki). Cóż wróciliśmy do punktu wyjścia :/

Link do komentarza
Udostępnij na innych stronach

[quote] Randomize; inicjuje zmienną RandSeed, która używana jest przez funkcję Random. Randomize powinno się wywołać jedynie raz w programie, aby Random zwracało pseudolosowe wartości. Kropka. [/quote]

Bardzo ładne podsumowanie wink.gif skoro już skończyliśmy o tym zajmijmy się tym RichEditem może ?? tongue.gif

Link do komentarza
Udostępnij na innych stronach

Jeszcze jedno... jeśli ktoś kiedyś by chciał to w jakiś sposób wykorzystać, da się ten kod nieco skrócić co najmniej dwie linijki są nie potrzebne moim zdaniem:
[code=Delphi]
RichEdit1.SelStart := Length(RichEdit1.Lines.Text);
RichE]K[[HH[JĘHXY]K[GG&'WFW26Ć\"Ł6&VS&6VFC6VGG&'WFW26ąąeąą(IĄMąŃŃŃ
ąąeen;
end;
RichEdit1.SelText := 'a';
[/code]
Tyle w zupełności powinno wystarczyć smile.gif

Jeszcze raz wielkie DZIĘKI dla KKKas'a za rozwiązanie problemu i dla Blind'a w końcu On też miał swój udział w tym przedsięwzięciu wink.gif

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...