我想做一个屏幕显示的程序,需要把MEMO控件的内容滚动显示,代码该怎么写;
还有是关于图像操作的问题:
1、如何把一个图片中的一个矩形的图片块复制出来,如我想把一个图片中间的一个3cm*3cm的图片块复制出,COPY到另外一个IMAGE控件去;
2、如何把一个IMAGE里的图像旋转90度;谢谢指教

解决方案 »

  1.   

    我想做一个屏幕显示的程序,需要把MEMO控件的内容滚动显示,代码该怎么写;你用一个label,和一个timer,然后把memo 里的text:=label。caption
    然后用timer定时移动label.left或者是top属性
      

  2.   

    MEMO控件的内容滚动显示:
    http://delphi.about.com/cs/adptips2000/a/bltip0700_4.htm把一个图片中的一个矩形的图片块复制出来:
    http://delphi.about.com/cs/adptips2001/a/bltip1001_4.htm
      

  3.   

    发送滚动消息给memo就可以了
    2.可以考虑用scanline扫描重新赋值,横向扫描,纵向重新赋值就可以了
      

  4.   

    整理文档时发现居然还有图像旋转的源代码:Rotate Bitmap (any angle, any center of rotation)
    Here's how to rotate a TBitmap at any angle: 
    ~~~~~~~~~~~~~~~~~~~~~~~~~
    Const PixelMax = 32768;
    Type
       pPixelArray = ^TPixelArray;
       TPixelArray = Array[0..PixelMax-1] Of TRGBTriple;Procedure RotateBitmap_ads(
       SourceBitmap : TBitmap;
       out DestBitmap : TBitmap;
       Center : TPoint;
       Angle : Double) ;
    Var
       cosRadians : Double;
       inX : Integer;
       inXOriginal : Integer;
       inXPrime : Integer;
       inXPrimeRotated : Integer;
       inY : Integer;
       inYOriginal : Integer;
       inYPrime : Integer;
       inYPrimeRotated : Integer;
       OriginalRow : pPixelArray;
       Radians : Double;
       RotatedRow : pPixelArray;
       sinRadians : Double;
    begin
       DestBitmap.Width := SourceBitmap.Width;
       DestBitmap.Height := SourceBitmap.Height;
       DestBitmap.PixelFormat := pf24bit;
       Radians := -(Angle) * PI / 180;
       sinRadians := Sin(Radians) ;
       cosRadians := Cos(Radians) ;
       For inX := DestBitmap.Height-1 Downto 0 Do
       Begin
         RotatedRow := DestBitmap.Scanline[inX];
         inXPrime := 2*(inX - Center.y) + 1;
         For inY := DestBitmap.Width-1 Downto 0 Do
         Begin
           inYPrime := 2*(inY - Center.x) + 1;
           inYPrimeRotated := Round(inYPrime * CosRadians - inXPrime * sinRadians) ;
           inXPrimeRotated := Round(inYPrime * sinRadians + inXPrime * cosRadians) ;
           inYOriginal := (inYPrimeRotated - 1) Div 2 + Center.x;
           inXOriginal := (inXPrimeRotated - 1) Div 2 + Center.y;
           If
             (inYOriginal >= 0) And
             (inYOriginal <= SourceBitmap.Width-1) And
             (inXOriginal >= 0) And
             (inXOriginal <= SourceBitmap.Height-1)
           Then
           Begin
             OriginalRow := SourceBitmap.Scanline[inXOriginal];
             RotatedRow[inY] := OriginalRow[inYOriginal]
           End
           Else
           Begin
             RotatedRow[inY].rgbtBlue := 255;
             RotatedRow[inY].rgbtGreen := 0;
             RotatedRow[inY].rgbtRed := 0
           End;
         End;
       End;
    End;{Usage:}
    procedure TForm1.Button1Click(Sender: TObject) ;
    Var
       Center : TPoint;
       Bitmap : TBitmap;
    begin
       Bitmap := TBitmap.Create;
       Try
         Center.y := (Image.Height div 2)+20;
         Center.x := (Image.Width div 2)+0;
         RotateBitmap_ads(
           Image.Picture.Bitmap,
           Bitmap,
           Center,
           Angle);
         Angle := Angle + 15;
         Image2.Picture.Bitmap.Assign(Bitmap) ;
       Finally
         Bitmap.Free;
       End;
    end;