【发布时间】:2017-03-29 17:00:24
【问题描述】:
我正在尝试编写模拟 VU 表。我使用 VU 表的位图并将指针画在位图上。我正在使用轨迹栏,它是 onChange 事件来测试仪表:
procedure TForm1.TrackBar1Change(Sender: TObject);
var
angle : integer;
x,y : integer;
Peaked : boolean;
begin
Angle := 120 - Round(sTrackBar1.Position / sTrackBar1.Max * 100 )+20;
Peaked := Angle < PeakVol;
if Peaked then
Buffer.Picture := VUImagePeaked.Picture
else
buffer.picture := VUImage.Picture;
buffer.Picture.Bitmap.Canvas.Pen.Color := clSilver;
buffer.Picture.Bitmap.Canvas.Pen.Width:=2;
buffer.Canvas.MoveTo(pivot.x,Pivot.y);
x := 150 + Round(Cos(DegToRad(Angle)) * NeedleLen);
y := PaintBox1.Height - Round(Sin(DegToRad(Angle)) *NeedleLen);
buffer.Canvas.LineTo(x,y);
PaintBox1.Canvas.Draw(0,0,buffer.Picture.Bitmap)
end;
似乎可以工作,但我无法在程序启动时显示仪表的位图。我什至求助于将上面的代码复制到 Form.Create 和 Form.Activate 事件处理程序中,但没有任何乐趣。我创建了一个按钮并添加了以下代码来触发轨迹栏的 onChange 事件处理程序。这可以工作并显示仪表。
procedure TForm1.Button1Click(Sender: TObject);
begin
TrackBar1.Position := 1;
end;
当我将它复制到 Form.Activate 处理程序时,它没有。谁能告诉我我做错了什么?我正在使用 Delphi Berlin 入门版。谢谢
【问题讨论】:
-
PaintBox1.Canvas.Draw(0,0,buffer.Picture.Bitmap)- 这需要移动到TPaintBox.OnPaint事件。
标签: delphi