var tabsheet:TTabSheet; dbgrid:Tdbgrid; begin tabsheet:=TTabSheet.create(application); tabsheet.parent:=form1; dbgrid:=Tdbgrid.create(application); dbgrid.parent:=tabsheet; end;
//第二个问题参考如下代码~~ procedure TForm1.PageControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(TPageControl(Sender).ActivePage) and (ssDouble in Shift) and (Button = mbLeft) then TPageControl(Sender).ActivePage.Free; end;
//第三个问题参考如下代码~~ //uses StdCtrls; //TLabelfunction DisplayWidth(mCaption: string; mCanvas: TCanvas; mWidth: Integer; mHotkey: Boolean = False): string; var I: Integer; W: WideString; begin Result := ''; if not Assigned(mCanvas) then Exit; with TLabel.Create(nil) do try ShowAccelChar := mHotkey; Font.Assign(mCanvas.Font); Caption := mCaption; Result := Caption; if Width <= mWidth then Exit; W := mCaption; for I := 1 to Length(W) do begin Caption := Copy(W, 1, I) + '...'; if Width > mWidth then Exit; Result := Caption; end; finally Free; end; end; { DisplayWidth }procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var S: string; vRect: TRect; begin S := DisplayWidth(TPageControl(Control).Pages[TabIndex].Caption, Control.Canvas, TPageControl(Control).TabWidth - 5, True); vRect := Rect; DrawText(Control.Canvas.Handle, PChar(S), Length(S), vRect, DT_CENTER or DT_VCENTER or DT_SINGLELINE); end;procedure TForm1.FormCreate(Sender: TObject); begin PageControl1.TabWidth := 50; PageControl1.OwnerDraw := True; end;
//想想了,系统应该提供画“...”的方法~~ procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var S: string; vRect: TRect; begin S := TPageControl(Control).Pages[TabIndex].Caption); vRect := Rect; DrawText(Control.Canvas.Handle, PChar(S), Length(S), vRect, DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_WORD_ELLIPSIS); end;
tabsheet:TTabSheet;
dbgrid:Tdbgrid;
begin
tabsheet:=TTabSheet.create(application);
tabsheet.parent:=form1;
dbgrid:=Tdbgrid.create(application);
dbgrid.parent:=tabsheet;
end;
根据条件切换标签和TDBGrid中的内容即可。
真要动态创建TDBGrid很麻烦...
procedure TForm1.PageControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(TPageControl(Sender).ActivePage) and
(ssDouble in Shift) and (Button = mbLeft) then
TPageControl(Sender).ActivePage.Free;
end;
//uses StdCtrls; //TLabelfunction DisplayWidth(mCaption: string; mCanvas: TCanvas;
mWidth: Integer; mHotkey: Boolean = False): string;
var
I: Integer;
W: WideString;
begin
Result := '';
if not Assigned(mCanvas) then Exit;
with TLabel.Create(nil) do try
ShowAccelChar := mHotkey;
Font.Assign(mCanvas.Font);
Caption := mCaption;
Result := Caption;
if Width <= mWidth then Exit;
W := mCaption;
for I := 1 to Length(W) do begin
Caption := Copy(W, 1, I) + '...';
if Width > mWidth then Exit;
Result := Caption;
end;
finally
Free;
end;
end; { DisplayWidth }procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
S: string;
vRect: TRect;
begin
S := DisplayWidth(TPageControl(Control).Pages[TabIndex].Caption,
Control.Canvas, TPageControl(Control).TabWidth - 5, True);
vRect := Rect;
DrawText(Control.Canvas.Handle, PChar(S), Length(S), vRect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.TabWidth := 50;
PageControl1.OwnerDraw := True;
end;
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
S: string;
vRect: TRect;
begin
S := TPageControl(Control).Pages[TabIndex].Caption);
vRect := Rect;
DrawText(Control.Canvas.Handle, PChar(S), Length(S), vRect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_WORD_ELLIPSIS);
end;
你最后给的那个方法好像不行啊,看不到‘...',好像是Flags不对啊