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

HyperZen

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

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

  • Посещение

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

    1

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

  1. И еще вопрос: правильно ли я поступаю создавая стиль для TToolBar - кидаю на него компонент TRectangle, разукрашиваю его в цвет, который мне нужен. Ставлю Align = Client, например.

    Как изменить цвет у Header компонента TListBox? Все тот же Rectangle?

  2. 1 час назад, ZuBy сказал:

    а переключать стили изменяя Stylelookup компонента, и не забываем про ApplyStyleLookup NeedStylelookup

    По-моему как-то неудобно это. А если у меня на форме достаточно большое количество компонентов, все их перечислять трудновато.

    Проще использовать другой StyleBook и переключать свойство самой формы. Не знаю на сколько это верно.

  3. Кто-то может привести пример, как говорится, "от и до" - как правильно создавать стили для компонентов. Например, найти цвет текста в стиле для TListBox мне так и не удалось.

    Как я понимаю данные действия:

    Создаем проект, кидаем на форму, например, TListView, кликаем правой кнопкой мыши по нему, жмем, в зависимости от необходимости либо Edit Default Style, либо Edit Custom Style, изменяем цвет фона, текста и пр. Можно тут же данный стиль сохранить как файл стиля.

    Автоматически на форме при этом создается компонент StyleBook. Теперь, чтобы применить данный стиль необходимо изменять свойство StyleBook самой формы (это при условии, что мы использовали Edit Default Style, если использовали Custom - то надо переключать свойство  StyleLookup необходимых компонентов).

    Чтобы вернуться на дефолтный стиль - кидаем на форму еще один StyleBook (вот тут вопрос - можно ли в одном стайлбуке использовать и переключать в рантайме стили?), в нем ставим стиль по-умолчанию.

    Переключая данные стайлбуки в форме - меняем стиль приложения.

    Верно? Укажите, пожалуйста, на мои ошибки.

  4. Очень интересует тема про всплывающие подсказки. Как организовать всплывающую подсказку (которая появляется на время и исчезает сама) по типу подсказки, например, когда выходишь из ES проводника, либо, когда обновляешь базы антивируса DrWeb?

    Есть такой стандартный компонент, или городить огород?

  5. Отличный пример! Но наблюдается какая-то проблема с отрисовкой текста.

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

    Не очень бы хотелось пользователю предлагать вариант "выйти-зайти" в приложение, для изменения режима "дня и ночи"...

  6. 21 час назад, Евгений Корепов сказал:

    Попробуйте проверить отладкой какой размер шрифта попадает в GetTextHeight. Потому что по умолчанию размер 12, а в стиле размер может быть 18.

    Проверил, размер шрифта попадает тот, который у меня грузится в SpinEdit во время создания формы, и он же устанавливается сразу в момент все той же загрузки. Стилей не использую.

    Ваш пример выше хороший, но не могу его допилить для использования TListView в DynamicAppearance режиме (если его вообще надо допиливать - просто не получилось :) ).

  7. В 07.06.2016 в 21:44, Brovin Yaroslav сказал:

    Вот пример вычисления высоты итема. ListViewVariableHeightItems2.zip

    Ярослав, сегодня, вновь тестируя различные размеры шрифтов, обнаружил, что если по умолчанию выставить размер шрифта 14 (под Андроид), расчет все равно неверный - не хватает буквально 5% высоты, добавлять ее вручную не хочется, потому как при всех других размерах все корректно. Если изменить размер шрифта в рантайме - и вернуть на 14, то все опять корректно. Неправильный подсчет только при запуске приложения и в случае, если размер стоит = 14.

    Вышел из положения добавляя при расчете 0.1 к размеру шрифта:

      Drawable.Font.Size := spnBoxFontSize.Value + 0.1; // при старте программы размер выставляется относительно значения SpinBox'а

  8. 22 часа назад, dmitry сказал:

    HyperZen, обсуждение читал, Спасибо. Не могли бы Вы приложить Ваш код, который работает 100% на всех платформах.

    Вам надо посмотреть уроки как работать с DynamicAppearance режимом, в программе Вы ссылаетесь на поля с именами TaskName, Status - я их в программе вообще не нашел, не понятно как вообще TListView создает Item'ы без ошибок...

    1.jpg

  9. Добрый день!

    Создал свой стиль компонента TListView, как учил на вебинаре Евгений Крюков (Edit Custom Style).

    Стиль простой - цвет фона - черный, цвет букв Item'а - светло серый, разделительная черта - светло серая.

    В приложении хочу использовать что-то наподобие режимов дня и ночи. Данный стиль является "ночным".

    Дефолтный стиль TListView использую как "дневной".

    Вопрос в следующем: при переключении данных стилей в рантайме, наблюдается неправильная работа: цвет фона меняется корректно на всю высоту компонента, а вот цвет букв в видимой области не меняется, но стоит прокрутить TListView ниже видимой области - там цвет шрифта изменился, и так до конца списка можно создать такую вот непонятную "зебру".

    Меняю стили при помощи свойства StyleLookup компонента TListView. В чем может быть проблема?

     

    1.jpg

  10. Добрый день!

    Использую компонент TListBox, который лежит на MultiView для создания меню приложения. На одном итеме расположен - TSpinBox, на другом - TSwitch.

    На обработчике события onItemClick TListBox'а (для снятия выделения итема) использую код:

      Item.IsSelected := False;

    При входе в меню, при первом нажатии на TSwitch текущий итем выделяется и выделение не пропадает.

    На другом итеме, который содержит TSpinBox - такого нет. Из-за чего это происходит?

    Решение со снятием флажка Selectable не нравится.

    Использую Berlin.

  11. Кому интересно, вот ссылка с примерами со всеми deprecated диалогами и InputBox'ами: http://c2design5sh.blogspot.ru

    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.ListBox, FMX.Layouts,
      FMX.Platform, FMX.StdCtrls, FMX.Controls.Presentation, FMX.DialogService, FMX.ScrollBox, FMX.Memo;
    
    type
      TForm1 = class(TForm)
        ToolBar1: TToolBar;
        Label1: TLabel;
        ListBox1: TListBox;
        ListBoxItem1: TListBoxItem;
        ListBoxItem2: TListBoxItem;
        ListBoxItem3: TListBoxItem;
        ListBoxItem4: TListBoxItem;
        ListBoxItem5: TListBoxItem;
        ListBoxItem6: TListBoxItem;
        Memo1: TMemo;
        procedure ListBoxItem1Click(Sender: TObject);
        procedure ListBoxItem2Click(Sender: TObject);
        procedure ListBoxItem3Click(Sender: TObject);
        procedure ListBoxItem4Click(Sender: TObject);
        procedure ListBoxItem5Click(Sender: TObject);
        procedure ListBoxItem6Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    // uses  FMX.Platform, FMX.DialogService
    //**************************************************************************************************
    procedure TForm1.ListBoxItem1Click(Sender: TObject);
    var
      ASyncService : IFMXDialogServiceASync;
    begin
      if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface (ASyncService)) then
      begin
        ASyncService.ShowMessageAsync ( ( Sender as TListBoxItem ).Text );
      end;
    
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'ShowMessageAsync Displayed' );
    end;
    
    
    procedure TForm1.ListBoxItem2Click(Sender: TObject);
    var
      SyncService : IFMXDialogServiceSync;
    begin
      if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface (SyncService)) then
      begin
        SyncService.ShowMessageSync ( ( Sender as TListBoxItem ).Text );
      end;
    
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'ShowMessageSync Displayed' );
    end;
    
    //**************************************************************************************************
    procedure TForm1.ListBoxItem3Click(Sender: TObject);
    var
      ASyncService : IFMXDialogServiceASync;
      caption, inData : array[0..1] of string;
    begin
      caption[0]   := 'ID :';
      caption[1] := #1 + 'Pass :';  // #1 앞에 붙이면 마스킹 기능
    
      inData[0] := 'admin';  // 초기값
      inData[1] := '1234';
    
      if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface (ASyncService)) then
      begin
        ASyncService.InputQueryAsync( 'Input String', caption, inData,
          procedure (const AResult : TModalResult; const AValues : array of string)
          begin
             case AResult of
               mrOk: ( Sender as TListBoxItem ).Text := AValues[0] + '/' + AValues[1];
             end;
          end );
      end;
    
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'InputQueryAsync Displayed' );
    end;
    
    
    procedure TForm1.ListBoxItem4Click(Sender: TObject);
    var
      SyncService : IFMXDialogServiceSync;
      caption, inData : array[0..1] of string;
    begin
      caption[0]   := 'ID :';
      caption[1] := #1 + 'Pass :';  // #1 앞에 붙이면 마스킹 기능
    
      inData[0] := 'admin';  // 초기값
      inData[1] := '1234';
    
      if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceSync, IInterface(SyncService)) then
      begin
        if SyncService.InputQuerySync( 'Input String', caption, inData ) then
           ( Sender as TListBoxItem ).Text := inData[0] + '/' + inData[1];
      end;
    
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'InputQuerySync Displayed' );
    end;
    
    
    //**************************************************************************************************
    procedure TForm1.ListBoxItem5Click(Sender: TObject);
    var
      ASyncService : IFMXDialogServiceASync;
    begin
      if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface(ASyncService)) then
      begin
        ASyncService.MessageDialogAsync( 'Question ?', TMsgDlgType.mtConfirmation,
                                                       [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0,
         procedure(const AResult: TModalResult)
         begin
           case AResult of
             mrYES : ( Sender as TListBoxItem ).Text := 'YES';
           end;
         end);
      end;
    
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'MessageDialogAsync Displayed' );
    end;
    
    
    procedure TForm1.ListBoxItem6Click(Sender: TObject);
    var
      SyncService : IFMXDialogServiceSync;
      rValue, i : integer;
    begin
      if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceSync, IInterface(SyncService)) then
      begin
        rValue :=  SyncService.MessageDialogSync( 'Question ?', TMsgDlgType.mtConfirmation,
                                                 [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0 );
    
        ( Sender as TListBoxItem ).Text := rValue.ToString;
      end;
    
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'MessageDialogSync Displayed' );
    end;
    
    end.

     

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