RapsodRF Опубликовано 16 марта, 2016 Поделиться Опубликовано 16 марта, 2016 Всем привет! Столкнулся с проблемой, нужно создать онлайн-чат с иконками переписчиков. На подобии как сделали в Viber Подскажите как правильно это организовать и какие компоненты использовать? Желательно не использовать чужие компоненты, только FMX. Заранее благодарю! Цитата Ссылка на комментарий
0 zairkz Опубликовано 16 марта, 2016 Поделиться Опубликовано 16 марта, 2016 (изменено) Можно помучаться с TListView, но я остановился на TPresentedScrollBox и стилизованных Label'ах (облачки сообщений, под разные scale на png 9patch), скорость скролла хорошая, плюс есть боунсы и тд. Приложил исходники проекта, также в архиве отдельно chat.style procedure TForm2.ChatUp(UsID: integer; LastId: integer; CText: string); var Labb: TLabel; Marg: Single; LT: TLayout; begin LT := TLayout.Create(PR); LT.Parent := PR.Content; LT.Margins.Top := 2; LT.Align := TAlignLayout.Top; LT.Position.Y := PR.ContentBounds.Height + 50; Marg := PR.Width * 0.20; Labb := TLabel.Create(PR); Labb.Parent := PR; Labb.Align := TAlignLayout.Top; Labb.AutoSize := True; Labb.WordWrap := True; Labb.TextSettings.WordWrap := True; if UsID = 0 then begin Labb.Margins.Left := Marg; Labb.Margins.Right := 4; Labb.TextAlign := TTextAlign.Trailing; Labb.StyleLookup := 'labelchat_green'; end else begin Labb.Margins.Right := Marg; Labb.Margins.Left := 4; Labb.TextAlign := TTextAlign.Leading; Labb.StyleLookup := 'labelchat_white'; end; Labb.NeedStyleLookup; Labb.Text := ' ' + CText + ' '; LT.Height := Labb.Height + 4; Labb.Parent := LT; if UsID = 0 then Labb.Align := TAlignLayout.Right else Labb.Align := TAlignLayout.Left; end; Первые признаки шизофрении: Chat.zip Изменено 16 марта, 2016 пользователем zairkz enatechno, Равиль Зарипов (ZuBy), kami и 7 других 10 Цитата Ссылка на комментарий
0 rareMax Опубликовано 16 марта, 2016 Поделиться Опубликовано 16 марта, 2016 TksChatView component for building iOS style chat applications master webs, Kitty, Rusland и 1 другой 4 Цитата Ссылка на комментарий
0 Rusland Опубликовано 18 мая, 2016 Поделиться Опубликовано 18 мая, 2016 (изменено) zairkz, на картинке видно что размер как-то подсчитывается. Запустил этот пример и вижу: Почему на коротких словах ширина "облачка" длинная? И еще вопрос: как можно очистить чат? (как удалить все из TPresentedScrollBox?) Попробовал так - безрезультатно - ничего не удаляется. procedure TFormMain.ChatClean(); var i: word; begin for i:= Psb.ControlsCount-1 downto 0 do if (Psb.Controls[i] is TText) or (Psb.Controls[i] is TLayout) then Psb.Controls[i].Free; end; Изменено 18 мая, 2016 пользователем Rusland Цитата Ссылка на комментарий
0 zairkz Опубликовано 18 мая, 2016 Поделиться Опубликовано 18 мая, 2016 Извиняюсь что долго, перепроверьте процедуру, с размером облок вроде все нормально: procedure TForm2.ChatUp(UsID: integer; LastId: integer; CText: string); var Labb: TLabel; Marg: Single; LT: TLayout; begin LT := TLayout.Create(PR); LT.Parent := PR.Content; LT.Margins.Top := 2; LT.Align := TAlignLayout.Top; LT.Position.Y := PR.ContentBounds.Height + 50; Marg := PR.Width * 0.20; Labb := TLabel.Create(PR); Labb.Parent := PR; Labb.Align := TAlignLayout.Top; Labb.AutoSize := True; Labb.WordWrap := True; Labb.TextSettings.WordWrap := True; if UsID = 0 then begin Labb.Margins.Left := Marg; Labb.Margins.Right := 4; Labb.TextAlign := TTextAlign.Trailing; Labb.StyleLookup := 'labelchat_green'; end else begin Labb.Margins.Right := Marg; Labb.Margins.Left := 4; Labb.TextAlign := TTextAlign.Leading; Labb.StyleLookup := 'labelchat_white'; end; Labb.NeedStyleLookup; Labb.Text := ' ' + CText + ' '; LT.Height := Labb.Height + 4; Labb.Parent := LT; if UsID = 0 then Labb.Align := TAlignLayout.Right else Labb.Align := TAlignLayout.Left; end; По поводу очистке Опишите клас: TOpenScrollBox = class(TPresentedScrollBox); до TForm_Main = class(TForm) ... и процедурка procedure ClearChildren(AScrollBox: TPresentedScrollBox); begin Assert(AScrollBox <> nil); TOpenScrollBox(AScrollBox).Content.DeleteChildren; AScrollBox.Repaint; end; Rusland 1 Цитата Ссылка на комментарий
0 zairkz Опубликовано 18 мая, 2016 Поделиться Опубликовано 18 мая, 2016 Только что скачал этот файл у меня с размером облак все нормально. Цитата Ссылка на комментарий
0 Rusland Опубликовано 19 мая, 2016 Поделиться Опубликовано 19 мая, 2016 (изменено) Процедуру перепроверил - один в один - странно, у меня и на андройде, и на Windows одинаковый размер облаков. Попробовал в Seattle - действительно нормальные размеры облаков, а в Berline все одинакового размера... мдаа... Изменено 19 мая, 2016 пользователем Rusland Цитата Ссылка на комментарий
Вопрос
RapsodRF
Всем привет!
Столкнулся с проблемой, нужно создать онлайн-чат с иконками переписчиков.
На подобии как сделали в Viber
Подскажите как правильно это организовать и какие компоненты использовать?
Желательно не использовать чужие компоненты, только FMX.
Заранее благодарю!
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.