Перейти к содержанию
Fire Monkey от А до Я

Лидеры

  1. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      6

    • Постов

      2 517


  2. Rusland

    Rusland

    Пользователи


    • Баллы

      6

    • Постов

      1 204


  3. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      4

    • Постов

      842


  4. Error

    Error

    Пользователи


    • Баллы

      2

    • Постов

      167


Популярный контент

Показан контент с высокой репутацией 24.10.2016 во всех областях

  1. Rusland

    Проблемы с сервисом

    А не нужно выкладывать рабочий билд... вы сделайте тестовый проект с сервисом и проверьте работу NotificationCenter... делов то на 5 минут, зато сколько пользы
    4 балла
  2. Было уже, пользуйтесь поиском... Как определить установлено ли другое приложение или нет на Android?
    2 балла
  3. Rusland

    Проблемы с сервисом

    NotificationCenter нормально работает в сервисе. Сейчас бросил NotificationCenter в сервис и скопировал вышеуказанный код - нотификейшн отобразился. MikeWuzHere, выкладывайте свой тестовый проект, проверю
    2 балла
  4. ну и вот для ознакомления
    1 балл
  5. 1 балл
  6. Pax Beach

    Проблемы с сервисом

    Пример работы таймера в сервисе.
    1 балл
  7. спрашивался процессор на девайсе/эмулятооре, а не ноута
    1 балл
  8. Pax Beach

    Seattle Android Ошибка exited with code 1

    Создание Android приложений с NDK R13 Не мог смириться с суевериями ), и решил сам проверить. Delphi не дружит с линкером (компоновщиком) версии 4.9, а с 4.8 дружит нормально. Все остальное на вкладке NDK использую из последнего релиза. С сегодняшнего дня, я живу вот так: PS: Интересно, если компоновщик брать из каталога другой архитектуры, приложения заработают корректно на устройствах с Intel?
    1 балл
  9. Andrey Efimov

    argument out of range Listview(Баг ?)

    Плюсанул kami. От себя добавлю (чтоб был ) пример с анонимным потоком procedure TFormMain.LoadList; begin try // Что-то делаем... TThread.Synchronize(nil, procedure begin // Снихронизируемся с основным потоком, меняем состояние компонентов на форме и т.д. end); // Опять что-то делаем... finally // Выполняем обязательные операции end; end; procedure TFormMain.ButtonClick(Sender: TObject); begin // ListView1.Items.Clear; // Cоздаём анонимный поток TThread.CreateAnonymousThread(LoadList).Start; end; Ещё в студии есть семплы по работе с потоками. C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpAsyncDownload C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpDownload и ещё где-то там лежат...
    1 балл
  10. kami

    argument out of range Listview(Баг ?)

    точно не правильно. 1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме. 2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали. Посему, правильно с технической точки зрения (упустим пока архитектуру) будет: 1. в execute создать сетевой компонент и выполнить запрос. 2. Распарсить запрос 3. Передать результаты в основной поток и уже в нем работать с ListView. Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
    1 балл
  11. procedure ClearLV(const aLV: TListView); begin while aLV.Items.Count > 0 do aLV.Items.Delete(0); end; вызывать так ClearLV(ListView1);
    1 балл
  12. *** Небольшой обмен опытом *** Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками. function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; Функция для расчета размера прямоугольника, занимаемого однострочным текстом. Параметры: Text - Текст Font - Шрифт с которым будет выводиться текст Size - если 0, то Font.Size будет использоваться из Font, иначе из данного параметра Исходный код: uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(9999, 9999); TextLayout.Font.Assign(Font); if not SameValue(0, Size) then begin TextLayout.Font.Size := Size; end; TextLayout.WordWrap := False; TextLayout.Trimming := TTextTrimming.None; TextLayout.HorizontalAlign := TTextAlign.Leading; TextLayout.VerticalAlign := TTextAlign.Leading; finally TextLayout.EndUpdate; end; Result.Width := TextLayout.Width; Result.Height := TextLayout.Height; finally TextLayout.Free; end; end; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; Функция возвращающая максимально возможный размер шрифта, для текста вписанного в заданный прямоугольник. Параметры: Text - Текст Font - Шрифт с которым будет выводиться текст Width, Height - Ширина и высота прямоугольника MaxFontSize - Максимально возможный размер шрифта Исходный код: uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; const cMaxFontSize = 512; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; var Size, Max, Min, MaxIterations: Integer; Current: TSizeF; begin Max := Trunc(MaxFontSize); Min := 0; MaxIterations := 20; repeat Size := (Max + Min) div 2; Current := CalcTextSize(Text, Font, Size); if ((Abs(Width - Current.Width) < 1) and (Width >= Current.Width)) and ((Abs(Height - Current.Height) < 1) and (Height >= Current.Height)) then break else if (Width < Current.Width) or (Height < Current.Height) then Max := Size else Min := Size; Dec(MaxIterations); until MaxIterations = 0; Result := Size; end; --- Также данные функции можно найти в этом юните
    1 балл
  13. К сожалению, это сделает функцию более медленной, я был перед выбором или скорость или точность, учитывая уже имеющиеся тормоза FMX я решил выбрать скорость. Но даже так функция работает весьма не плохо. Да, в будущем расширю обе функции для этого.
    1 балл
  14. Привет Всем! Много тем на форуме про раскраску 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
    1 балл
  15. Из моих наблюдений за 2014-2015 год, вакансии "Программист Delphi" на рынке есть, но их мало и требования в них просто жесть, т.е. работодатель хочет сразу получить очень опытного программера и платить ему копейки. Они не допускают даже возможности стажировки с целью дальнейшего принятия на постоянную основу... Я в далёком 2004, мечтал, что на Делфи можно будет писать под смартфоны. Сбылось, долго... но сбылось А все кто пытается похоронить Делфи пускай лесом идут... Не нравится, не лезь в чужую песочницу...
    1 балл
  16. Вас вообще понять не могу! Все время критикуете RAD Studio и зачем тогда тут все время? я вот отошел от C#, перекрестился и больше не хочу туда! Да вот, захожу раз месяц - поржать Чем шарп так "обидел" ? Вакансии - главный показатель востребованности. Какой смысл мучаться с языком\фреймворком, который никому не нужен ? Пройдет пару лет, а вдруг умрет - все, ты никому не нужен. Поэтому нужно наваливаться на то, что будет жить еще очень долго: java\c#. Если что - дельфи, думаю, никто из нас не забудет чтобы не мучаться нужно больше чем раз в месяц бывать на форуме. а вообще и работа есть и нет желания учить языки которые умеют столько же, сколько и делфи. просто нужно учится пользоваться инструментом, а не наваливаться на разного рода шлак. прмиеры реализации сложных приложении есть, нужны просто прямые руки и понимание того что делаете. и этим реализациям даже не помешало, что они были написаны на версиях старее Seattle (на которых якобы совсем нельзя было написать приличное приложение)
    1 балл
  17. Чтобы определить установлено ли нужное приложение или нет, нужно воспользовать следующим кодом: uses FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText; function IsAppInstalled(const AAppName: string): Boolean; var PackageManager: JPackageManager; begin PackageManager := SharedActivity.getPackageManager; try PackageManager.getPackageInfo(StringToJString(AAppName), TJPackageManager.JavaClass.GET_ACTIVITIES); Result := True; except on Ex: Exception do Result := False; end; end; В качестве параметра указываем полный путь к пакету приложения. При этом сам вызов использования может быть таким для проверки: "Установлено ли приложение com.embarcadero.Project12 или нет?": procedure TForm1.Button1Click(Sender: TObject); begin Label1.Text := BoolToStr(IsAppInstalled('com.embarcadero.Project12'), True); end;
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...