Przyporządkowanie każdej linii RichEdit wartości z ComboBox

0

Witam.
Znowu muszę prosić Was o pomoc.
Potrzebuję każdej linii RichEdit przyporządkować wartość (nie zawartość) z Combobox. Wydaje mi się, że do tego celu najlepsza będzie tablica. Tutaj akurat nie ma za bardzo żadnego problemu.
Wyglądać ma to tak, że gdy wybiorę pewną wartość z Combobox-a i piszę tekst np.w linii 4 RichEdit-a to w tablicy element czwarty przyjmie wartość z Combobox-a. Tak samo gdy zaznaczę jakąś linię i wybiorę wartość z Combobox-a to odpowiednie element tablicy przyjmie wartość z Combobox-a. Problem zaczyna się, przy zaznaczeniu kilku linii. Wtedy to powinno zmienić się kilka elementów tablicy, odpowiadających numerom zaznaczonych linii. Nie wiem, jak to zrealizować. Mogę określić ilość zaznaczonych linii i położenie kursora, ale kursor po zaznaczaniu może być na dole (zaznaczanie z góry na dół) lub na górze (zaznaczanie z góry do dołu) i wtedy nie umiem określić czy mam zaznaczone linie powyżej czy poniżej kursora.
Ma ktoś pomysł jak to zrealizować? Może nie trzeba wcale używać tablicy?
Pozdrawiam

0
ComboBox1.Items.Assign(RichBox1.Lines);
0

Ten kod dodaje do Combobox1 wartości z RichBox(nie wiem jednak co to jest), a nie o to mi chodzi.

0

No to wyjaśnij o co ci chodzi.

0
Znawca tematu napisał(a)

Potrzebuję każdej linii RichEdit przyporządkować wartość (nie zawartość) z Combobox. Wydaje mi się, że do tego celu najlepsza będzie tablica.

Czyli chodzi o to, że komponenty posiadają swoje jakieś tam wartości, a dodatkowa tablica ma przechowywać indeksy itemów z ComboBox, przyporządkowanych do konkretnych linii RichEdit?

0
furious programming napisał(a):

Czyli chodzi o to, że komponenty posiadają swoje jakieś tam wartości, a dodatkowa tablica ma przechowywać indeksy itemów z ComboBox, przyporządkowanych do konkretnych linii RichEdit?

Tak, dokładnie o to mi chodzi.

1

A czy na prawdę nie możesz skorzystać do tego celu z własności Tag komponentów? Bo po to one są, zeby miec gotową, dodatkową własnośc. Nie tylko po to, żeby przechowywać sam integer. Zawsze możesz stworzyć klasę, dziedziczącą po TObject, na przykład o nazwie TMyData. No i w niej zmienną IntTag typu integer do przechowywania tylko samej liczby, tak jak robi to Tag bez rzutowania. Pozostałe zmienne to może być ta tablica, do tego inne potrzebne zmienne. Później tylko tworzysz obiekt i dajesz

JakasKontrolka.Tag := Integer(ZmiennaTypuMyData);

Zaś odczytujesz

ZmiennaTypuMyData := TMyData(JakasKontrolka.Tag);

Tak ja bym zrobił, najprościej i bez zbędnych kombinacji. I sorry, za czytelnośc posta. Ale nie piszę z PC.

3

Jeśli chodzi o sprawdzenie, które wiersze są zaznaczone, to czy liczą się wiersze zaznaczone częściowo? Jeśli tak, to łatwo możesz uzyskać index pierwszego i ostatniego zaznaczonego wiersza:

IndexFirstSelectedRow := RichEdit.Perform(EM_LINEFROMCHAR, RichEdit.SelStart, 0);
IndexLastSelectedRow := RichEdit.Perform(EM_LINEFROMCHAR, RichEdit.SelStart+RichEdit.SelLength, 0); 

Jeśli natomiast liczą się tylko wiersze zaznaczone w całości, to więcej kombinowania, bo trzeba by zliczać znaki z kolejnych wierszy i porównywać z pozycją początku zaznaczenia i końca, wtedy będzie wiadomo, czy zaznaczenie zaczyna się od pierwszego znaku wiersza lub kończy na ostatnim znaku wiersza.

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