Jakiego komponentu użyć do listy kontaktów, takiej jak w komunikatorze?

0

Witajcie,

nieśmiało podchodzę do napisania mini crm-a współpracującego z centralą telefoniczną. Pomyślałem sobie że ładnie wyglądałaby taka aplikacja gdyby była podobna do komunikatora. Na liście kontaktów pojawiałyby się aktualnie aktywne połączenia telefoniczne a operatorzy wybieraliby rozmówce jak wybiera się kontakt w komunikatorach internetowych. Poza tym w trakcie rozmowy otwarta karta użytkownika pozwoliłaby na wprowadzenie notatki z rozmowy.

No i teraz pytanie: jak zrobić taką listę? Myślałem o jakiejś odmianie dbgrida, mam jednak problem z ładnym dynamicznym odświeżaniem takiego komponentu no chyba że macie na to jakiś ekstra sposób aby nowe rekordy w bazie danych "płynnie" się dopisywały do grida a już nieaktywne znikały?
Myślałem też o zwykłej liście, tutaj mam większe możliwości odświeżania danych ale znowu obsługa jest mniej wygodna że tak powiem.

Dlatego pytam czy wiecie może jak to robią autorzy komunikatorów?

Pozdrawiam
Robert

4

VirtualStringTree albo ListBox np. No i niestety bez programowania się nie obejdzie.

0

Albo jak wyżej albo TFrame + ScrollBox.

0

Dzięki za sugestie. Muszę sprawę przemyśleć mocno.

1

Dokładnie - bez programowania nie ma programowania;

Jeśli bardzo byś chciał mieć listę kontaktów ze swoim własnym wyglądem, to polecam prostego TListBox z oprogramowanym zdarzeniem OnDrawItem; Najlepiej by było stworzyć nowy komponent, bazując na podstawowej klasie, do którego zaimplementujesz "wewnętrznie" obsługę struktury kontaktów, gdzie jeden kontakt będzie posiadał kilka informacji, prócz wyświetlanej nazwy; Rysowanie itemów także będzie można wykonać pomiędzy przechwyceniem odpowiednich komunikatów, a wywołaniem ustawionego już w programie zdarzenia; W sumie to zdarzenia OnDrawItem nie musiałbyś w ogóle oprogramowywać w programie, bo komponent mógłby mieć to już zrobione w sobie;

Polecam więc zapoznać się z klasą TListBox i poczytać na temat tworzenia własnych komponentów; To nic innego, jak programowanie obiektowe, więc nie powinieneś mieć z tym problemów, o ile OOP faktycznie znasz, choćby w minimalnym stopniu (podstawy);

Na zwykłym TListBox można zdziałać cuda - wystarczy jedynie przechować w nim odpowiednie dane dla itemów oraz skorzystać z własnego zdarzenia ich rysowania;

Kiedyś przedstawiałem takie cudo, tyle że nie dla listy kontaktów, a dla listy wpisów z ich datami - całość na komponencie TCheckListBox, zrzut w załączniku.

1

Tak jak już napisał @abrakadaber, użył bym VirtualStringTree, to bardzo rozbudowany ListBox i też można zdziałać cuda.

0

rzeczywiście komponent ma duże możliwości co nie zwalnia z programowania. Tego akurat się nie boję i nie wymagam komponentów które za mnie wszystko zrobią. W każdym razie komponent ląduje już w moim Delphi, na pewno się przyda chociaż chyba nie w tym projekcie. Już wybrałem trochę inną drogę. Użyje jednak dbgrida z odświeżaniem niewidocznym dla użytkownika a na serwerze będę pobierał stan centrali telefonicznej i wpisywał do bazy. Rekordy te przydadzą mi się jako historia kontaktów.

Dzięki za podpowiedzi.

0

Kiedyś pisałem komunikator i znalazłem bardzo fajny komponent, który właściwie nie wymaga programowania, bo ma wszystko w sobie: TUsersListBox. Tylko, jeśli nie był rozwijany przez te lata, musisz pamiętać, że po każdym dodaniu/modyfikacji/usunięciu elementu, mówisz mu wywołać refresh albo invalidate.

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