最近做一个项目,对界面有一定的要求,于是就做了这个小东东,实现起来挺方便的效果也不错,拿出来供大家参考。 上图是最终的效果图。 上图是组成TabSheet的图片,更换这些图片可以实现不同的风格效果。 下面是源码: unit UnitMain; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls, StdCtrls; type { TFormMain } TFormMain = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private { private declarations } procedure SelectPage(PageID: integer); procedure ImagePageOnclick(Sender: TObject); public { public declarations } end; var FormMain: TFormMain; menuList: tStrings; ImagePath: string; implementation {$R *.lfm} { TFormMain } procedure TFormMain.FormCreate(Sender: TObject); var i, sp_width, iLeft: integer; begin menuList := tStringlist.Create; menuList.Add('File01'); menuList.Add('Edit01'); menuList.Add('Exit'); ImagePath := ExtractFilePath(Application.ExeName) + 'Images/'; with TImage.Create(self) do begin Parent := Panel1; Picture.LoadFromFile(ImagePath + 'tooltar_Back.bmp'); AutoSize := true; Panel1.Height := Picture.Height; Stretch:= true; Align := alClient; end; iLeft := 0; for i := 0 to menuList.Count -1 do begin with TImage.Create(self) do begin Parent := Panel1; Picture.LoadFromFile(ImagePath + 'sp_unsel.bmp'); Left := iLeft; top := 0; Width := Picture.Width; Height := Picture.Height; sp_width := Picture.Width; iLeft := iLeft + Width; Stretch:= true; end; with TImage.Create(self) do begin Parent := Panel1; Picture.LoadFromFile(ImagePath + 'btn_unsel.bmp'); Left := iLeft; top := 0; Width := 100; Height := Picture.Height; iLeft := iLeft + Width; Stretch:= true; Tag := i; OnClick := @ImagePageOnclick; end; with TLabel.Create(self) do begin Parent := Panel1; AutoSize := false; top := 10; left := iLeft - 100 - (sp_width div 2); Width := 100 + sp_width; Alignment := taCenter; Font.Color := clYellow; Font.Size := 10; Tag := i; Text := menuList[i]; OnClick := @ImagePageOnclick; end; end; with TImage.Create(self) do begin Picture.LoadFromFile(ImagePath + 'sp_unsel.bmp'); Left := iLeft; top := 0; Width := Picture.Width; Height := Picture.Height; Stretch:= true; Parent := Panel1; end; SelectPage(0); end; procedure TFormMain.SelectPage(PageID: integer); var i: integer; begin //for i := 0 to menuList.Count -1 do //begin // (panel1.Controls[i * 3 + 1] as timage).Picture.LoadFromFile(ImagePath + 'sp_unsel.bmp'); // (panel1.Controls[i * 3 + 2] as timage).Picture.LoadFromFile(ImagePath + 'btn_unsel.bmp'); // (panel1.Controls[i * 3 + 4] as timage).Picture.LoadFromFile(ImagePath + 'sp_unsel.bmp'); // (panel1.Controls[i * 3 + 3] as TLabel).Font.Style:=[]; //end; i := panel1.Tag; if i > -1 then begin (panel1.Controls[i * 3 + 1] as timage).Picture.LoadFromFile(ImagePath + 'sp_unsel.bmp'); (panel1.Controls[i * 3 + 2] as timage).Picture.LoadFromFile(ImagePath + 'btn_unsel.bmp'); (panel1.Controls[i * 3 + 4] as timage).Picture.LoadFromFile(ImagePath + 'sp_unsel.bmp'); (panel1.Controls[i * 3 + 3] as TLabel).Font.Style:=[]; end; (panel1.Controls[PageID * 3 + 1] as timage).Picture.LoadFromFile(ImagePath + 'sp_Select_left.bmp'); (panel1.Controls[PageID * 3 + 2] as timage).Picture.LoadFromFile(ImagePath + 'btn_sel.bmp'); (panel1.Controls[PageID * 3 + 4] as timage).Picture.LoadFromFile(ImagePath + 'sp_Select_Right.bmp'); (panel1.Controls[PageID * 3 + 3] as TLabel).Font.Style:=[fsBold]; panel1.Tag := PageID; end; procedure TFormMain.ImagePageOnclick(Sender: TObject); var PageID: integer; begin PageID := (Sender as TComponent).Tag; if PageID <> panel1.Tag then begin SelectPage(PageID); case PageID of 0: ; 1: ; 2: close; end; end; end; end.