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

dnekrasov

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

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

  • Посещение

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

    52

Сообщения, опубликованные dnekrasov

  1. 3 минуты назад, Вадим Смоленский сказал:

    Я и рад бы это опробовать но не понял, куда именно нужно вставлять такое смещение в случае FillText

    Ну как же? В первом параметре идет прямоугольник в который выводится текст. Ему и сделать Offset(-PD.GetBounds.Left, -PD.GetBounds.Top)

    7 минут назад, Вадим Смоленский сказал:

    Хорошо бы еще научиться выравнивать его, чтобы он не лепился к этим краям, а вставал бы в середину указанного прямоугольника. Не приходит пока в голову, как это сделать

    Всё просто:

    PD.Translate(-PD.GetBounds.Left + DestRect.Left + (DestRect.Width - PD.GetBounds.Width) / 2, -PD.GetBounds.Top + DestRect.Top + (DestRect.Height - PD.GetBounds.Height) / 2)
  2. 3 часа назад, Letter сказал:

    Хотел изменить png в  стиле .fsf, а как вытащить картинку и обратно вставить?

    Если 2 раза на stylebook нажать попадаю в style designer там файл .fsf открывается ,а   как картинку вытащить и вставить?

    В StyleDesigner-е находим стиль, объект которого типа TImage и называется, обычно, "[имя файла стиля без расширения]style.png" , и работаем с ним как с обычным TImage. Вот пример из стандартного стиля iOSBlack.fsf
    Clip2net_180202232409.png.289000610a44544335947fdecd9cde4f.png

  3. 1 минуту назад, x11 сказал:

    Это баг, получается?

    Похоже на то.

    2 минуты назад, x11 сказал:

    Где-то в справке написано, что под виндой нельзя передавать массив, где больше одного элемента?

    Нет, это видно из исходников, и не больше одного элемента а размерности параметров APrompts и AValues должны совпадать. От размерности APrompts зависит количество полей ввода в диалоге.

  4. Лет 15 назад меня заставили написать один сборный контрол (как я ни старался убедить что фрейм лучше - не прокатило) - до сих пор - как вспомню, так вздрогну

    16 минут назад, Slym сказал:

    но хз, надо еще подумать

    Чё тут думать - ТРЯСТИ НАДО :)

  5. 9 минут назад, Slym сказал:

    Вы посмотрите как TEdit сделан и прочие контролы... аналогично - куча TLayout-ов и прочей ГУИстики... 

    Вот только все они наследованы не от TStyledControl. Очень редко можно встретить в стиле что-то заранее стилизованное.

    30 минут назад, Slym сказал:

    так что "не подходит" - не засчитано

    Не подходит StyleData - кто Вам мешает работать с FindStyleResource

    32 минуты назад, Slym сказал:

    ScrollBox не подходит для работы в стиле...

    Сделать можно все что угодно - вот только насколько оно будет обосновано и стоит ли оно затраченного времени - решать Вам

  6. О как! Вы решили создать стиль для всего ОКНА! Стили для этого не предназначены. 

    18 минут назад, Slym сказал:

    в дереве стиля не увидите text, и StylesData['text.text']:='Hello world!'; - ничего не отобразит... т.к. ScrollBox - "фиктивный" контейнер, реальный контейнер ScrollBox.ContentLayout

    Ну так Вы же сами себе и ответили. Отсюда следует, что механизм работы со стилями просто для этого не подходит.

     

  7. 1 час назад, Slym сказал:

    для примера возьмем MessageBox

    Чёт я вообще ничего не понял... Что такое "скрол" и куда он "бросается". Что означает "намертво съедает чаилдов". StylesData чего и куда не может добраться? На каком этапе Вы выполняете указанный вами код? Из чего состоит "MessageBoxStyle". Что означает "ну не загрузился еще стиль" - вы не подгрузили его в проекте или предполагаете, то он еще не применился к контролу?

     

  8. По-моему вообще некорректно. Внешне-то будет выглядеть как надо, а вот логики работы не будет вообще. Ведь стиль - это только описание того, как контрол должен выглядеть, а не как работать.

    Кстати, копию стиля легче получить так

    MainControl := FindStyleResource('ScreenFogStyle', True);

     

  9. 39 минут назад, wamaco сказал:

    Первый и второй вариант работает!

    Последний - НЕТ!

    Из этого следует вывод, что шрифты надо регистрировать до применения стиля (если через TStyleManager) или до создания формы (если StyleBook).

    В общем лучше делать сразу после Application.Initialize - думаю это правильнее всего.

  10. В 12.01.2018 в 16:56, wamaco сказал:

    Интересный эффект, если запустить демку один раз, то "квадраты", если не закрывая, запустить еще раз (второй экземпляр), то иконки показывает!

    Единственное моё предположение из-за чего это может быть - это момент регистрации шрифтов.

    Т.к. у меня это воспроизвести не получается - то у меня большая просьба к @wamaco отредактируйте, плз, файл проекта и попробуйте запустить

    ...
    begin
      TIconicFont.FontsReg;
      try
        Application.Initialize;
    
        TStyleManager.TrySetStyleFromResource('STYLE_Dark');
    
        Application.CreateForm(TMainForm, MainForm);
        Application.Run;
      finally
        TIconicFont.FontsUnreg;
      end;
    end.

    Ну и если запустится нормально, то еще 2 варианта (чтоб точно знать когда надо регистрировать шрифты)

    1:

    ...
    begin
      Application.Initialize;
    
      TIconicFont.FontsReg;
      try
        TStyleManager.TrySetStyleFromResource('STYLE_Dark');
    
        Application.CreateForm(TMainForm, MainForm);
        Application.Run;
      finally
        TIconicFont.FontsUnreg;
      end;
    end.

    2:

    ...
    begin
      Application.Initialize;
    
      TStyleManager.TrySetStyleFromResource('STYLE_Dark');
    
      TIconicFont.FontsReg;
      try
        Application.CreateForm(TMainForm, MainForm);
        Application.Run;
      finally
        TIconicFont.FontsUnreg;
      end;
    end.

     

  11. 1 час назад, Вадим Смоленский сказал:

    Там это едва ли подойдет

    Ну почему же:

    var
      F: TFont;
      PD: TPathData;
    begin
      F := TFont.Create;
      try
        F.Family := 'Kozuka Gothic Pr6N B';
        F.Size := 60;
        with TBitmap.Create do
        try
          Canvas.Font.Assign(F);
          PD := TPathData.Create;
          try
            if Canvas.TextToPath(PD, RectF(0, 0, 10000, F.Size), '字字字 AsD АыЩ', False, TTextAlign.Leading, TTextAlign.Leading) then
            begin
              PathLabel.Width := PD.GetBounds.Width;
              PathLabel.Data := PD;
            end;
          finally
            PD.Free;
          end;
        finally
          Free;
        end
      finally
        F.Free;
      end;
    end;

     

  12. 15 минут назад, x11 сказал:

    А кто заполняет колонку Identifier так правильно?

    Ручками в поле "Resource identifier"

    16 часов назад, x11 сказал:

    Но как я их вставил в проект не могу понять.

    Если Вы вставляли - то Вы и заполняли :)

  13. В 12.01.2018 в 14:47, Вадим Смоленский сказал:

    В своем проекте (это японско-русский словарь) мне приходится выводить на TImage.Bitmap.Canvas хранящиеся в юникоде иероглифы

    Чё-то я изначально затормозил... Если Вам просто надо отобразить иероглиф - то можно ведь сделать всё намного проще - через TPathLabel (она должна сама обрезать все отступы)

    var
      F: TFont;
      FG: TFontGlyph;
      bmp: TBitmap;
    begin
      F := TFont.Create;
      try
        F.Family := 'Kozuka Gothic Pr6N B';
        F.Size := 60;
    
        FG := TFontGlyphManager.Current.GetGlyph(Char.ConvertToUtf32('字', 0), F, 1, [TFontGlyphSetting.Path]);
        try
          PathLabel.Width := FG.Path.GetBounds.Width;
          PathLabel.Height := F.Size;
          PathLabel.Data := FG.Path;
          // ну и если всё-таки bitmap-ка нужна
          bmp := PathLabel.MakeScreenshot;
          try
            // что-то делаем с битмапкой
          finally
            bmp.Free;
          end;
        finally
          FG.Free;
        end;
      finally
        F.Free;
      end;
    end;

     

×
×
  • Создать...