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

david_yusupov

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

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

  • Посещение

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

  1. 15 минут назад, Slym сказал:

     

    
    var
    i:integer;
    begin
      s:='hello world';
      for i:=low(s) to high(s) do
        print(s[i]);
    end;

    s.Chars[0] и все остальное из TStringHelper всегда с нуля...

    но даже так огреб при расчете суммы ean13 :)

    Просто у меня уже не мало коду на писано было и под windows – работе, и когда его на мобильный переносить стал – тут приехал

     

  2. При разработки мобильного приложение выяснил, что индекса строкового типа данных, по символно,  под Android и Windows – разная  

     Android  S[0],S[1],S[…],S[L-1]

     Windows S[1],S[2],S[…],S[L]

    Это как-то можно отрегулировать директивами компилятора, что бы одинаково  

     

  3. Вопрос, как можно установить приделы вывода графика по оси X и Y?

    На форму располагаю Два TPath, для вы вода картинки и нужно, что бы они были одинаковыми в координатных осях

  4. К понимаю, если среда может работать в разных платформах (или разных OS). Значит можно написать совой компилятор или транслятор в другой язык (JavaScript), а визуальных компонентов FMX - использовать один из framework JavaScript.

    Где можно почерпнуть знания

  5.   TTestFrame = class(TFrame)
        Rectangle: TRectangle;
      private
      end;
      
      Создаем объект:
      
      TestRectangle := TRectangle.Create;
      TestRectangle.Parent := Rectangle;
      
      Создаем его так что одна область находится за границами Rectangle
      
      TestRectangle.Position.X := -20;
      TestRectangle.Position.Y := -20;
      
      И она видна, не обрезается ее видимость 
      

    ЗЫ

    Как сделать, так что обрезалась, а тем более, когда выводим TText, тоже не обрезается

  6. Расположил несколько, TStringGrid  - в контейнере  TVertScrollBox.

    Прорисовки заголовка возникает сообщение ошибке

    image.png.a56f39ff10c8c5e2d71a8bec7f470e66.png

     

    image.png.dbe33e711e5e06cb492e9a7a8a90540c.png

     

    Когда на 

     TVertScrollBox - располагается один TStringGrid - то проблем нет, а когда два TStringGrid - по периодически возникает ошибка ... 

    не подскажите как ее решить,

    или как ее поместить в исключение, что игнорировать 

     

    // -----------------------------------------------------------------------------------------------------------------

    Немного поэкспериментировал

    Создал -   TVertScrollBox – отдельно разместил два TStringGrid – все нормально

    Могу предположить, что проблема в наследование

    TCustomDiagnosticFrame = (TFrame, ITypeFrame)

    TDiagnosticIS = class(TCustomDiagnosticFrame)

     Размещаю на TDiagnosticIS на  TVertScrollBox

     И тут и возникает проблема у TStringGrid

    test.zip

  7. У меня задача нужно в приложение использоваться jar – файл (программа пишется под windows).

    В исходниках студи есть Androidapi.Jni – как понимаю это JNI – под андройд, вопрос, как его можно переделать под Windows.Jni – (если это вообще возможности).

    Если описание JNI – хоть пуская с++, что из своего приложение запускать JVM  и выполнять файл jar (библиотеку)

  8. Вопрос очень прост, как убить запущенный поток не дожидаясь его завершение.

    Пример:

    procedure TBufferThread.Execute;
    begin
        while not Self.Terminated do
        begin
              Sleep(10000);
        end;
    end;

     

    Используя ReportMemoryLeaksOnShutdown показывает, что поток жив, после закрытие программы?

    PS

    Поток так же жив после вызова процедуры   TThread.Terminate (После того как заглянул вовнутрь понял почему, и поэтому возник вопрос, как убить поток?)

  9. В 02.08.2016 в 14:48, ZuBy сказал:

    я походу переотдыхал, что за отдельные потоки(!), таймеры на вычисления размеров. что за бред?

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

    Прилегаю файл, как и просили.

    procedure TBlocksFrame.SetInitializationLattice;
    var
      i, j: Integer;
      xRectangle: TLatticeRectangle;
      xHeight, xWidth: Single;
    begin
      xHeight := Self.Height/ROW_COUNT_SIZE;
      xWidth  := Self.Width/COL_COUNT_SIZE;
      if (xHeight > 0) and (xWidth > 0) then
      begin
        for i := 0 to ROW_COUNT_SIZE - 1 do
          for j := 0 to COL_COUNT_SIZE - 1 do
          begin
            xRectangle := TLatticeRectangle.Create(Self);
            SetPostionRectangle(xRectangle,
              j * xWidth + 1.25, i * xHeight + 1.25, xHeight - 2.5, xWidth - 2.5);
            xRectangle.Row := i;
            xRectangle.Col := j;
            xRectangle.Parent := Self;
            xRectangle.OnEnter := RectangleOnEnter;
            xRectangle.OnMouseDown := RectangleOnMouseDown;
            xRectangle.OnMouseMove := RectangleOnMouseMove;
            xRectangle.OnMouseUp := RectangleOnMouseUp;
            FLatticeles.Add(xRectangle);
          end;
      end;
    end;

    procedure TBlocksFrame.SetUpDatesLattice;
    var
      i, j, xIndex: Integer;
      xLattice: TLatticeRectangle;
      xHeight, xWidth: Single;
    begin
      xHeight := Self.Height/ROW_COUNT_SIZE;
      xWidth  := Self.Width/COL_COUNT_SIZE;
      if (xHeight > 0) and (xWidth > 0) then
      begin
        for i := 0 to ROW_COUNT_SIZE - 1 do
          for j := 0 to COL_COUNT_SIZE - 1 do
          begin
            xIndex := i * COL_COUNT_SIZE + j;
            xLattice := FLatticeles[xIndex];
            if Assigned(xLattice) then
            begin
              SetPostionRectangle(xLattice,
                j * xWidth + 1.25, i * xHeight + 1.25, xHeight - 2.5, xWidth - 2.5);
            end;
          end;
      end;
    end;

    // сейчас так

    procedure TBlocksFrame.TimerTimer(Sender: TObject);
    begin
      if (FSelfHeight = 0) and (FSelfWidth = 0) then
      begin
        FSelfHeight := Self.Height;
        FSelfWidth := Self.Width;
        Self.SetInitializationLattice;
      end
      else
      begin
        if (FSelfHeight <> Self.Height) or (FSelfWidth <> Self.Width) then
        begin
          FSelfHeight := Self.Height;
          FSelfWidth := Self.Width;
          if FLatticeles.Count = 0 then
            Self.SetInitializationLattice
          else
          begin
            SetUpDatesLattice;
            SetUpDatesBlock;
          end;
        end;
      end;
    end;

    // было так

    procedure TBlocksFrame.Resize;
    begin
      inherited Resize;

      if (FSelfHeight = 0) and (FSelfWidth = 0) then
      begin
        FSelfHeight := Self.Height;
        FSelfWidth := Self.Width;
        Self.SetInitializationLattice;
      end
      else
      begin
        if (FSelfHeight <> Self.Height) or (FSelfWidth <> Self.Width) then
        begin
          FSelfHeight := Self.Height;
          FSelfWidth := Self.Width;
          if FLatticeles.Count = 0 then
            Self.SetInitializationLattice
          else
          begin
            SetUpDatesLattice;
            SetUpDatesBlock;
          end;
        end;
      end;
    end;

    block.zip

  10. Cтолкнулся с не большой проблемой. Разрабатываю фрейм, использованием событие OnResize. Суть проблемы создаем динамически очень много объектов, и в зависимости от размера фрейма, обсчитываем положение и обновление размеры обетов.

    Приводит к зависанию всего приложения.

  11. Точнее, как работает наследование.

      TNodeItem = class(TTreeViewItem)
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;
     
      TNodeItem2 = class(TNodeItem)
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;
    
    реализация
    
    { TNodeItem }
    
    constructor TNodeItem.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
    
    end;
    
    destructor TNodeItem.Destroy;
    begin
    
      inherited;
    end;
    
    { TNodeItem2 }
    
    constructor TNodeItem2.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
    
    end;
    
    destructor TNodeItem2.Destroy;
    begin
    
      inherited;
    end;

    // Вот самое интересное, не много не понятно почему так

    procedure TForm1.Button2Click(Sender: TObject);
    var
      xTree: TTreeViewItem;
    begin
      // Тут все работает
      xTree := TTreeViewItem.Create(nil);
      xTree.Text := 'Тест2';
      xTree.Parent := TreeView1;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      xTree: TNodeItem;
    begin
      // И тут все работает
      xTree := TNodeItem.Create(nil);
      xTree.Text := 'Тест3';
      xTree.Parent := TreeView1;
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    var
      xTree: TNodeItem2;
    begin
      // А вот тут не работает, узел добавляется, а текста нет.
      xTree := TNodeItem2.Create(nil);
      xTree.Text := 'Тест4';
      xTree.Parent := TreeView1;
    end;

     

  12.  

     

    if Assigned(DrugsFrame) then

    begin

      FreeAndNil(DrugsFrame);

      DrugsFrame := nil;

    end;

    При использовании FreeAndNil использовать NIL не нужно

     

    После инициализации, все элементы Fram – а, который участвовал в качестве Parent – а.

    Но системные кнопки, свернуть, развернуть и закрыть приложение — не доступны.

    Если честно- не совсем понятна первая строка. И если хотите помощи - смотрите правила размещения тем(прикрепляйте демку, в которой будет суть вашей проблемы)

     

    P.S. Использование фреймов - теоретически очень упрощает разработку. На практике же - будьте готовы к ошибкам Рад студио при работе с фреймами. 

     

    Разобрался все заработала... как говорится глупость с морозил

  13. Производим заполнение ListBox

    for i := i fo Count - 1 do
    begin
            xItm := TListBoxItem.Create(nil);
            xItm.Height := 30;
            xItm.Parent := ListBox;
            xItm.Text := xV2.Name;
            xItm.Data := xV2;
    end;

    Тут все нормально заполняется, но как и вызваем ListBox.clear, список зачищается

    при повторном заполнение

    восстанавливаются предыдущий значение

  14. После инициализации:

    if not Assigned(DrugsFrame) then

    begin

      DrugsFrame := TDrugsFrame.Create(nil);

      DrugsFrame.Parent := AParent;

      DrugsFrame.Align := TAlignLayout.Client;

    end;

     

    в качестве Parent выступает, другой об Fram - а

     

    После удаление объекта:

    if Assigned(DrugsFrame) then

    begin

      FreeAndNil(DrugsFrame);

      DrugsFrame := nil;

    end;

     

    После инициализации, все элементы Fram – а, который участвовал в качестве Parent – а.

    Но системные кнопки, свернуть, развернуть и закрыть приложение — не доступны.

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