Доска почета


Popular Content

Showing most liked content since 20.07.2017 in Сообщения

  1. 18 likes
    Добрый день! В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь В составе архива сам компонент и пример его использования. FMXUI.zip
  2. 15 likes
    Привет Всем! Много тем на форуме про раскраску TListView, нашел в интернете решение и доработал его Вот что получилось LV_Helper.zip ColorListView.zip Доступно для Seattle ListView1.SetColorItemSelected(TAlphaColorRec.Orangered); //выделенный ListView1.SetColorItemFill(TAlphaColorRec.Gray); // обычный цвет Item ListView1.SetColorItemFillAlt(TAlphaColorRec.Lightgrey); // альтернативный цвет Item ListView1.SetColorBackground(TAlphaColorRec.Black); // цвет самого TListView ListView1.SetColorItemSeparator(TAlphaColorRec.Lightgray); // Линия разделения Item'ов ListView1.SetColorText(TAlphaColorRec.Red); // Обычный текст ListView1.SetColorTextSelected(TAlphaColorRec.White); // выделенный текст ListView1.SetColorTextDetail(TAlphaColorRec.Yellow); // текст доп. инфы ListView1.SetColorTextHeader(TAlphaColorRec.Green); // текст заголовка ListView1.SetColorTextHeaderShadow(TAlphaColorRec.Lightgray); // тень текста ListView1.SetColorButtonText(TAlphaColorRec.Orange); // цвет текста кнопки ListView1.SetColorButtonTextPressed(TAlphaColorRec.Orangered); // цвет нажатой кнопки добавлено в Berlin ListView1.SetColorPullRefresh(TAlphaColorRec.Orange); ListView1.SetColorPullRefreshIndicator(TAlphaColorRec.Orangered); ListView1.SetColorStretchGlow(TAlphaColorRec.Lime); ModernListView.rar
  3. 15 likes
    Так, я посмотрел. Сохраняем себе такую процедуру: procedure PreloadContent(const Control: TControl); var I: Integer; begin if Control is TStyledControl then TStyledControl(Control).ApplyStyleLookup; for I := 0 to Control.ControlsCount - 1 do PreloadContent(Control.Controls[I]); end; Она форсирует загрузку стилей. Задержка при появлении TMutliView заключается в том, что стиль загружается не сразу у любого контрола, а только по мере появления контрола. Обычно это происходит при первой отрисовки. Это правило касается всех контролов. Поэтому, в этом случае, вам нужно форсировать загрузку стилей. Это можно сделать при помощи моей процедуру PreloadContent. Добавьте в TForm.OnCreate и это решит задержку при первом появлении: PreloadContent(MultiView1);
  4. 9 likes
    Для одного проекта писал такое пару месяцев назад, пользуйтесь.Под windows, при клике на сообщение, оно превращается в readonly TMemo - дабы можно было скопировать нужное из сообщения. При наличии URL в сообщении, сбоку появляется кнопка открыть - лучше ничего для открытия ссылок не придумал. Надо бы сделать диалог выбора для открытия одной из нескольких ссылок, но руки пока не доходят. Пощупать чат вживую можно в приложении https://play.google.com/store/apps/details?id=ru.flintnet.InternetAgent , для активации и загрузки примера чата отсканируйте приложением qr-код с страницы http://internetagent.flintnet.ru/ unit ChatBox; interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Layouts,System.Types, FMX.StdCtrls,FMX.Edit,FMX.Memo,FMX.TextLayout,System.UITypes,FMX.Graphics,FMX.Objects, FMX.Effects,FMX.Styles.Objects; type TMessagePos = (msgLeft,msgRight); TEventText = procedure(PURL: String) of object; TChatBox = class(TVertScrollBox) private FTextLyout : TTextLayout; FLastMessageId : Integer; FMsgWidthPercentage : Integer; FOnURLButtonClick : TEventText; FCalloutLength : Single; FCalloutXRadius : Single; FCalloutYRadius : Single; FMessageFontSize : Single; FMemo : TMemo; procedure ButtonClick(Sender: TObject); procedure MyMsgContainerOnClick(Sender: TObject); procedure MyMsgContainerOnExit(Sender: TObject); function FCreateMsgBlock(AOwner: TComponent; PMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos) : TLayout; function CalculateTextItemHeight(Sender: TObject) : Single; procedure LayoutResize(Sender: TObject); function ExtractURL(pString : String) : String; procedure Memo1ApplyStyleLookup(Sender: TObject); public property LastMessageId : Integer read FLastMessageId; property MsgWidthPercentage : Integer read FMsgWidthPercentage write FMsgWidthPercentage default 80; constructor Create(AOwner: TComponent); override; destructor Destroy; override; Procedure AddMessage(pMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos); procedure ClearChildren(AChatBox: TChatBox); procedure ScrollBottomSmoothly; procedure ScrollBottom; published property OnURLButtonClick : TEventText read FonURLButtonClick write FonURLButtonClick; property CalloutLength : Single read FCalloutLength write FCalloutLength; property CalloutXRadius : Single read FCalloutXRadius write FCalloutXRadius; property CalloutYRadius : Single read FCalloutYRadius write FCalloutYRadius; property MessageFontSize : Single read FMessageFontSize write FMessageFontSize; end; TOpenChatBox = class(TChatBox); Procedure Register; implementation procedure Register; begin RegisterComponents('EKorepov', [TChatBox]); end; constructor TChatBox.Create(AOwner: TComponent); begin inherited create(Aowner); FLastMessageId:=-1; FTextLyout := TTextLayoutManager.DefaultTextLayout.Create; FMemo:=TMemo.Create(Aowner); FMemo.TextSettings.WordWrap:=True; FMemo.ReadOnly:=True; FMemo.Align:=TAlignLayout.Client; FMemo.OnExit:=MyMsgContainerOnExit; FMemo.OnApplyStyleLookup:=Memo1ApplyStyleLookup; FMemo.StyledSettings:=FMemo.StyledSettings-[TStyledSetting.Size]; With Self as TVertScrollBox do begin AniCalculations.Animation := True; AniCalculations.BoundsAnimation := True; AniCalculations.TouchTracking := [ttVertical]; end; end; destructor TChatBox.Destroy; begin FreeAndNil(FMemo); FreeAndNil(FTextLyout); inherited Destroy; end; procedure TChatBox.ScrollBottomSmoothly; begin AniCalculations.MouseWheel(0, ContentBounds.Height+5); end; procedure TChatBox.ScrollBottom; begin ScrollBy(0, -ContentBounds.Height); end; procedure TChatBox.ButtonClick(Sender: TObject); Var URL : String; begin URL:=TButton(Sender).HelpKeyword; if Assigned(FonURLButtonClick) then FonURLButtonClick(URL); end; procedure TChatBox.Memo1ApplyStyleLookup(Sender: TObject); begin end; procedure TChatBox.MyMsgContainerOnClick(Sender: TObject); begin FMemo.TextSettings:=TLabel(Sender).TextSettings; FMemo.Lines.Text:=TLabel(Sender).Text; TLabel(Sender).AddObject(FMemo); end; procedure TChatBox.MyMsgContainerOnExit(Sender: TObject); begin if (Sender is TMemo) then if Assigned(TMemo(Sender).Parent) then if (TMemo(Sender).Parent is TLabel) then TLabel(TMemo(Sender).Parent).RemoveObject(TMemo(Sender)); end; procedure TChatBox.ClearChildren(AChatBox: TChatBox); begin Assert(AChatBox <> nil); TOpenChatBox(AChatBox).Content.DeleteChildren; AChatBox.Repaint; end; function TChatBox.CalculateTextItemHeight(Sender: TObject) : Single; var Item: TLabel; begin Result:=0; if (Sender is TLabel) then begin Item := TLabel(Sender); FTextLyout.BeginUpdate; try FTextLyout.Text := Item.Text; FTextLyout.MaxSize := TPointF.Create(Item.Width-Item.Margins.Left-Item.Margins.Right-10, 1000); FTextLyout.Font := Item.Font; FTextLyout.WordWrap:= Item.WordWrap; FTextLyout.HorizontalAlign:= Item.TextSettings.HorzAlign; FTextLyout.VerticalAlign:= Item.TextSettings.VertAlign; finally FTextLyout.EndUpdate; end; Result:= FTextLyout.Height+10; end; end; procedure TChatBox.LayoutResize(Sender: TObject); Var Item : TLabel; CalloutRectangle : TCalloutRectangle; Layout : TLayout; I : Integer; begin Layout:=TLayout(Sender); for I := 0 to Layout.Children.Count-1 do begin If Layout.Children.Items[I] is TCalloutRectangle Then begin CalloutRectangle:=TCalloutRectangle(Layout.Children.Items[I]); Item:=TLabel(CalloutRectangle.Children.Items[0]); CalloutRectangle.Width:=(Layout.Width / 100) * FMsgWidthPercentage; Layout.Height:=CalculateTextItemHeight(Item); end; If Layout.Children.Items[I] is TButton Then begin TButton(Layout.Children.Items[I]).Width:=(Layout.Width / 100) * (100-FMsgWidthPercentage-5); end; end; end; Procedure TChatBox.AddMessage(pMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos); Var lcLayout : TLayout; begin PDate:=Trim(PDate); PAutor:=Trim(PAutor); PMessage:=Trim(PMessage); FLastMessageId:=PMessageId; lcLayout:=FCreateMsgBlock((Self as TVertScrollBox), PMessageId, PDate, PAutor, PMessage, PMessagePos); Self.AddObject(lcLayout); end; function TChatBox.FCreateMsgBlock(AOwner: TComponent; PMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos) : TLayout; Var lcLayout,lcLayout2 : TLayout; Item : TLabel; Button : TButton; CalloutRectangle : TCalloutRectangle; lcHeight : Single; URL : String; begin lcLayout:=TLayout.Create(AOwner); lcLayout.Tag:=pMessageId; lcLayout.Align:=TAlignLayout.Top; lcLayout.Width:=200; lcLayout.Position.X:=0; lcLayout.Position.Y:= ((AOwner as TVertScrollBox).ContentBounds.Height+10); lcLayout.Margins.Bottom:=10; CalloutRectangle:=TCalloutRectangle.Create(lcLayout); CalloutRectangle.XRadius:=FCalloutXRadius; CalloutRectangle.YRadius:=FCalloutYRadius; CalloutRectangle.CalloutWidth:=10; CalloutRectangle.CalloutOffset:=-3-FCalloutYRadius-CalloutRectangle.CalloutWidth; CalloutRectangle.Width:=((AOwner as TVertScrollBox).Width / 100) * FMsgWidthPercentage; CalloutRectangle.HitTest:=False; case PMessagePos of msgRight : begin CalloutRectangle.Align:=TAlignLayout.Right; CalloutRectangle.CalloutPosition:=TCalloutPosition.Right; CalloutRectangle.Padding.Right:=CalloutRectangle.CalloutLength+CalloutRectangle.XRadius; CalloutRectangle.Padding.Left:=CalloutRectangle.XRadius; end; msgLeft : begin CalloutRectangle.Align:=TAlignLayout.Left; CalloutRectangle.CalloutPosition:=TCalloutPosition.Left; CalloutRectangle.Padding.Left:=CalloutRectangle.CalloutLength+CalloutRectangle.XRadius; CalloutRectangle.Padding.Right:=CalloutRectangle.XRadius; end; end; CalloutRectangle.Padding.Top:=1; CalloutRectangle.Padding.Bottom:=1; lcLayout.AddObject(CalloutRectangle); Item:=TLabel.Create(CalloutRectangle); Item.TextSettings.Font.Size:=MessageFontSize; CalloutRectangle.AddObject(Item); Item.Align:=TAlignLayout.Client; {$IFDEF MSWINDOWS} Item.OnClick:=MyMsgContainerOnClick; {$ENDIF MSWINDOWS} Item.Text:=PDate+' '+PAutor+#10+PMessage; Item.HitTest:=True; Item.WordWrap:=True; lcHeight:=CalculateTextItemHeight(Item); lcLayout.Height:=lcHeight; URL:=ExtractURL(pMessage); Item.StyledSettings:=Item.StyledSettings- [TStyledSetting.Size,TStyledSetting.Style]; if Not URL.IsEmpty then begin lcLayout2:=TLayout.Create(lcLayout); lcLayout2.Align:=TAlignLayout.Client; lcLayout2.Margins.Left:=5; lcLayout2.Margins.Right:=5; lcLayout.AddObject(lcLayout2); Button:=TButton.Create(lcLayout2); Button.Text:='Открыть'; Button.Align:=TAlignLayout.Center; Button.HelpKeyword:=URL; Button.OnClick:=ButtonClick; lcLayout2.AddObject(Button); end; lcLayout.OnResize:=LayoutResize; Result:=lcLayout; end; function TChatBox.ExtractURL(pString : String) : String; Var S : String; begin Result:=''; if Not pString.Contains('http') then Exit; S:=pString.Substring(Pos('http',pString)-1); S:=S.Remove(S.IndexOfAny([' ',','])); Result:=S.TrimRight(['.']); end; end.
  5. 8 likes
    Сделал небольшую программу-генератор 9-patch заставок. Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых в FMX размеров. Примеры Рисунок: Полученные 9-Patch png: Рисунок: Полученные 9-Patch png: Исходники: 9Patch Generator.zip
  6. 8 likes
    Ссылка: http://delphifmandroid.blogspot.ru/2016/07/admob.html Автор: Андрей Ефимов Описание: Подробная инструкция по добавлению рекламного блока в приложение, разработанное в RAD Studio.
  7. 7 likes
    Очень не хватает примеров на C++. Решил поделится опытом. Рассмотрим создание собственного "ListBoxItem"а на C++. И так начнем. Для начало создадим стиль для нашего "ListItem"а. В моем случае оно выглядит так: Структура выглядеть следующим образом: А вы сразу можете создать собственный стиль. Создадим класс для нашего "Item"а. Я назвал его TMyListBoxItem. Нужно знать следующие вещи: ApplyStyle() вызывается когда стиль загружен. FreeStyle() когда стиль выгружен. GetDefaultStyleLookupName() когда стиль не задано берется названые стиля по умолчанию. FindStyleResource("стиль") ищет в стиле ресурс с заданным названием. ListBox автоматически очищает из невидимых "Item"ов стиль что бы избежать от расходы на память. И заново загружает когда оно видимо. При этом вызывается соответствующие функции приведенные выше я приведу только некоторые кусочки кода. Остальное всё можете посмотреть в прикреплённых файлах. class TMyListBoxItem : public TListBoxItem { private: // Переменные для хранения данных System::UnicodeString FTimeTo; System::UnicodeString FTimeFrom; //.... // Визуальные компоненты TText* FTextTimeTo; TText* FTextTimeFrom; //... // Функции для присваивания данных, это нужно при написании "properties" void __fastcall SetTimeTo(const System::UnicodeString Value); void __fastcall SetTimeFrom(const System::UnicodeString Value); protected: void __fastcall ApplyStyle(); void __fastcall FreeStyle(); System::UnicodeString __fastcall GetDefaultStyleLookupName(); virtual void UpdateStyleData(); __published: __property System::UnicodeString TimeTo = {read=FTimeTo, write=SetTimeTo}; __property System::UnicodeString TimeFrom = {read=FTimeFrom, write=SetTimeFrom}; public: __fastcall TMyListBoxItem(System::Classes::TComponent* AOwner); }; Теперь напишем сами функции. void __fastcall TMyListBoxItem::ApplyStyle() { // Вызов метода предка TListBoxItem::ApplyStyle(); TFmxObject *StyleObject; // Поиск ресурса из стиля. Посмотрите в скрине, там есть ресурс с названием "timeto" типа TText StyleObject = FindStyleResource("timeto"); // dynamic_cast нужен для корректного преобразования типов. Если тип найденного ресурса не является TText то указателю будет присвоен NULL FTextTimeTo = dynamic_cast<TText*>(StyleObject); StyleObject = FindStyleResource("timefrom"); FTextTimeFrom = dynamic_cast<TText*>(StyleObject); UpdateStyleData(); } void __fastcall TMyListBoxItem::FreeStyle() { // Стиль выгружен из памяти. Нужно очистить указатели что бы избежать ошибок FTextTimeTo = NULL; FTextTimeFrom = NULL; TListBoxItem::FreeStyle(); } System::UnicodeString __fastcall TMyListBoxItem::GetDefaultStyleLookupName() { // название стиля для нашего "Item"а по умолчанию return "mylistboxitemstyle"; } void TMyListBoxItem::UpdateStyleData() { if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; if(FTextTimeFrom) FTextTimeFrom->Text = FTimeFrom; } void __fastcall TMyListBoxItem::SetTimeTo(const System::UnicodeString Value) { FTimeTo = Value; if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; } Вот и всё. Остается только добавит в наш проект ListBox и button для проверки. Вот функция создания нашего "Item"а: void __fastcall TForm1::Button1Click(TObject *Sender) { TMyListBoxItem *Item = new TMyListBoxItem(this); Item->Parent = ListBox1; Item->StyleLookup = "customstyle1"; Item->TimeFrom = "11:20"; Item->TimeTo = "12:50"; } Скриншот программы: В архиве мой класс и стиль. Для корректного отображения некоторых символов нужен fontcustom Какие вопросы задавайте. Отдельное спасибо Ярославу за мануал на дельфи: http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/ Администраторы и модераторы, прошу подкорректировать если что то неправильно. ListBoxItem.zip
  8. 7 likes
    версия для Seatle ColorListView.zip весь код для отрисовки кастомного цвета 1) копируем себе и открываем FMX.ListView 2) Ctrl+F -> DrawItemsFill 3) Вставляем код // отрисовываем кастомный цвет........................................... // procedure TListViewBase.DrawItemsFill(const StartItem................. if TListViewItem(ListItem).Data['aUseCustomColor'].AsBoolean then FBrush.Color := TListViewItem(ListItem).Data['aCustomColor'].AsInteger; // ...................................................................... после if FAlternatingColors and (AltIndex mod 2 = 1) then FBrush.Color := FItemStyleFillAltColor; 4) Подключаем в своём проекте после стандартного FMX.ListView
  9. 6 likes
    Название: Fifteen Puzzle Платформа: Android Устройство: Смартфон, планшет Разрешение экрана: любое Google Play: https://play.google.com/store/apps/details?id=com.sinukeapps.fifteenpuzzle Описание: Классическая игра в пятнашки, в которой нужно собраться костяшки по порядку от 1 до 15. В игре предлагаются только решаемые расклады. Имеется возможность делиться своими результатами с друзьями. Переведено на русский, английский, украинский, белорусский и татарский языки. Скриншоты:
  10. 5 likes
    Сделал версию для macOS: https://yadi.sk/d/wBpoFcKe3LgiKx
  11. 5 likes
    Вероятно, вам требуется добавить ссылку на политику конфиденциальности в Консоли разработчика. Делается это так: 1) Заходим в консоль разработчика 2) Выбираем приложение 3) В меню открываем вкладку "Настройка страницы приложения" и жмём по "Описание приложения" 4) Спускаемся в самый низ, там будет раздел "Политика конфиденциальности", вставляем ссылку на страничку/документ 5) Сохраняем и публикуем новые настройки Про GET_ACCOUNTS. Как убрать разрешение: Собираем приложение (Build) Открываем "Проект\AndroidManifest.template.xml", выставляем минимальную и целевую версию СДК. Делаем Clear проекта и снова Собираем приложение (Build) Находим файл "Проект\Android\Debug\AndroidManifest.xml", открываем и удаляем строку с разрешением, сохраняем. Делаем деплой и заливаем в консоль. Если нужно оставить разрешение для старых версий АПИ, то можно сделать так: Собираем приложение (Build) Находим файл "Проект\Android\Debug\AndroidManifest.xml", открываем, и в строку с разрешением добавляем " android:maxSdkVersion="Версия АПИ" ", версию выбираем исходя из ответа на вопрос "на какой версии АПИ данное разрешение перестало требоваться?", сохраняем. Делаем деплой и заливаем в консоль. Разрешение будет запрашиваться на всех версиях до той (включительно), которую вы указали. Если вам необходимо запрашивать разрешение на версиях АПИ 23 и выше, то необходимо добавить специальный метод в ваше приложение, я максимально упростил эту задачу. Статья с описанием: Добавляем метод onRequestPermissionsResult в приложение. Либа для скачивания:CustomActivityAndListener p.s. Надеюсь, правильно понял ваши вопросы...
  12. 5 likes
    версия для берлина Раскраска ListView Кастомный цвет для определенного Item'a Отступы для разделителей Определение Index'a верхнего Item'a Кол-во видимых элементов Показано как можно реализовать интерфейс день/ночь ModernListView.rar
  13. 4 likes
  14. 4 likes
    тогда этот вариант не вариант )) тогда можно воспользоваться наработками ZuBy FMX.NativeView там есть возможность выводить окошки с собственным текстом кнопок. вот только найти не могу, где он это публиковал. вот такое можно выводить:
  15. 4 likes
    Приложение опубликовано в Google Play - https://play.google.com/store/apps/details?id=com.sinukeapps.locksmithery Описывать изменения с последней здесь записи не буду, но работа по "допиливанию" ведется )) Буду рад оценкам.
  16. 4 likes
    Замечена тендеция (учитывая моих зарубежных друзей), которой, очень странно, даже гуру этого форума подвержены... Все ушли в чат телеграмм - там полный, не ненужный флуд. Ценность форума идет к нулю уже не первый месяц после телеграмма. Вернитесь на форум, а телеграмм, как и любая соц. сеть для флуда - здесь не нужна. Модераторы верните силу этому форуму - убейте телеграмм...
  17. 4 likes
    Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так: procedure TFormMain.FormActivate(Sender: TObject); var CurNotification : TPushServiceNotification; begin if Length(fPushService.StartupNotifications) > 0 then for CurNotification in fPushService.StartupNotifications do if Assigned(CurNotification) then Memo.Lines.Text := CurNotification.Json.ToJSON; end;
  18. 3 likes
    У TMS есть готовое решение: TTMSFMXSignatureCapture Вот еще видео можно глянуть: Tutorial: Finger Writer with FireMonkey (Delphi DX10.1 Berlin) on Win10, OSX, iOS Tutorial: Signatur Capture in Firemonkey XE5 (Delphi XE5) on Win, iOS and Android
  19. 3 likes
    procedure TForm1.FormCreate(Sender: TObject); var i: integer; aRectangle: TRectangle; aLabel: TLabel; aButton: TButton; begin VertScrollBox1.BeginUpdate; try for i := 1 to 30 do begin aRectangle := TRectangle.Create(VertScrollBox1); aRectangle.Parent := VertScrollBox1; aRectangle.Align := TAlignLayout.Top; aRectangle.Height := 60; aRectangle.Margins.Left := 10; aRectangle.Margins.Top := 15; aRectangle.Margins.Right := 15; aRectangle.TagString := 'Rectangle' + i.ToString; aLabel := TLabel.Create(VertScrollBox1); aLabel.Parent := aRectangle; aLabel.Align := TAlignLayout.Client; aLabel.Text := 'Label' + i.ToString; aLabel.Margins.Left := 10; aLabel.TagString := 'Label' + i.ToString; aButton := TButton.Create(VertScrollBox1); aButton.Parent := aRectangle; aButton.Align := TAlignLayout.Right; aButton.Text := 'Button' + i.ToString; aButton.TagString := 'Button' + i.ToString; aButton.Margins.Top := 5; aButton.Margins.Bottom := 5; aButton.Margins.Right := 10; end; finally VertScrollBox1.EndUpdate; end; end;
  20. 3 likes
    Основные отличия: TImageControl - при клике на нем во время выполнения десктоп-приложения открывается диалоговое окно открытия файла, где можно выбрать картинку для отображения в ImageControl. Отображаемая картинка автоматически масштабируется под размеры контрола. TImageViewer - наследник от TCustomScrollBox и имеет встроенные скроллбары. На десктопах изображение может смещаться с помощью мыши и масштабироваться (колесиком мыши). Также в демках, идущих с RAD, есть пример как масштабировать изображение с помощью жестов на устройствах с тачскрином.
  21. 3 likes
    Тогда стандартные стили Вам не подойдут. Создавайте свой стиль для ListBoxItem на базе стандартного или "с нуля". Тут описано как это можно сделать. Вот подправил пример. Создал mylistboxitemstyle в котором только 2 элемента - text и image. Этот стиль загружен в StyleBook1 и указан в Listbox1.DefaultItemStyles.ItemStyle. Можете редактировать этот стиль прямо в StyleBook, добавляя новые элементы и располагая их как Вам нужно. tstListbox1.rar
  22. 3 likes
    Из стандартных иконку отображают: listboxitembottomdetail, listboxitemleftdetail, listboxitemnodetail, listboxitemrightdetail. tstListbox1.zip
  23. 3 likes
    Библиотека для работы с изображениями находится здесь. Готовится описание.
  24. 3 likes
    Ух... БОЛЬШОЕ ВСЕМ СПАСИБО. Залил в консоль приложение для получения пушей без GET_ACCOUNTS, заодно убрал READ_PHONE_STATE. Без READ_PHONE_STATE пуши приходят нормально... Приложение готово к публикации. Сейчас опубликую - получу отказ от гугла, и буду высылать им разрешающий документ... Со стороны выглядит полным маразмом... Неужели в консоли не могли предусмотреть раздел где можно было бы сразу перед публикацией прикрепить разрешающий документ? Очень странно это все выглядит у гугла, представляю что твориться в магазине apple - две мега корпорации для разработчиков - все для людей... P.S. Автору форума - памятник при жизни! Спасибо.
  25. 3 likes
    Установите - Stylelookup у каждого Item'a - listboxitemnodetail или listboxitembottomdetail Detail - обозначает что появляется еще одна дополнителная текстовая строка, bottom detail переводится как "детали внизу". Добавить текст в нее можно через инспектор - кликните на нужный listitem > ItemData > Detail listboxitemleftdetail - содержит еще одну текстовую панельку справа, которая перекрывает основной текст. Вы можете сделать эти пункты в своем стиле - добавить туда визуальные компоненты, такие как Tswitch, кнопки итд. Для этого, - Нажмите правой кнопкой мыши (ПКМ) по листбоксу - Add ListBoxitem, выберите для этого Item'a нужный стиль, в Stylelookup, на основе которого хотите сделать свой. Далее, ПКМ по Item - Edit Custom Style. Выделите в инспекторе ListBoxItem1Style1 - это ваш новый стиль, можете переименовать его в StyleName на нужное вам имя. Это имя потом указывайте в StyleLookup каждого item'a. Теперь можно переносить мышкой компоненты на этот шаблон. Имена меняйте в StyleName. По этим именам потом можно обращаться к ним таким образом: vItem.StylesData['descript'] := 'text'; vItem.StylesData['details'] := 'Text'; vItem.ImageIndex := 5; Чтобы отображался картинка при помощи ImageIndex в таком собственном Item е - нужно кинуть TGlyph и назвать Stylename как 'glyphstyle'. TListBox довольно медленный компонент, и нужен в основном для небольших списков (напр. настройки) или там, где используются Items с контролами. Для динамических списков используйте TListView.
  26. 3 likes
    ListView1.Items[0].Text := 'Сменим текст для Itema под индексом 0'; В ListView нельзя скрывать отдельные Item'ы
  27. 3 likes
    можете проверить у себя: кидаем TListView на форму ставим anchors или align ItemApperance = ImageListItemBottomDetailRightButton запускаем и делаем ресайз формы текст пропадает с кнопки Profit? У меня это воспроизводится в голом проекте, FMX.ListView.pas не изменен добавление Item'ов for I := 0 to 20 do begin AItem := ListView1.Items.Add; with AItem do begin Text := 'Item Random ' + I.ToString; Detail := 'Detail for ' + Text; ButtonText := 'Custom Color'; Bitmap := Image1.Bitmap; end; ListView1.Adapter.ResetView(AItem); // fix TextButton ( TListViewTextButtonFix ) end; устраняем багу procedure TForm1.ListView1UpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin TListViewTextButtonFix.Rendering(Sender, AItem, AHandled); // fix end; FMX.ListView.TextButtonFix.zip
  28. 2 likes
  29. 2 likes
    думаю что таким способом http://blog.rzaripov.kz/2016/12/android-ios.html
  30. 2 likes
    Добрый день. У меня в Berlin фильтрация происходит нормально и с невидимыми на экране строками. Всего 160 строк в Listview. Фильтрую через TEdit: procedure TForm1.SearchChangeTracking(Sender: TObject); var Lower: string; begin Lower := Search.Text.Trim.ToLower; if Lower = '' then begin if Assigned(listView1.Items.Filter) then listView1.Items.Filter := nil; end else begin listView1.ItemIndex := -1; listView1.Items.Filter := function(X: string): Boolean begin Result := Lower.IsEmpty or X.ToLower.Contains(Lower); end; end; end;
  31. 2 likes
    В чатике обсуждали, утечек там добавили и фикс не ахти. Скоро будет полноценный апдейт, на днях вроде как
  32. 2 likes
    еще раз. Для windows подойдет вообще все что угодно, там диалоги вообще модальные. В мобильных ОС используется ARC - автоподсчет ссылок. Почитайте. При использовании Create(v), на форму начинает ссылаться компонент v, поэтому подсчет ссылок не дает ей самоубиться. Но это же говорит о том, что при закрытии она висит в памяти. Не особо страшно, но... Если указать NIL, то форма будет убита сразу после выхода, и обращение к ней даст AV Поэтому я и говорю, надо смотреть код.
  33. 2 likes
    Как все запущено... deploy означает разместить на мобильном устройстве, изменения будут в файле на телефоне или планшете. Посмотреть изменения можно или из программы, запросить 'select * from Tab_Parol', либо любой прогой из googleplay которая работает с sqlite. Хотя нет, internal сторонними программами не посмотришь, надо из своей контролить.
  34. 2 likes
    А PopupMenu вообще в принципе на Андройде показывается? Тут нужно самому рисовать менюшку. Например вот как-то так https://community.embarcadero.com/blogs/entry/creating-an-overflow-menu-on-android-463
  35. 2 likes
    Не надо ничего удалять, мало ли кому нибудь пригодится...
  36. 2 likes
    Ошибка найдена. Из манифеста пропала строка: <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" /> куда делась ума не приложу... делалось строго все по пунктам из статьи и эта строка была в начале разработки добавлена. Может С++ билдер ее как-то убил... Снова добавили собрали проект с новой версией - есть пуши и когда приложение выгружено. Сейчас все нормально.
  37. 2 likes
    Проблему определили в чате телеграма, заключается она в том, что разработчики MIUI 8.2.10 опять изменили обработку разрешений.
  38. 2 likes
    у картинок нужно убрать HitTest, но тогда картинки не будут получать сообщения тапа/мыши варианты: использовать TListView выключить HitTest у картинок и в событии TListBox определять позицию картинки по координатам тапа/мыши и выполнять действие
  39. 2 likes
    нельзя удалять себя из обработчика себя нужно запустить TTask.Run(procedure begin TThread.Synchronize(procedure begin ваше действие с компонентом end) end);
  40. 2 likes
    Понимаю, что опоздал почти на два года, но все же, для истории и новичков )))
  41. 2 likes
    Не знаю есть ли такое решение в намерениях но как альтернатива - копии в переменную количество созданных уведомлений , при появлении дубликата гаси ранее созданное и в заголовке нового уведомления выводи общее количество. В примерах где то видел подобное. Если закрыто апк поднимай сервер
  42. 2 likes
    В Berlin и Tokyo AddFontResource и RemoveFontResource прекрасно отрабатывают, только вызывать их надо до Application.Run. Кстати, лучше использовать AddFontResourceEx и RemoveFontResourceEx с флагом FR_NOT_ENUM - тогда надобность в SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) отпадает.
  43. 1 like
  44. 1 like
    да сейчас попробовал на нулевом проекте, то же работает. странно. спасибо.
  45. 1 like
    Какая версия Delphi? PS. От Indy компонентов лучше отказаться
  46. 1 like
    Спасибо. Да, делалось в Tokyo 10.2.1. Насчет квадрата посмотрю конечно. Хотя пока и предположить не могу что там. Там обычный Rectangle в канве которого выводится текст номера На счет скорости учту. Еще раз спасибо П.С. статус бар красился с помощью модуля Равиля - FMX.StatusBar
  47. 1 like
  48. 1 like
    Заметил, что у вас кнопка "Поделиться с друзьями" имеет Андроидовский дизайн. А у Apple это прямоугольник со стрелкой, направленной вверх.
  49. 1 like
  50. 1 like
    А зачем с мобильного это делать? Сел за PC, перед или после работы и написал. Тем более что с мобильного отвечать можно только на простые разговоры. На сложные вопросы - нужен PC чтобы найти нужный материал, порыться в хелпе, написать код итп. Писать код с мобильного то еще извращение. Но конечно нужно чтобы админ сделал шаг навстречу и сделал соответсвующий раздел или одну единую тему (Флудильня). @Anatoliy Delphi конечно более развит чем С++, и по Firemonkey там больше материала. Я когда делал пуши, у меня не было проблем, я кстати вам давал ссылку на мой готовый код php. Есть детальная статья Равиля, делал пуши на основе серсива Google Firebase.
This leaderboard is set to Москва/GMT+03:00