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图片的制作方法,感兴趣的可以百度一下。

  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/yzryc/p/6398356.html
Copyright © 2011-2022 走看看