Ja mniej więcej wiem o co mu chodzi. Właśnie kończę kodzić rozwiązanie z TListBoxem
, ale to tylko jako podgląd. Bo tutaj można użyć innych komponentów. Kiedy skończę wyedytuje jeżeli nie będzie nowych postów. I dodam załącznik z kodem oraz exekiem pod Delphi 7.
EDIT: w załączniku moja propozycja. Sprawdzanie poprawności danych lub ewentualnie parsowanie za pomocą RegExpr to już sobie sam zrób. Jeżeli przy wciskaniu klawiszy innych niż góra/dół ma się nic nie dziać to wywal to co po else
. A i ponieważ standardowo pod Delphi 7 TListBox
zachowuje się przy kliknięciu tak jakbyśmy robili też wciskanie klawiszy czyli chyba jest wywoływany również komunikat LBN_SELCHANGE
. I wtedy OnKeyDown działa powrotnie tylko gdy najedziemy klawiszami na item o indeksie zero i znowu zaczniemy naciskać klawisze. Teraz jest już raczej ok.
Zatem musiałem subclassować ListBoxa aby na pewno reagował do pokazywania opisów w nawiasach tylko wtedy gdy na prawdę zachodzi komunikat klikania WM_LBUTTONDOWN
. Chyba nie da się kliknąc poza wiersz, ale w razie czego jest to i tak zabezpieczone. Jeśli ma się nie pokazywać pusty wiersz przy klinaniu wierszy które nie mają nic w nawiasach, to sobie dorób warunek po else
w procedurze obsługi komunikatów. Nie chciało mi się robić subclassingu przez własną klasę dziedziczącą po TListBox
by później mieć konwersję z Handle rodzica na obiekt, więc tam na szybko jest użyta nazwa komponentu jaką proponuję.
Kod jest jako pogląd, masz bazę do dalszych samodzielnych kominowań. Bo to co chcesz osiągnąć można rozwiącać pewnie też inaczej. Ale ja tak zrobiłem na szybko. Wedle mnie jak najprościej się dało chyba. A i na przyszłość pisz jaśniej, bo z opisu domyśliłęm się co mniej więcej chcesz osiągnąć. Ale nie napisałeś, co się ma robić gdy wciskamy inny klawisz niż góra/dół. A co się ma dziać gdy wiersz nie ma opisu w "ostrych" nawiasach. Takie coś trzeba opisywać jak najdokładniej i najlepiej z przykładami. Poza tym przykładową treść pliku wejściowego najlepiej podać w znacznikach code
.