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

Armageddets

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

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

  • Посещение

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

  1. Исправил код на вот такой, но рисуется вместо картинки черный квадрат, а выставляя половинную прозрачность рисуется серый квадрат. То есть прозрачность - применяется.

    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
      const ARect: TRectF);
      var C1,C2:TRectF;
    begin
      PaintBox1.Canvas.BeginScene;
      C1:=rectF(0,0,420,680);
      C2:=rectF(0,0,420,680);
      fon.SetSize(420,680);
      Buf.Canvas.DrawBitmap(fon,C1, C2, 1); //0-1 prozrachnost (opacity), 0.5  - na polovinu prozrachniy
      PaintBox1.Canvas.DrawBitmap(Buf,C1, C2, 0);
      PaintBox1.Canvas.EndScene;
    end;

    Сам проект тоже прилагаю, может я с ним нахимичил что-то:
    https://dropmefiles.com/XXqWc

  2. Ой - грубая ошибка с моей стороны. Прошу прощения.

    Теперь зависание и правда пропало - единственное - изображение так и не рисуется на форме - просто черный экран. Видимо я все еще делаю что-то не так. Компилирую приложение на Leagoo T5c (Android 7).

    Может я неправильно задаю параметры в прорисовке DrawBitmap?

  3. Спасибо всем большое. Да пропустил Create по невнимательности.
    А картинки я через resource and images загружаю так как все примеры, которые я находил так загружали. В Deployment тоже отображается путь к моей картинке на пк.
    По поводу bmp - в ресурсах увидел тип данных bitmap, поэтому, видимо, ошибочно решил, что поддержка этого формата есть.
    Проект, который я делаю - это мини игра (из старого своего проекта), которую я решил попробовать портировать под андроид и заодно разобраться с программированием под андроид

    В итоге я сделал следующие изменения:
    Прорисовку убрал из FormPaint в таймер:
    procedure TForm1.Timer1Timer(Sender: TObject);
      var C1,C2:TRectF;
    begin
      Canvas.BeginScene;
      C1:=rectF(0,0,420,680);
      C2:=rectF(0,0,420,680);
      fon.SetSize(420,680);
      Buf.Canvas.DrawBitmap(fon,C1, C2, 0); //0-1 prozrachnost (opacity), 0.5  - na polovinu prozrachniy
      Canvas.DrawBitmap(Buf,C1, C2, 0);
      Canvas.EndScene;
    end;

    Картинку bmp перезалил в формате jpg и добавил недостающую строчку Fon.Create;

    procedure DownloadImages;
    var RS: TResourceStream;
    begin

      RS:=TResourceStream.Create(HInstance, 'FonMain', RT_RCData);
      try
        fon.Create;

        Fon.Width:=420;
        Fon.Height:=680;
        Fon.LoadFromStream(RS);
      finally
        RS.Free;
      end;

    end;

    Но в итоге андроид приложение все еще виснет на отображении картинки заставки с огнем (то есть загрузка изображения все еще не идет).

  4. Всем доброго времени суток. Начал осваивать создание приложений на андроид и столкнулся с проблемой. Приложение компилировалось ровно до того момента пока я не попытался загружать изображение из ресурсов. В ресурсы добавлена картинка с именем Fon (идентификатор FonMain) и типом RCData, формат Bmp (24 бита). Если убрать строчку DownloadImages,  то приложение скопилируется и запустится.

    Код прилагаю ниже. Прошу помощи разобраться в проблеме - где я допустил ошибку? Учусь по статьям в интернете и довольно большая часть кода от туда не работает (даже с получением разрешения экрана были проблемы - пришлось пока ориентироваться просто на размер формы временно).

    unit Unit1;

    interface

    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Helpers.Android, Androidapi.JNI.Util;

    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
      Buf:TBitmap;
      Regim,Xr,Yr:integer;
      fon:Tbitmap;
      procedure DownloadImages;

    implementation

    {$R *.fmx}
    {$R *.LgXhdpiPh.fmx ANDROID}

    procedure DownloadImages;
    var RS: TResourceStream;
    begin

      RS:=TResourceStream.Create(HInstance, 'FonMain', RT_RCData);
      try
        Fon.Width:=420;
        Fon.Height:=680;
        Fon.LoadFromStream(RS);
      finally
        RS.Free;
      end;

    end;


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Regim:=0;
      Buf:=TBitmap.Create;
      Buf.Width:=420;
      Buf.Height:=680;
      form1.Border.Styling:=false;

      DownloadImages; //zagruzka kartinok

    end;

    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
      const ARect: TRectF);
      var C1,C2:TRectF;
    begin
      Form1.Canvas.BeginScene;
      C1:=rectF(0,0,420,680);
      C2:=rectF(0,0,420,680);
      fon.SetSize(420,680);
      Buf.Canvas.DrawBitmap(fon,C1, C2, 0);
      form1.Canvas.DrawBitmap(Buf,C1, C2, 0);
      Form1.Canvas.EndScene;

    end;

    procedure TForm1.FormResize(Sender: TObject);
    begin
    Xr:=form1.ClientWidth;
    Yr:=form1.ClientHeight;
    //Showmessage(Inttostr(Xr)+'x'+Inttostr(Yr));
    end;

    end.

     

  5. Доброго времени суток. Мне нужно в программе сделать возможость находжения и открытия текстового файла например в компонент мемо. Сложность в том, что компонент Open Dialog похоже не работает для андроида. Можно ли с помощью другого компонента или еще как-то загрузить файл в мемо. Или хотя бы получить путь к файлу, чтобы затем получить возможность загрузки по этому пути. Всем заранее спасибо.

  6. Рисование происходит в событии формы OnPaint. Далее таймер вызывает Form1.invalidate;

    Если надо читать через поток, то как именно это сделать?

    var
      Stream: TResourceStream;
    begin
      Stream:= TResourceStream.Create(hInstance, 'YouRes', RT_RCDATA);
      try
        //как именно загрузить файл из потока?
      finally
        Stream.Free;
      end; 
    
    
  7. Всем доброго времени суток!

    Через Deployment добавил все нужные картинки. В моем случае мои картинки изменяться никак не будут, и открываются только для чтения. Поэтому я не стал менять пути для них. В связи с этим столкнулся с проблемой - как же собственно получить доступ к ним? То есть мне нужно нарисовать одну из тех картинок. Я не знаю как правильно это делать.

    Я подключил вверху System.IOUtils, чтобы получить доступ к TPath.

    Пробовал разные варианты: просто рисовать картинку с этим именем:

    form1.Canvas.DrawBitmap(fon,RectF(0,0,320,240),RectF(30,30,320,240),1,true);
    

    пробовал указывать так еще:

    fon:=Tbitmap.CreateFromFile(TPath.Combine(TPath.GetDocumentsPath, 'fon.bmp'));

    а затем рисовал таким же способом:

    form1.Canvas.DrawBitmap(fon,RectF(0,0,320,240),RectF(30,30,320,240),1,true);

    Читал тему на вашем форуме с названием "Включение своих файлов в приложение", но это не помогло мне.

     

    Не знаю, может надо как ресурс еще их подключить? Хотя мне кажется я неправильно использую TPath. Заранее спасибо всем за помошь.

  8. Захожу Project - > Resources and images. Добавляю туда порядка 20 картинок и задаю им там имена, тип ресурса выбираю Bitmap. Проект после этого нормально запускается. Но вот вопрос. Как мне теперь подключить файл ресурса в проект и вытянуть нужные картинки от туда?

     

    После сборки проекта в папке с проектом пявились файлы: Project1Resource.rc, Project1.dres, Project1.res и вроде Project1.deployproj. Насколько я понимаю для подключения нужны первые 2. Первый очевиден по названию, второй по размеру совпадает с папкой с картинками, из которой я брал файлы.

     

    Подключаю файл ресурс я так:

     

    {$R 'Project1.dres' 'Project1Resource.rc'}

     

    Не знаю правильно ли я сделал, но как мне теперь картинки в программе вытянуть с него и нарисовать? Я подозреваю, что работать надо с потоком, но не знаю как именно. Заранее спасибо всем за помощь.

     

     

  9. Пытаюсь загрузить в проект изображение TBitmap. Правильно ли я делаю? Отобразить картинку не получается у меня. И обязательно ли указывать размеры для картинок или буфера при загрузке, может в этом ошибка? Либо, как мне кажется, ошибка в том, что картинку, которую я загружаю находится не в файле ресурсов, а просто в папке с проектом (наверное так нельзя). Просто с ресурсами никогда не работал ранее да и Fire Monkey в том числе. Проект делаю в RadStudio Xe6.

    var
    fon:TBitmap;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
      Fon:=TBitmap.Create;
      Fon.LoadFromFile('\img\fon.bmp');
    
    end;
    
    
    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
      const ARect: TRectF);
    begin
       if Canvas.BeginScene then
       try
    	 form1.Canvas.DrawBitmap(fon,RectF(0,0,320,240),RectF(30,30,320,240),1,true);
       finally
         Canvas.EndScene;
       end;
    end;

    Может еще таймер нужно задействовать? Заранее спасибо всем, кто отклинется помочь.

    К стати возможно я неправильный проект создаю для рисования 2д графики? Я делаю так: file --> fire monkey mobile application delphi --> blank application. Если надо другой вариант выбирать, то какой?

  10. пытаюсь в приложении для Android просто вывести хоть какое-то изображение, но ничего не выходит. Делаю так в событии формы OnPaint:

     

          if Canvas.BeginScene then
          try
          Canvas.DrawLine(form1.ClientRect.TopLeft,form1.ClientRect.BottomRight,1);
          Canvas.DrawEllipse(Rectf(0,0,50,50),1);
          finally
          Canvas.EndScene;
          end;

     

    Но выходит просто черный экран и все. Если убрать прорисовку эллипса, то риуется просто белый екран. Вообще для игры нужно вывести битмап на форму, но даже такие примитивы не выходит вывести. не могу понять почему? Больше никакого кода в проекте нет.

     

    Если без этого кода просто на форму накидать компонентов imagecontrol и загрузить вних изображения, то их видно в приложении.

     

    И еще вопрос. Вы ранее написали, что

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