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

rareMax

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

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

  • Посещение

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

    35

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

  1.  

    В 01.07.2017 в 07:11, Роман Фил сказал:

    @rareMax Интересно есть по данному компоненту справка? Не нахожу в гугле.Сылку что вы оставили не актуальна более

    Документации, как таковой, нету. Но есть открытый исходный код + примеры.

    Проект переехал на bitBucket и даже обновляется

  2. Бага это. У меня, если приложение развернуто на весь экран и нажать на иконку в панеле задач - меняет состояние из (Разверное) в (Нормальные размеры), вместо того что бы принять состояние (Свернутое)

  3. (не знаю даже в какой ветке задать вопрос)

    нужно с помощью rtti создать класс с предустановленными значениями. Значения берутся из атрибута. Все работает кажется нормально ровно до момента когда нужно внести значение в поле. Находит нужное свойство и получает значение атрибута верно. А вот запись не работает. Подскажите где не так  делаю?

    program DemoGenerator;
    
    {$APPTYPE CONSOLE}
    {$R *.res}
    
    uses
      System.SysUtils,
      System.Rtti;
    
    Type
      // базовый аттрибут
      DemoDataAttribute = class(TCustomAttribute)
      private
        FGenerator: String;
      public
        constructor Create(Generator: String);
      published
        property Generator: string read FGenerator write FGenerator;
      end;
    
      // Обслуживаемый класс
      TSomeType = Class
      private
        fPhone: string;
      published
        [DemoData('+1800764328')]
        property Phone: string read fPhone write fPhone;
      End;
    
      // Управляющий класс
      TMegaSuperClass = Class
        Function Go<T: Class, constructor>: T;
      End;
    
    Procedure Test;
    var
      LMsc: TMegaSuperClass;
      New: TSomeType;
    Begin
      LMsc := TMegaSuperClass.Create;
      try
        New := LMsc.Go<TSomeType>;
        Writeln('New.Phone: ' + New.Phone);
      finally
        LMsc.Free;
        // New.Free;
      end;
    End;
    
    { DemoDataAttribute }
    
    constructor DemoDataAttribute.Create(Generator: String);
    begin
      FGenerator := Generator;
    end;
    
    { TMegaSuperClass }
    
    function TMegaSuperClass.Go<T>: T;
    var
      LContext: TRttiContext;
      LClass: TRttiInstanceType;
      LProp: TRttiProperty;
      LAttr: TCustomAttribute;
      LField: TRttiField;
    begin
      // Инициализируем РТТИ
      LContext := TRttiContext.Create;
      LClass := LContext.GetType(T) as TRttiInstanceType;
      Writeln('LClass: ' + LClass.ToString);
      // Результат
      Result := T.Create;
      for LProp in LClass.GetProperties do
      begin
        Writeln('LProp: ' + LProp.ToString);
        for LAttr in LProp.GetAttributes do
        begin
          Writeln('LAttr: ' + LAttr.ToString);
          if LAttr is DemoDataAttribute then
          Begin
            Writeln('Attr value: ' + DemoDataAttribute(LAttr).Generator);
            // Как записать значение?
            LProp.SetValue(@Result, DemoDataAttribute(LAttr).Generator);
          End;
        end;
      end;
    end;
    
    begin
      try
        { TODO -oUser -cConsole Main : Insert code here }
        Test;
        Readln;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    
    end.

     

    Результат консоли:

    Цитата

    LClass: TSomeType
    LProp: property Phone: string
    LAttr: DemoDataAttribute
    Attr value: +1800764328
    New.Phone:

     

  4. В общем. Есть такой контрол: TSelection. Если нужно произвести операцию над каким-либо контролом(Назовем его  MyControl)  -  помещаешь MyControl на TSelection . Делаешь TAlign у MyControl на весь клиент. Делаешь HitTest := False; 

    В итоге можешь двигать и менять размеры контрола 

    Y1pQS5i.png

  5. Есть, но пока что бета. Подлагивает даже на винде. 

    https://github.com/Steema/TeeGrid

    Several classes are already provided to bind data to TeeGrid, like:

    Examples:

    // From a TDataSource or TDataSet:
    TeeGrid1.DataSource:= DataSource1;  // <-- or any dataset, FDQuery1, ClientDataSet1 etc
    
    // From a TDataSource creating a class:
    TeeGrid1.Data:= TVirtualDBData.From(DataSource1);
    
    // From an array of records or classes:
    var MyData : Array of TPerson; 
    ... fill array...
    TeeGrid1.Data:=TVirtualArrayData<TPerson>.Create(MyData);
    
    // From a TeeBI TDataItem:
    var MyData : TDataItem;
    MyData := TStore.Load('SQLite_Demo')['Products'];
    TeeGrid1.Data := TBIGridData.Create(TeeGrid1.Grid, MyData );
    
    // Emulating a TStringGrid:
    var MyData : TStringsData;
    MyData:= TStringsData.Create(10, 1000); // 10 columns, 1000 rows
    TeeGrid1.Data:= MyData;
    ...
    MyData.Cells[4,50]:= 'Hello';
  6. @Brovin Yaroslav, Какой хороший человек делал реализацию TDialogService.InputQuery ?

    Первое в чем жутко накосячили - это метрика. Заголовок формы, если он больше ширины вопроса + ширины TEdit = будет обрезан. Размер текста в TEdit не влияет на ширину формы, и в итоге не видим полностью текст в TEdit(ок, это спорно, текст может быть слишком длинным, но 16 символов маловато будет). Если оставить вопрос пустым - под него все равно выделяется место. Между полем ввода и кнопками много места остается.

    Второе - этот диалог по-верх окон. Всех окон. То бишь - я сейчас пишу этот текст, основная программа под браузером, а InputQuery следит как я доношу на него. 

    Третье. Самое печальное. Он такой упрямый - что кнопкой Cancel или через системное меню его не закрыть. Только если согласиться с ним, и нажать Ок.

    И собственно вопрос - зачем так сразу делать старую версию InputQuery устаревшей, если новая еще не обкатана как следует?

    YiUNuB0.png

     

  7. 25 минут назад, Major сказал:

    А зачем тогда существует AddObject ?

     

    AddObject  используйте если нужно добавить несколько объектов в другой объект. Например несколько  MyLabel_N  в  MyRect/

     

    И считайте что  FParent.AddObject(FChild)  и  FChild.Parent := FParent это просто синонимы

  8. Открывал в Word 2k16. В этом файле как таковых переносов строки(#13#10) нет. Что-бы сделать перенос строки в документе - нужно добавить приблизительно такой код:

    <w:p w:rsidR="007F56FD" w:rsidRDefault="007F56FD"/>

    (на сколько я понял - это новый параграф.)

    Что бы написать текст в новом параграфе:

    <w:p w:rsidR="008B3AED" w:rsidRDefault="00F824AB"><w:r><w:t>%you_simple_text</w:t></w:r></w:p>

     

  9. "Создать" <> "Активировать".

    Стиль (Который нужно загрузить в TStyleBook) - создаете сами. Что бы понять как их создавать - можете воспользоваться курсами от @Brovin Yaroslav

  10. Слева вверху студии во время отладки есть Стек вызовов методов. Сверху вниз выбирай нужный метод (2е нажатие ЛК Мыши) и студия будет показывать выбранный метод. Чуть ниже будет таблица Локальных переменных. Поочередно спускайся вниз по колл-стеку и проверяй состояния переменных. 

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