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

dnekrasov

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

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

  • Посещение

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

    52

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

  1. 8 минут назад, лёля сказал:

    Image2 в качестве карандаша использовать

    Если в качестве курсора (картинки) карандаша, то ещё следует изучить как преобразовывать координаты:

    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Single);
    begin
      if D=1 then
        Image2.Position.Point := Image1.LocalToAbsolute(PointF(X, Y));
    end;

    Да и HitTest у Image2 следует поставить False, а клик отслеживать на Image1. Да и когда D=1 и курсор находится внутри Image1 курсор мышки лучше сделать невидимым.

    Да и вообще - рисовать удобнее на PaintBox

  2. А этот код и не должен ничего рисовать.

    1. Почитайте про TPathData и его методы (хотя бы MoveTo и LineTo)
    2. У одного Canvas должно быть одинаковое количество BeginScene и EndScene - иначе получите Exception.
    3. В Image1MouseMove вообще не понятно что Вы хотели сделать.
  3. Недавно решил одну проблемку, которая долго мучала - решил поделиться, может кому ещё пригодится.

    При работе с двумя мониторами или с монитором и проектором часто возникает необходимость запретить окну "исчезать" при наведении курсора мыши на миниатюру другого приложения в панели задач. Чтобы это сделать надо:

    uses
      ...
      Winapi.DwmApi
      ...
    
      TMainForm = class(TForm)
      ...
      protected
        procedure CreateHandle; override;
      ...
      end;
    ...
    procedure TMainForm.CreateHandle;
    var
      Val, Res: Integer;
    begin
      inherited CreateHandle;
    
      Val := 1;
      Res := DwmSetWindowAttribute(FormToHWND(Self), DWMWA_EXCLUDED_FROM_PEEK, @Val, SizeOf(Val));
      {$IFDEF DEBUG}
      if Res <> S_OK then
        ShowMessage(SysErrorMessage(Res));
      {$ENDIF}
    end;

    Спасибо @Alex7wrt за наводку

  4. TRectangle для цвета, TBevelEffect для утопленности и TText для текста. А можно сделать кастомный стиль для TLabel по тому же сценарию.

    38 минут назад, d7d1cd сказал:

    А скажите, чем TText отличается от TLabel

    Родителем. TText позволяет просто вывести текст, а TLabel, например, позволяет вывести текст с определённым стилем, указав StyleLookup.

     

  5. 43 минуты назад, Roma77751 сказал:

    если есть желание давайте попробуем разобраться с этим...я за!)

    Давайте

      TInternalColor = packed record
        case Integer of
          0:
    {$IFDEF BIGENDIAN}
            (A, R, G, B: System.Byte);
    {$ELSE}
            (B, G, R, A: System.Byte);
    {$ENDIF}
          1:
            (Color: TAlphaColor);
      end;
    
    ...
    
      TGifRGB = packed record
    {$IFDEF BIGENDIAN}
              B, G, R: Byte;
    {$ELSE}
              R, G, B: Byte;
    {$ENDIF}
      end;
    
    ...
    
      procedure ReadPalette(Stream: TStream; Size: Integer; var APalette: TPalette);
      var
        RGBEntry: TGifRGB;
        I: Integer;
        c: TInternalColor;
      begin
        SetLength(APalette, Size);
        for I := 0 To Size - 1 Do
        begin
          Stream.Read(RGBEntry, SizeOf(RGBEntry));
          with APalette[I] do
          begin
            R := RGBEntry.R;
            G := RGBEntry.G;
            B := RGBEntry.B;
            A := $FF;
          end;
        end;
      end;

    Попробуйте заменить объявления типов и чтение палитры (то, что Вы меняли). На винде в таком виде работает правильно. Если на Android тоже будет всё ок, то можно считать, что теперь всё в порядке.

  6. 1 час назад, Roma77751 сказал:

    ПРОБЛЕМА РЕШЕНА! Всем спасибо, отдельное спасибо dnekrasov и IVGSoft, натолкнули на верную мысль. Только менять переменные надо было тут 

     Begin
          Stream.Read(RGBEntry, SizeOf(RGBEntry));
          With APalette do
          begin
            B := RGBEntry.R or (RGBEntry.R shl 8);
            G := RGBEntry.G or (RGBEntry.G shl 8);
            R := RGBEntry.B or (RGBEntry.B shl 8);
            A := $FF;
          end;

    А Вы под Windows проверили? Теперь у меня (с Вашим исходником) цвета R и B поменялись. Да и вообще, что-то мне совсем непонятна такая запись

     B := RGBEntry.R or (RGBEntry.R shl 8);

    т.е. тут байту присваивается двухбайтное значение.

    Да и проблема, как мне кажется, здесь в том, что при объявлении TInternalColor учитывается порядок байт (Big-Endian или нет), а вот в объявлении TGifRGB - нет. 

  7. В 23.11.2018 в 17:27, Roma77751 сказал:

    Друзья подскажите плз, почему гифки по этому коду отображаются без красной цветовой гаммы

    Точно не скажу, но мне кажется, что проблема в объявлении TInternalColor. По идее, должно быть так:

      TInternalColor = packed record
        case Integer of
          0:
            (
            {$IFDEF BIGENDIAN}
              A, R, G, B: Byte;
            {$ELSE}
              B, G, R, A: Byte;
            {$ENDIF}
            );
          1:
            (Color: TAlphaColor;
            );
      end;

    Возможности проверить нет, но попробуйте изменить - должно помочь.

  8. В 20.11.2018 в 10:59, Maka сказал:

    В Windows все нормально, а вот в Android результат получается нечетким (по всей видимости из-за использования какой-то компрессии).

    Компрессия тут ни при чём. А виновато тут масштабирование. На Windows, я так понимаю, у Вас Scale = 1, а вот на Android - зависит от устройства.

  9. 27 минут назад, Nick Peterson сказал:

    Верно ли я понял, что можно редактировать стиль в стайлбуке в IDE, затем сохранить его в .style файл и засунуть в ресурсы в таком виде, удалив стайлбуки с формы?

    Совершенно верно

  10. 17 часов назад, МедиаСистемы сказал:

    Что можете посоветовать?

    Без исходников сложно что-то сказать. У меня больше тысячи небольших изображений в скролл динамически подгружаются - и никаких проблем не возникает. Так что проблема не в скролле а в Вашем механизме загрузки.

  11. 12 часов назад, Nick Peterson сказал:

    ...путем редактирования файла со стилем и формы в блокноте. Т.е. берешь кусок текста из файла стиля, копируешь его на форму в TImage оттуда сохраняешь, правишь в фотошопе и тп) Более простого способа нет?

    Есть. У любого TStyleObject есть свойство SourceLookup в котором указывается название стиля в котором хранится изображение. Ищем его в дереве стилей и уже с ним работаем как с обычным TImage (находим свойство MultyResBitmap и с его помощью сохраняем или загружаем изображение).

    А с помощью свойства SourceLink (ActiveLink, HotLink и т.д.) указываем область изображения из которой берётся вид контрола для нужного состояния.

    Вы вполне можете добавить свой стиль (TImage), чтобы не редактировать исходное изображение, и использовать его в качестве SourceLookup для своих стилей

  12. 12 часов назад, Nick Peterson сказал:

    Надо ли создавать View и загружать в них стили заново в стайлбуки, как пишется в справке

    View менять не обязательно (только если у Вас отличается внешний вид окна на разных платформах). Главное чтобы стиль поддерживал нужную Вам платформу. У меня прекрасно работает с одним View Master и на винде и на маке.

    А вообще, я уже отказался от StyleBook-ов, практика показала, что они нужны только в дизайне, чтобы правильно расположить контролы. Лучше добавить файл стиля в ресурсы проекта и грузить его динамически

    var
      Style: TFmxObject;
    begin
      Style := TStyleManager.GetStyleResource(AResName);
      TStyleManager.SetStyle(Style);
    end;

     

  13. 12 часов назад, Nick Peterson сказал:

    2) Как поменять дефолтный шрифт во всех элементах сразу? В файле со стилем не нашел записи Segoe UI, где вообще это прописано? Т.е. я хочу чтобы все Segoe UI заменились на скажем Tahoma

    Прописан дефолтный шрифт в FMX.Platform.Win.pas

    function TPlatformWin.GetDefaultFontFamilyName: string;
    begin
      if TOSVersion.Check(6) then
        Result := 'Segoe UI'
      else
        Result := 'Tahoma';
    end;

    Копируете этот юнит к себе в папку проекта и меняете название шрифта на нужный Вам. Более простого пути нет.

  14. 8 минут назад, Nick Peterson сказал:

    Как же я сделаю два разных стиля прогрессбаров с одинаковым названием

    А зачем с одинаковым? Даёте каждому своё имя, а у контрола указываете какой использовать с помощью свойства StyleLookup

  15. 12 часов назад, Nick Peterson сказал:

    когда в одном из тестов мемо с коротеньким текстом на 2 страницы загрузило ЦПУ на 20% при скролле

    Вряд ли это проблема FMX. Создайте новый проект, киньте мемо и попробуйте поскроллить - я уверен, что такой загрузки ЦПУ не будет.

    12 часов назад, Nick Peterson сказал:

    Но вот общий вид приложения, эти стремные шрифты, несоразмерные кнопочки и тп

    Непонятно что Вы имеете ввиду. Всё это очень просто настраивается или стилем или на самой форме.

    12 часов назад, Nick Peterson сказал:

    Теперь от лирики к существу

    По-моему, единственная Ваша проблема - это мида конвертер

    По собственному опыту перевода могу сказать, что если создавать формы вручную и переносить в них логику, то всё получается довольно просто и проблем особых не возникает. Да и на MacOS практически всё работает без проблем.

    12 часов назад, Nick Peterson сказал:

    Дельные консультации, а также практическую помощь (стили, советы, куски кода)

    Сначала опишите конкретную проблему (желательно с кусками кода), а после этого вы получите дельные консультации и, заметьте, совершенно бесплатно. А пользуясь поиском по форуму - Вы найдёте решение подавляющего числа проблем, которые у Вас возникнут.

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