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

Лидеры

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

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

    Модераторы


    • Баллы

      4

    • Постов

      2 517


  2. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      3

    • Постов

      842


  3. kami

    kami

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


    • Баллы

      3

    • Постов

      643


  4. Error

    Error

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


    • Баллы

      2

    • Постов

      167


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

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

  1. 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 и ещё где-то там лежат...
    3 балла
  2. kami

    argument out of range Listview(Баг ?)

    точно не правильно. 1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме. 2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали. Посему, правильно с технической точки зрения (упустим пока архитектуру) будет: 1. в execute создать сетевой компонент и выполнить запрос. 2. Распарсить запрос 3. Передать результаты в основной поток и уже в нем работать с ListView. Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
    3 балла
  3. procedure ClearLV(const aLV: TListView); begin while aLV.Items.Count > 0 do aLV.Items.Delete(0); end; вызывать так ClearLV(ListView1);
    2 балла
  4. Pax Beach

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

    Создание Android приложений с NDK R13 Не мог смириться с суевериями ), и решил сам проверить. Delphi не дружит с линкером (компоновщиком) версии 4.9, а с 4.8 дружит нормально. Все остальное на вкладке NDK использую из последнего релиза. С сегодняшнего дня, я живу вот так: PS: Интересно, если компоновщик брать из каталога другой архитектуры, приложения заработают корректно на устройствах с Intel?
    1 балл
  5. TMediaPlayerControl при проигрывании видео всегда отображается поверх всех элементов. Это особенность реализации плеера в FMX. Можно попробовать TMediaPlayerControl.Visible:=False;
    1 балл
  6. такое давно есть, поэтому в modernLV есть правильный способ удаления procedure TAppearanceListView.ItemsClearTrue; // ZuBy begin while Items.Count > 0 do Items.Delete(0); end;
    1 балл
  7. *** Небольшой обмен опытом *** Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками. 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 балл
  8. К сожалению, это сделает функцию более медленной, я был перед выбором или скорость или точность, учитывая уже имеющиеся тормоза FMX я решил выбрать скорость. Но даже так функция работает весьма не плохо. Да, в будущем расширю обе функции для этого.
    1 балл
  9. если ListView.ItemIndex = -1, тогда элемент не выбран, если <>-1, то это и есть индекс выбранного элемента
    1 балл
  10. тебе нужно знать какой сейчас элемент выбран в listview тогда так можно попробовать. label.Text:=ListView1.Selected.Index.ToString(); покажет какой элемент сейчас выбран в listView
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...