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

Brovin Yaroslav

Администраторы
  • Постов

    2 124
  • Зарегистрирован

  • Посещение

  • Победитель дней

    390

Ответы сообщества

  1. Пост Brovin Yaroslav - сообщение в [TEdit] [XE7] Не отображается наследник от TEdit был отмечен как ответ   
    Добрый вечер,
     
    Для вашего нового контрола:
    Или Укажите явно используемый стиль:  AEdit.StyleLookup := 'editstyle'; Или переопределите название стиля по умолчанию:
    type TMyEdit = class(TEdit) protected function GetDefaultStyleLookupName: string; override; end; { TMyEdit } function TMyEdit.GetDefaultStyleLookupName: string; begin Result := 'editstyle'; end;
  2. Пост Brovin Yaroslav - сообщение в [TTabControl] Как сделать отображение всех вкладок в ряд? был отмечен как ответ   
    Добрый вечер,
    Начиная с XE9 TTabControl теперь умеет прокручивать вкладки. Добавлены дополнительные кнопки прокрутки. На мобильных платформах вкладки пролистываются пальцем.
    Для ранних версий
    Аналога компонента только кладок из VCL в FireMonkey увы нету. TTabControl из FireMonkey не умеет отображать свои закладки в несколько рядов. Так что единственными решениями пока являются: Использовать свойство TTabControl.FullSize. Заранее выбирать ширину TabControl, чтобы все вкладки поместились (понимаю, что не всегда этого можно добиться) Создать наследника от TTabControl и переопределить свой вариант расположения вкладок (метод TTabControl.RealignTabs).
  3. Пост Brovin Yaroslav - сообщение в Не получается запустить свое приложение на IPhone был отмечен как ответ   
    Ошибка запуска на iPhone
    Согласно тексту ошибки:
    [PAClient Error] Error: E0264 Unable to execute '"/usr/bin/codesign" --en "/Users/anton/PAServer/scratch-dir/IvanovAA-123/Server.app/Entitlements.plist" --deep -s "iPhone Developer" -f "/Users/anton/PAServer/scratch-dir/IvanovAA-123/Server.app"' (Error 1) [PAClient Error] Error: E0264 iPhone Developer: no identity found Проблема в том, что у вас на маке утилита подписи вашего приложения не может найти сертификат с указанным именем или алиасом. В вашем случае вы используете название "iPhone Developer". 
     
    Действия
    Необходимо убедиться, что на маке в "Связке ключей" у вас есть такой сертификат. Для этого:
    Открываем программу на маке "Связка ключей" (Она обычно расположена в папке утилиты). Просматриваем названия ключей. Например в моем случае:
    Ищите ваш сертификат разработчика, и убеждаетесь, что в начале названия стоит "iPhone Developer" до двоеточия. Если нет, то нужно в IDE RAD Studio полностью указать название вашего сертификата, как в указано на маке. Если у вас несколько сертификатов, как у меня. То в этом случае нужно обязательно в IDE указывать название сертификата полностью.

    Иначе в противном случае, утилита не сможет понять, каким сертификатом подписывать ваше приложение. Если у вас один сертификат, то можно использовать алиас сертификата (Часть полного названия названия сертификата до двоеточия)
  4. Пост Brovin Yaroslav - сообщение в [Отклонение] Не перерисовываются границы в TGrid был отмечен как ответ   
    Добрый день,
     
    Ошибку завел в трекере. Временный Workaround:
    Открыть файл FMX.Grid.pas Найти TCustomGrid.DoContentPaint Предположительно 2292 строчка. Найти код:
    if TGridOption.RowLines in Options then begin W := Content.Width - 1; P := TPointF.Create(0, TopRow * FRowHeight); P := Content.LocalToAbsolute(P); P := TControl(Sender).AbsoluteToLocal(P); P.Offset(0.5, -0.5); for I := 0 to VisibleRows do // no -1 begin Canvas.DrawLine(P, PointF(P.X + W, P.Y), LAbsoluteOpacity); P.Offset(0, FRowHeight); end; end; Добавить после P.Offset(0.5, -0.5)
    P.X := P.X + ViewportPosition.X; Добавить исправленный файл в ваш проект.
  5. Пост Brovin Yaroslav - сообщение в [Отклонение] Фильтрация текста не корректно работает с регистром был отмечен как ответ   
    Как правильно написал haword, да, такая ошибка есть в XE7. Она уже была локально устранена. 
     
    Решения для всех у кого XE7. Найти файл FMX.SearchBox.pas, заменить код:
    procedure TSearchBoxModel.DoChangeTracking; var Lower: string; begin inherited; Lower := Text.Trim.ToLower; if SearchResponder <> nil then SearchResponder.SetFilterPredicate( function (X: string): Boolean begin Result := Lower.IsEmpty or LowerCase(X).Contains(Lower); end); end; На:
    procedure TSearchBoxModel.DoChangeTracking; var Lower: string; begin inherited; Lower := Text.Trim.ToLower; if SearchResponder <> nil then SearchResponder.SetFilterPredicate( function (X: string): Boolean begin Result := Lower.IsEmpty or X.ToLower.Contains(Lower); // <-- заменить LowerCase на ToLower end); end; И добавить этот файл в ваш проект
  6. Пост Brovin Yaroslav - сообщение в Как получить последнюю "строку" в Memo ? был отмечен как ответ   
    Memo не дает такой возможности. Внутри он действительно знает всю информацию обо всех линиях. Но этот код открыт только для наследников. 
  7. Пост Brovin Yaroslav - сообщение в Как узнать позицию каретки в Edit в абсолютных координатах? был отмечен как ответ   
    var CursorPos: TPointF; begin CursorPos := Edit1.Caret.Flasher.Pos; end; Это позиция каретки в локальных координатах TEdit. Если нужно в коринатах формы, то читаем О видах координат в FireMonkey и конвертации между ними
  8. Пост Brovin Yaroslav - сообщение в Как сделать скриншот формы? был отмечен как ответ   
    На всякий случай, продублирую:
    function MakeScreenshotOfForm(const AForm: TForm): TBitmap; begin Assert(AForm <> nil); Result := TBitmap.Create(AForm.Width, AForm.Height); AForm.PaintTo(Result.Canvas); end; procedure TForm4.Button1Click(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := MakeScreenshotOfForm(Self); try Image1.Bitmap.Assign(Bitmap); finally Bitmap.Free; end; end; Еще есть статья [XE7] Создание PrintScreen'ов полных и части экранов, в ней рассказывается, как сделать скриншоты в том числе и чужих окон, правда только под Windows
  9. Пост Brovin Yaroslav - сообщение в Как узнать ширину ползунка у TScrollBar? был отмечен как ответ   
    Использовать, когда стиль для TScrollBar загружен.
    type TOpenScrollBar = class(TScrollBar); TOpenCustomTrack = class(TCustomTrack); function GetThumbWidth(const AScrollBar: TScrollBar): Single; var Track: TCustomTrack; Thumb: TThumb; ThumbWidth: Single; begin ThumbWidth := 0; Track := TOpenScrollBar(AScrollBar).Track; if Track <> nil then begin Thumb := TOpenCustomTrack(Track).Thumb; if Thumb <> nil then ThumbWidth := Thumb.Width; end; Result := ThumbWidth; end; procedure TForm4.Button1Click(Sender: TObject); begin ShowMessage(GetThumbWidth(ScrollBar1).ToString); end;
  10. Пост Brovin Yaroslav - сообщение в Как вычислить размер текста? был отмечен как ответ   
    Нужно использовать TTextLayout для этого. Это будет быстрее, чем создавать TText, TLabel, которые по сути в конечном итоге используют тот же TTextLayout.
     
    В приведенном ниже коде, нужно правильно задать требуемые настройки текста: шрифт, переносы, выравнивание и тд.
    uses FMX.TextLayout; {$R *.fmx} procedure TForm3.Button1Click(Sender: TObject); var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(Width, 1000); TextLayout.WordWrap := WordWrap; TextLayout.Font := Font; TextLayout.HorizontalAlign := TextAlign; TextLayout.VerticalAlign := VertTextAlign; finally TextLayout.EndUpdate; end; // TextLayout.TextRect; <- Здесь будет размер текста finally TextLayout.Free; end; end; Когда получите размер текста в TEdit, не забудьте, что нужно учесть размер рамки эдита и возможное наличие кнопок, что корректно задать ширину.
     
    Обновлять ширину надо в события OnChange и OnChangeTrtacking, в зависимости от требуемой вам ситуации.
  11. Пост Brovin Yaroslav - сообщение в Как правильно использовать resources an images Android? был отмечен как ответ   
    Добрый вечер,
     
    Ответ на ваш вопрос есть тут: Включение своих файлов в приложение
  12. Пост Brovin Yaroslav - сообщение в Как правильно загружать картинки в приложение Android? был отмечен как ответ   
    Когда вы выполняете отрисовку в событии OnPaint не надо вызывать BeginScene/EncScene. Это делает за вас сама форма. Так как это создает новую сцену и по сути у вас не будет рисоваться форма.
  13. Пост Brovin Yaroslav - сообщение в [TRESTRequest] Как поймать TimeOut? был отмечен как ответ   
    Ответ от Estra:
  14. Пост Brovin Yaroslav - сообщение в Где можно найти структуру StyleLookup для объектов, чтобы можно было использовать в FindStyleResource? был отмечен как ответ   
    Набросал вам программу для просмотра дерева стиля. StyleTreeViewer.zip
     
    Открываете файл стиля и смотрите из каких объектов он состоит и какие имена нужно присваивать узлам дерева стиля.
    Каждый контрол может поддерживать разные варианты реализации стилей. Поэтому используйте в качества примера тот, который вам больше подходит.  Так же рекомендую использовать растровые стили. Они значительно быстрее работают на мобильных платформах.
  15. Пост Brovin Yaroslav - сообщение в О видах координат в FireMonkey и конвертации между ними был отмечен как ответ   
    Типы координат
    В FIreMonkey различают три вида координат:
    Локальные - это координаты в системе координат контрола.  Абсолютные - это координаты в системе координат клиентской части формы. Экранные - это координаты в системе координат экрана. Соответственно, если речь идет о форме, то позиция формы задается в экранных координатах.
    Если речь идет о контролах, то в локальных координатах своего родительского контрола.
     
    Конвертация
    Локальные -> Абсолютные
    TControl.LocalToAbsolute(TPointF): TPointF Абсолютные -> Локальные
    TControl.AbsoluteToLocal(TPointF): TPointF Абсолютные -> Экранные
    TControl.Scene.LocalToScreen(TPointF): TPointF; Экранные -> Локальные
    TControl.Scene.ScreenToLocal(TPointF): TPointF;
  16. Пост Brovin Yaroslav - сообщение в Как сделать колонку таблицы с TSwitch? был отмечен как ответ   
    Начиная с версии RAD Studio XE6, в каждой колонке таблицы существует только один контрол. Он создается через метод:
    function CreateCellControl: TStyledControl; Этот контрол отображается только в текущей выделенной строке. В остальных ячейках колонка просто рисует копию изображения этого контрола. За отрисовку копии отвечает интерфейс IDrawableCell. Вам нужно подмешать этот интерфейс в ваш TSwitchCell и реализовать его методы. 
     
    P.S. В качестве примера, посмотрите на то, как реализован TCheckCell. Там как раз есть пример того, как получить изображения контрола и нарисовать его на канве.
  17. Пост Brovin Yaroslav - сообщение в [TTabControl] Как для TChangeTabAction задать свою надпись у кнопок? был отмечен как ответ   
    У TChangeTabAction есть свойство 
    TChangeTabAction.CustomText Оно служит для указания надписи на кнопках. 
  18. Пост Brovin Yaroslav - сообщение в Есть ли аналог TTouchKeyboard из VCL? был отмечен как ответ   
    Нет, такого компонента пока нету.
  19. Пост Brovin Yaroslav - сообщение в Почему у меня для TLabel неправильно вычисляется размер метки при использовании AutoSize? был отмечен как ответ   
    Как я правильно заметил, в вашем случае не был загружен стиль ваших меток. По этому вы обращались к размерам, вычисленным для настроек текста по умолчанию. А после загрузки стиля, вы уже не обновляли позицию. 
     
    На Windows настройки текста по умолчанию совпадают с настройками текста в стиле. Поэтому работает так, как вы и полагаете.
     
    Решения
    Делать перерасчет позиции в OnApplyStyleLookup или OnResize у TLabel. Принудительно загрузить стиль:
    NeedApplyStyleLookup; ApplyStyleLookup;
  20. Пост Brovin Yaroslav - сообщение в [Android] [XE7] Aniindicator очень маленький был отмечен как ответ   
    Исправлено в Update 1 для RAD Studio XE7 (#127495)
  21. Пост Brovin Yaroslav - сообщение в Как в Listview выровнять текст? был отмечен как ответ   
    Добрый вечер,
     
    Для режима Custom у текста есть свойство Width, позволяющее указать ширину текста. Поэтому вам нужно указать требуемую ширину, через это свойство (При условии, что ItemAppearance.ItemAppearance = Custom): 
    ItemObjects.Text.Width Для того, чтобы корректировать ширину области вывода текста на разных устройствах, я рекомендую использовать событие TListView.OnResize. Которое вызывается в момент изменения размера контрола. И в нем основываясь на ширине TListView вычислить размер области текста.
  22. Пост Brovin Yaroslav - сообщение в Как сделать пиксель прозрачным? был отмечен как ответ   
    Добрый день,
    Получить доступ к пикселям битмапа: Доступ к пикселям Получив доступ, изменить требуемые пиксели (в том числе прозрачность) Записать измененные данные обратно, используя функцию Unmap var Data: TBitmapData; Bitmap: TBitmap; begin Bitmap := Image1.Bitmap; if Bitmap.Map(TMapAccess.ReadWrite, Data) then try Data.SetPixel(10, 10, TAlphaColorRec.null); finally Bitmap.Unmap(Data); end; end;
  23. Пост Brovin Yaroslav - сообщение в [Отклонение] Не срабатывает событие OnChange при удалении выделенного итема был отмечен как ответ   
    Посмотрел, это не ошибка, у TListView есть специальное событие OnDelete. Которое вызывается в момент удаления элемента.
  24. Пост Brovin Yaroslav - сообщение в [Android] Странное поведение модальной формы был отмечен как ответ   
    Добрый вечер,
     
    На сколько я вижу исходники, могу сказать, что это актуально только для Android платформы. Поэтому на других нужно использовать старый подход с ShowModal без параметров.
  25. Пост Brovin Yaroslav - сообщение в Можно ли изменить настройки шрифта для одного элемента TComboBox? был отмечен как ответ   
    Для режима DropDownKind = TDropDownKind.Native TComboBox берет только текст от итемов. Поэтому, если вам нужна расскраска и пользоваться всеми свойства TListBoxItem, переключите режим на:
    ComboBox1.DropDownKind := TDropDownKind.Custom
×
×
  • Создать...