delphi 结构体的使用、Tbitmap和TMemoryStream的转换

一、定义结构体

type
  Tfrequency_band_list = class
    frequency_band_name: string;
    frequency_band_pic_color: string;
    frequency_band_pic_Stream: TMemoryStream;
  end;

二、结构体的使用

//全局变量
var
  frequency_band_list: array of Tfrequency_band_list;//定义变量
  
//界面初始化时
var
  bmp: Tbitmap;
begin
  SetLength(frequency_band_list, 5);//分配存储空间
  bmp := Tbitmap.Create;//初始化Tbitmap
  for i := 1 to length(frequency_band_list) - 1 do//存储空间是从0开始的,个人习惯从1开始
  begin
    frequency_band_list[i] := Tfrequency_band_list.Create;//结构图初始化
    frequency_band_list[i].frequency_band_pic_Stream := TMemoryStream.Create;//内存流初始化
    ImageList3.GetBitmap(i, bmp);//借用了一个imagelist保存了一部分相同大小的图片,为BMP变量赋值
    bmp.PixelFormat := pfDevice;
    bmp.PixelFormat := pf24bit;//设定24位,这段程序是为SPEEDBUTTON加透明图片的,所以用的24位
    bmp.SaveToStream(frequency_band_list[i].frequency_band_pic_Stream); //将BMP保存到内存流中
    frequency_band_list[i].frequency_band_name := '1';//赋值
    frequency_band_list[i].frequency_band_pic_color := '1';
  end;
  
  bmp.Free;//用完后释放
end;

三、使用

procedure TForm2.Button36Click(Sender: TObject);
var
  Stream: TMemoryStream;//定义这个变量主要是为了演示用法,直接用全局定义的也可以
  bmp: Tbitmap;
begin
  //Stream := TMemoryStream.Create;因为定义了Stream变量,并且进行了赋值,所以不进行初始化
  frequency_band_list[1].frequency_band_pic_Stream.Position := 0;//用之前先调指针
  Stream := frequency_band_list[1].frequency_band_pic_Stream;//赋值
  Stream.Position := 0;//这句可以不须要,内存流变量赋值应该是直接给的指针,这个时候其实两个内存流变量指向的是一个地址,改一个就相当于改另一个
  bmp := Tbitmap.Create;
  bmp.LoadFromStream(Stream);
  bmp.PixelFormat := pfDevice;
  bmp.PixelFormat := pf24bit;
  SpeedButton1.glyph.Assign(bmp);//speedbutton类型的按钮这样加载图片
  //stream.Free;//因为是同一个地址,所以这句也取消了,否则两个变量一起被释放了
  bmp.Free;
end;

 

你可能感兴趣的:(delphi,windows,DELPHI,个人小心得)