Delphi мессенджер. Какие компоненты использовать?

Пишу мессенджер на Delphi7. Прошу помощи: как сделать пользовательский интерфейс примерно как в телеграме, ватсаппе и т.д.

  1. Какие компоненты использовать чтобы при нажатии на i-ую вкладку слева изменялось окно чата справа? (я не придумал ничего лучше PageControl)

  2. Как(на каком компоненте) отображать исходящие и входящие сообщения и скроллить их? (у меня вообще нет идей как это делать)

  3. Как сделать облако сообщения? Я имею ввиду, чтобы сообщения отображались не сплошным текстом, а были отделены как-то (я не придумал ничего лучше как много tMemo'ов, т.е. для каждого сообщения свой tMemo)

    введите сюда описание изображения

введите сюда описание изображения

Знающие люди, подскажите, подкиньте идей, пожалуйста Буду очень благодарен


Ответы (1 шт):

Автор решения: Кирилл Решетников

в delphi есть все для этого кроме стандартного scrollbox который глючит когда тысячи сообщений там будет. поэтому сам писал свой скрол бокс который делился на 3 листа 1 что невидно снизу 2 что видно 3 что не видно сверху плюс динамическая подгрузка сообщений при скроле конечно в delphi есть все но все же вам придется писать свои компоненты на основе стандартных а пытаться найти что то готовое ничему не научит и не факт что на 100% они подойдут под вашу задумку.

  1. Какие компоненты использовать чтобы при нажатии на i-ую вкладку слева изменялось окно чата справа? Я делал с помощью TPanel все и ее разновидностей PageControl стандартный не подойдет вообще. вам нужен полный доступ к окнам что бы на панель навесить другие панели а PageControl вкладка это не окно а просто отрисовка вкладки. поэтому создаете вначале скролл бокс который не будет глючить он у вас будет кастомным от него унаследуясь создаете отдельные скролбоксы для панели контактов и панели диалогов создаете все динамически и при создании на каждую ячейку скролбокса т.е контакта вешаете onlick в событии ContactClick(Sender:TObject) вы получите объект контакта а дальше загрузите для него историю диалога в скролбокс для диалога.

  2. Как(на каком компоненте) отображать исходящие и входящие сообщения и скролить их?
    Только свой скрол бокс с нуля писать надо. другие варики плохо будут работать(я протестил все что можно, но только свой норм)

  3. Как сделать облако сообщения? Я имею ввиду, чтобы сообщения отображались не сплошным текстом, а были отделены как-то допустим вы написали свой ScrollBox с нуля. TBoxHistory

каждый элемент TBoxHistory для истории диалога должен содержать какие то панели (TBoxHistoryItem) в свою очередь (TBoxHistoryItem) должна содержать несколько сообщений (TBoxHistoryItemContent) в ней может быть или текст или картинки или видео или все вместе (это то что видит юзер)

юзер не видит (TBoxHistoryItem) а она нужна для оптимизации прокрутки, что бы комп меньше напрягался что бы при скроле выводить на экран сообщения блоками а не по одному

т.е схема такая Картинка

что использовать для отображения текста (тут у меня тоже есть вопросы), но я использовал TLabel (это менее затратно по ресурсам) но если юзер хочет выделить или скопировать то при клике TLabel заменятся на TMemo цветной когда операция завершена Tlabel обратно вернется на место.

введите сюда описание изображения

→ Ссылка