zoukankan      html  css  js  c++  java
  • Delphi之TDrawGrid绘制



    一直都对QQ的好友列表很好奇,最先感觉用TreeView实现的,看了看TreeView的源码,发现要实现还真的不太好完成任务啊,其中最大的原因是自己的功力不足,后来觉得用ListView来做吧,结果也是失败,后来又想到ListBox,结果发现也是难成,最后发现有一个TDrawGrid,可以来绘制,但是不知道那两行文字怎么搞,有知道的望告知,谢谢。好了不再废话,就把最近对TDrawGrid的一些操作记录如下:

    1.我们先设置TDrawGrid的属性:
    BorderStyle:bsNone;
    ColCount:1;
    DefaultColWidth:200;
    DefaultRowHeight:60;
    RowCount:10;
    GridLineWidth:2;
    Options:[goFixedVertLine, goFixedHorzLine, goHorzLine, goDrawFocusSelected, goThumbTracking];
    ScrollBars:ssVertical;

    2.在窗体的public 域定义如下变量和函数:
      PicList: TList;
        function GetPicture(ACol, ARow:Integer): TBitMap;

    3.完成相关函数和过程:

    function TForm1.GetPicture(ACol, ARow: Integer): TBitMap;
    var
      Index: integer;
    begin
      Result := nil;
      Index := ARow * Grid.ColCount + ACol;
      if Index <= PicList.Count - 1  then
        Result := TBitmap(PicList.Items[Index]);
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    var
      Bmp: TBitMap;
      Index: Integer;
      AFileName: string;
    begin
      PicList := TList.Create;
      for Index := 1 to 10 do
      begin
        AFileName := Format(ExtractFilePath(ParamStr(0)) + 'Icon\%d.bmp', [Index]);
        Bmp := TBitmap.Create;
        Bmp.LoadFromFile(AFileName);
        PicList.Add(Bmp);
      end;
    end;

    procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      ACanvas: TCanvas;
      R: TRect;
      Bmp: TBitMap;
    begin
      ACanvas := Grid.Canvas;
      Bmp := GetPicture(ACol, ARow);
      if Bmp <> nil then
      begin
        R := Rect;
        R.Left := R.Left + 6;
        R.Top := R.Top + 6;
        {如果使用Canvas的StretchDraw函数,必须加上
        下面两句代码,不过BMP图片还是无法透明}
        //R.Bottom := R.Bottom - 6;
        //R.Right := Bmp.Width;
        {设置BMP的Transparent为真,再用Canvas的
        Draw函数,就可以使BMP透明绘制,不过你需要
        制作透明的BMP图片}
        Bmp.Transparent := True;
        ACanvas.Draw(R.Left, R.Top, Bmp);
        {网上有人说用下面的语句可以透明,但是使用
        函数StretchDraw,还是无法透明}
        //ACanvas.Brush.Style := bsClear;
        //ACanvas.StretchDraw(R, Bmp);
      end;
    end;

    最后,关于透明BMP图片的制作方法,感兴趣的可以百度一下。

    http://www.lsworks.net/article/45.html

  • 相关阅读:
    jvm垃圾回收机制
    java中transient关键字的含义
    com.alipay.sofa.rpc.core.exception.SofaRouteException: RPC-02306: 没有获得服务[io.sofastack.balance.manage.facade.BalanceMngFacade:1.0:user77]的调用地址,请检查服务是否已经推送
    IDEA失效的解决办法
    多线程
    Java对象的创建过程
    注解(Annotation)
    面向对象思想
    IDEA--java版本修改(jdk1.8改成jdk1.7)
    HttpClient
  • 原文地址:https://www.cnblogs.com/findumars/p/4999029.html
Copyright © 2011-2022 走看看