Embarcadero XE5 Delphi-移动应用程序黑屏

Embarcadero XE5 Delphi-移动应用程序黑屏,delphi,delphi-xe5,Delphi,Delphi Xe5,我试着做一个应用程序,画出2个正弦波,在第三个时间屏幕上画出这2个正弦波的总和。。。 我的安卓系统出现黑屏,有时“应用程序停止响应”。 代码是: unit lenovoEx1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialog

我试着做一个应用程序,画出2个正弦波,在第三个时间屏幕上画出这2个正弦波的总和。。。 我的安卓系统出现黑屏,有时“应用程序停止响应”。 代码是:

unit lenovoEx1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.StdCtrls, FMX.Objects;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Panel1: TPanel;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    TrackBar3: TTrackBar;
    Panel2: TPanel;
    TrackBar4: TTrackBar;
    TrackBar5: TTrackBar;
    TrackBar6: TTrackBar;
    procedure TrackBar2Change(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar3Change(Sender: TObject);
    procedure TrackBar5Change(Sender: TObject);
    procedure TrackBar4Change(Sender: TObject);
    procedure TrackBar6Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Point1 : TPoint;
    brush_T : TStrokeBrush;
    bitmap_T : TBitmap;
    rectf_T : TRectF;
    procedure DrawSine(Image: TImage; Amp, Pha, Fre : Single);
    procedure DrawSum(Image: TImage; Amp1, Pha1, Fre1, Amp2, Pha2, Fre2 : Single);
    procedure Trigger(Sender: TObject);
    procedure ZeroSettings();
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

    procedure TForm1.Trigger(Sender: TObject);
    var
      ampl1, ampl2, phas1, phas2, freq1, freq2 : Single;
    begin
      ampl1 :=  Form1.TrackBar1.Value;
      phas1 :=  Form1.TrackBar2.Value;
      freq1 :=  Form1.TrackBar3.Value;

      ampl2 :=  Form1.TrackBar4.Value;
      phas2 :=  Form1.TrackBar5.Value;
      freq2 :=  Form1.TrackBar6.Value;

      Form1.DrawSine(Form1.Image1,ampl1,phas1,freq1);
      Form1.DrawSine(Form1.Image2,ampl2,phas2,freq2);
      Form1.DrawSum(Form1.Image3,ampl1,phas1,freq1,ampl2,phas2,freq2);
    end;


    procedure TForm1.ZeroSettings();
    begin
      Form1.TrackBar1.Value := 50;
      Form1.TrackBar2.Value := 50;
      Form1.TrackBar3.Value := 50;

      Form1.TrackBar4.Value := 50;
      Form1.TrackBar5.Value := 50;
      Form1.TrackBar6.Value := 50;
    end;


    procedure TForm1.DrawSine(Image: TImage; Amp, Pha, Fre: Single);
    var
      width, height, I : Integer;
      sin_T : Extended;
      Point2 : TPoint;
    begin
      width := Round(Image.Width);
      height := Round(Image.Height);

      bitmap_T.SetSize(width, height);
      rectf_T.Width := width;
      rectf_T.Height  := height;

      Image.Bitmap.Canvas.BeginScene;
      Image.Bitmap := bitmap_T;
      Image.Bitmap.Canvas.SetMatrix(TMatrix.CreateScaling(1.0 / Canvas.Scale, 1.0 / Canvas.Scale) * Canvas.Matrix);
      Image.Bitmap.Canvas.ClearRect(rectf_T, TAlphaColorRec.Black );

      for I := 0 to width do
      begin
          sin_T := Sin(((I - Pha)/200.0) * Fre);

          Point2.X := Round(I);
          Point2.Y := Round(sin_T * Amp) + Round(height/2.0);

          if I = 0 then
          begin
            Point1.X := Round(I);
            Point1.Y := Round(sin_T * Amp) + Round(height/2.0);
            Image.Bitmap.Canvas.DrawLine(Point1, Point2, 1.0, brush_T);
          end
          else
          begin
            if I = width then
            begin
              Image.Bitmap.Canvas.DrawLine(Point1, Point2, 1.0, brush_T);
              Point1.X := Round(I);
              Point1.Y := Round(height/2.0);
            end
            else
            begin
              Image.Bitmap.Canvas.DrawLine(Point1, Point2, 1.0, brush_T);
              Point1.X := Point2.X;
              Point1.Y := Point2.Y;
            end;
         end;
      end;
      Image.Bitmap.Canvas.EndScene();
    end;


    procedure TForm1.DrawSum(Image: TImage; Amp1, Pha1, Fre1, Amp2, Pha2, Fre2: Single);
    var
      width, height, I : Integer;
      sin_T1, sin_T2 : Extended;
      Point2 : TPoint;
    begin
      width := Round(Image.Width);
      height := Round(Image.Height);

      bitmap_T.SetSize(width, height);
      rectf_T.Width := width;
      rectf_T.Height := height;

      Image.Bitmap.Canvas.BeginScene;
      Image.Bitmap := bitmap_T;
      Image.Bitmap.Canvas.SetMatrix(TMatrix.CreateScaling(1.0 / Canvas.Scale, 1.0 / Canvas.Scale) * Canvas.Matrix);
      Image.Bitmap.Canvas.ClearRect(rectf_T, TAlphaColorRec.Black );

      for I := 0 to width do
      begin
          sin_T1 := Sin(((I)/200.0) * Fre1);
          sin_T2 := Sin(((I)/200.0) * Fre2);
          Point2.X := Round(I);
          Point2.Y := Round(sin_T1 * Amp1) + Round(sin_T2 * Amp2) + Round(height/2.0);

          if I = 0 then
          begin
            Point1.X := I;
            Point1.Y := Round((sin_T1 * Amp1) + (sin_T2 * Amp2)) + Round(height/2.0);
            Image.Bitmap.Canvas.DrawLine(Point1, Point2, 1.0, brush_T);
          end
          else
          begin
            if I = width then
            begin
              Image.Bitmap.Canvas.DrawLine(Point1, Point2, 1.0, brush_T);
              Point1.X := Round(I);
              Point1.Y := Round(height/2.0);
            end
            else
            begin
              Image.Bitmap.Canvas.DrawLine(Point1, Point2, 1.0, brush_T);
              Point1.X := Point2.X;
              Point1.Y := Point2.Y;
            end;
         end;
      end;
    end;


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ZeroSettings();
      brush_T := TStrokeBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.White);
      bitmap_T := TBitmap.Create(10,10);
      rectf_T := TRectF.Create(0, 0, 1, 1);
    end;

    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
      Trigger(Sender);
    end;

    procedure TForm1.TrackBar2Change(Sender: TObject);
    begin
      Trigger(Sender);
    end;

    procedure TForm1.TrackBar3Change(Sender: TObject);
    begin
      Trigger(Sender);
    end;

    procedure TForm1.TrackBar4Change(Sender: TObject);
    begin
      Trigger(Sender);
    end;

    procedure TForm1.TrackBar5Change(Sender: TObject);
    begin
      Trigger(Sender);
    end;

    procedure TForm1.TrackBar6Change(Sender: TObject);
    begin
      Trigger(Sender);
    end;

end.

我看不到任何地方会有错误。。。如果你看到什么奇怪的东西,请帮忙。我在Delphi中不太快…

睡眠模式被禁用了吗

禁用睡眠模式。
转到“开发人员选项”->并选中“保持清醒”选项,首先尝试编译到win32,看看是否有效。您可能必须首先将其添加为平台。只要你不做android特定的东西,或者任何有字符串的东西,像那样开发和调试就容易多了,也快多了。我做了,而且看起来DrawLine()过程不能正常工作。。。它在PaintBox画布的整个宽度上突然停止FOR循环:(我试图捕获函数的异常,但它没有抛出任何异常:(