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.
我看不到任何地方,可以有錯誤......如果奧尤看到一些奇怪的事情,請幫助。我不想在德爾福快速...
嘗試先編譯爲win32,看看是否有效。您可能必須先將其作爲平臺添加。只要你不使用特定於android的東西,或者任何帶有字符串的東西,開發和調試就會更容易,更快速。 –
我做了,它看起來像DrawLine()過程不能正常工作......它在PaintBox Canvas的寬度上突然停止工作FOR循環:(我嘗試捕獲函數的異常但它不拋出任何:(http://postimg.org/image/5xmfm2emb/ – user30993174444