procedure TForm1.FormCreate(Sender: TObject);
begin
tabset1.Tabs.AddObject('hello',map);end;
procedure TForm1.TabSet1MeasureTab(Sender: TObject; Index: Integer;
  var TabWidth: Integer);
var
  bitmapwidth:integer;
begin
bitmapwidth:=tbitmap(tabset1.tabs.Objects[index]).Width;
inc(tabwidth,2+bitmapwidth);end;procedure TForm1.TabSet1DrawTab(Sender: TObject; TabCanvas: TCanvas;
  R: TRect; Index: Integer; Selected: Boolean);
var
bitmap:tbitmap;
begin
bitmap:=tbitmap(tabset1.Tabs.Objects[index]);
with tabcanvas do
begin
draw(r.Left,r.Top+4,bitmap);
textout(r.left+2+bitmap.Width,r.Top+2,tabset1.tabs[index]);
end;end;
功能就是在tabset上加图标!
我运行的时候老是报内存出错的问题??!!!!
是方法不对吗?

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, Tabs;type
      TMainForm = class(TForm)
        TabSet1: TTabSet;
        procedure FormCreate(Sender: TObject);
        procedure TabSet1MeasureTab(Sender: TObject; Index: Integer;
          var TabWidth: Integer);
        procedure TabSet1DrawTab(Sender: TObject; TabCanvas: TCanvas; R: TRect;
          Index: Integer; Selected: Boolean);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;implementation{$R *.dfm}procedure TMainForm.FormCreate(Sender: TObject);
    var
      bm: TBitmap;
    begin
      bm := TBitmap.Create;
      bm.LoadFromFile('abort.bmp');
      TabSet1.Tabs.AddObject('Hello', bm);  bm := TBitmap.Create;
      bm.LoadFromFile('alarm.bmp');
      TabSet1.Tabs.AddObject('World', bm);
    end;procedure TMainForm.TabSet1MeasureTab(Sender: TObject; Index: Integer;
      var TabWidth: Integer);
    var
      BitmapWidth: Integer;
    begin
      BitmapWidth := TBitmap(TabSet1.Tabs.Objects[Index]).Width;
      Inc(TabWidth, BitmapWidth + 2); end;procedure TMainForm.TabSet1DrawTab(Sender: TObject; TabCanvas: TCanvas;
      R: TRect; Index: Integer; Selected: Boolean);
    var
      Bitmap: TBitmap;
    begin
      Bitmap := TBitmap(TabSet1.Tabs.Objects[Index]);
      with TabCanvas do
      begin
        Draw(r.Left,r.Top+4,bitmap);
        TextOut(r.left+2+bitmap.Width,r.Top+2,tabset1.tabs[index]);
      end;
    end;procedure TMainForm.FormDestroy(Sender: TObject);
    var
      i: Integer;
      bmp: TBitmap;
    begin
      for i := 0 to TabSet1.Tabs.Count - 1 do
      begin
        bmp := TBitmap(TabSet1.Tabs.Objects[i]);
        if bmp <> nil then
          bmp.Free; 
      end;
    end;end.