2013-12-13 48 views
0

我試圖做一個應用程序,繪製2正弦波,並在第三TImage屏幕的總和那些2正弦波... 我的黑色屏幕上我的機器人,有時「應用程序停止響應「。 的代碼是:恩巴克德羅XE5德爾福 - 移動應用黑屏

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. 

我看不到任何地方,可以有錯誤......如果奧尤看到一些奇怪的事情,請幫助。我不想在德爾福快速...

+0

嘗試先編譯爲win32,看看是否有效。您可能必須先將其作爲平臺添加。只要你不使用特定於android的東西,或者任何帶有字符串的東西,開發和調試就會更容易,更快速。 –

+0

我做了,它看起來像DrawLine()過程不能正常工作......它在PaintBox Canvas的寬度上突然停止工作FOR循環:(我嘗試捕獲函數的異常但它不拋出任何:(http://postimg.org/image/5xmfm2emb/ – user30993174444

回答

0

是否禁用睡眠模式?

禁用睡眠模式。 去開發者選項 - >並檢查「保持清醒」選項

+0

它不是睡眠模式問題...在Win8 Win7的作品,但減緩... – user30993174444