主要目的是改变三个我自己需要的参数,这个我已经用ScrollBar实现了。但是想做一个扇形的预览图,能够实时随着参数的大小改变,而改变代表三个参数扇形的大小。希望能有高手给出代码。
procedure TParaChooseForm.ScrollBar1Change(Sender: TObject);
var
  TempPos1:Integer;
  TempPos2:Integer;
begin
    TempPos1:=ScrollBar1.Position;
    TempPos2:=ScrollBar2.Position;
    if (TempPos1+TempPos2)<=100 then
      ScrollBar3.Position:=100-ScrollBar1.Position-ScrollBar2.Position
      //TempPos:=ScrollBar3.Position;
    else
      ScrollBar2.Position:=100-ScrollBar1.Position-ScrollBar3.Position;end;procedure TParaChooseForm.ScrollBar2Change(Sender: TObject);
var
  TempPos1:Integer;
  TempPos2:Integer;
begin
    TempPos1:=ScrollBar1.Position;
    TempPos2:=ScrollBar2.Position;
    if (TempPos1+TempPos2)<=100 then
      ScrollBar3.Position:=100-ScrollBar1.Position-ScrollBar2.Position
      //TempPos:=ScrollBar3.Position;
    else
      ScrollBar1.Position:=100-ScrollBar2.Position-ScrollBar3.Position;end;procedure TParaChooseForm.ScrollBar3Change(Sender: TObject);
begin
   ScrollBar3.Position:=100-ScrollBar1.Position-ScrollBar2.Position;
end;procedure TParaChooseForm.Timer1Timer(Sender: TObject);
begin   Label1.Caption:=IntToStr(ScrollBar1.Position);
   Label2.Caption:=IntToStr(ScrollBar2.Position);
   Label3.Caption:=IntToStr(ScrollBar3.Position);   //Chart1.Series[1].Add(ScrollBar1.Position);
end;procedure TParaChooseForm.FormCreate(Sender: TObject);
begin
   //Chart1.Series[1].Add(ScrollBar1.Position);
   with Image1 do
     begin
       //Canvas.Refresh;
       Canvas.Brush.Color:=clRed;
       Canvas.Brush.Style:=bsSolid;
       Canvas.Pie(Image1.Left-1,Image1.Top-1,Image1.Width-1,Image1.Height-1,50,5,300,50);
     end;
end;这是我自己的代码。

解决方案 »

  1.   

    var
     theDC,theDC1: HDC;
     theBitmap: HBITMAP;
     theCanvas: TCanvas;
    begin
     theCanvas:=TCanvas.Create;
     theDC:=GetDC(Panel1.Handle);
     theDC1:=CreateCompatibleDC(theDC);
     theBitmap:=CreateCompatibleBitmap(theDC1,100,100);
     theCanvas.Handle:=theDC1;
     SelectObject(theCanvas.Handle,theBitmap);
     //然后用theCanvas的画图函数或API图形函数在theCanvas上画扇型图,
     //而后用StretchBlt或BitBlt从theCanvas上切一部分图形到Panel1上,
     //要改变时图形参数时用FillRect填充整个theCanvas以准备重画,
     //一般当要求快速变化图形时这样做。
     ReleaseDC(Panel1.Handle,theDC);
     DeleteObject(theBitmap);
     DeleteDC(theDC1);
    end;
      

  2.   

    谢谢回复但是你所给出的StretchBlt或者BitBlt函数都是复制一个矩形图形,似乎不能满足的要求,也许是我错了,希望您能说明一下,还有怎么控制输出图形的颜色呢,?
      

  3.   

    theCanvas:=TCanvas.Create;
       theCanvas.Brush.Color:=clRed;
       theCanvas.Brush.Style:=bsSolid;
       theDC:=GetDC(Panel1.Handle);     
       theDC1:=CreateCompatibleDC(theDC);  
       theBitmap:=CreateCompatibleBitmap(theDC1,100,100);
       theCanvas.Handle:=theDC1;
       SelectObject(theCanvas.Handle,theBitmap);
       theCanvas.Pie(Panel1.Left-1,Panel1.Top-1,Panel1.Width-1,Panel1.Height-1,50,5,300,50);
       StretchBlt(theDC,0,0,100,100,theDC1,0,0,100,100,SRCAND);
       theCanvas.FillRect(ClientRect);
       ReleaseDC(Panel1.Handle,theDC); 
       DeleteObject(theBitmap);
       DeleteDC(theDC1);
      

  4.   

    StretchBlt(theDC,1,(Panel1.Height-ScrollBar1.Position),30,100,theDC1,0,0,Panel1.Width-1,Panel1.Height-1,whiteness);我现在试着就直接画一个四边形,但是发现,四边形能够增长,但是不能缩短了!郁闷,请教高手啊。