Determinar PageControl.TabWidth conforme tamanho do caption
pessoal
eu realizo a criação de tabsheets dinamicamente.
o camptio desse tabscheet é o nome do cliente.
só que eu gostaria de definir um pagecontrol1.tabwidth = 150 e fazer com que o nome do caption se for maior que esse width de 150 receba 3 pontos.
por exemplo:
Maria Silva (é um nome que entra nesse width)
Joaquim Pereira Santos da Silva (não entra) gostaria que o caption então ficasse Joaquim Pereira San...
como faço ?
e ao selecionar um dos tabsheets eu gostaria que o tabwidth desse selecionado ficasse autosize, então ao selecionar o tab do joaquim iria aparecer o nome completo dele.
obrigado
Diogo
eu realizo a criação de tabsheets dinamicamente.
o camptio desse tabscheet é o nome do cliente.
só que eu gostaria de definir um pagecontrol1.tabwidth = 150 e fazer com que o nome do caption se for maior que esse width de 150 receba 3 pontos.
por exemplo:
Maria Silva (é um nome que entra nesse width)
Joaquim Pereira Santos da Silva (não entra) gostaria que o caption então ficasse Joaquim Pereira San...
como faço ?
e ao selecionar um dos tabsheets eu gostaria que o tabwidth desse selecionado ficasse autosize, então ao selecionar o tab do joaquim iria aparecer o nome completo dele.
obrigado
Diogo
Diogoalles
Curtidas 0
Respostas
Massuda
09/09/2005
...só que eu gostaria de definir um pagecontrol1.tabwidth = 150 e fazer com que o nome do caption se for maior que esse width de 150 receba 3 pontos.
Ajuste a propriedade TPageControl.OwnerDraw para True. No evento TPageControl.OnTabDraw faça algo assim...procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var R: TRect; S: string; begin with Control.Canvas do begin if Active then Brush.Color := clHighlight else Brush.Color := clBtnFace; Brush.Style := bsSolid; FillRect(Rect); if TabIndex >= 0 then begin if Active then Font.Color := clHighlightText else Font.Color := clBtnText; Brush.Style := bsClear; R := Rect; S := (Control as TPageControl).Pages[TabIndex].Caption; DrawText(Handle, PChar(@S[1]), Length(S), R, DT_NOPREFIX or DT_LEFT or DT_BOTTOM or DT_END_ELLIPSIS); end; end; end;
...ao selecionar um dos tabsheets eu gostaria que o tabwidth desse selecionado ficasse autosize, então ao selecionar o tab do joaquim iria aparecer o nome completo dele.
Fico devendo esta...GOSTEI 0
Diogoalles
09/09/2005
olá Massuda
estou tentando o código q vc passou, mas inclusive coloquei um ´brake point´ e em nenhum momento passa pelo código. A propriedade OwnerDraw está True.
O que tenho de diferente é que só tenho o componente PageControl no form sem nenhum Tabsheet que são criados dinamicamente da seguinte forma:
obrigado
Diogo
estou tentando o código q vc passou, mas inclusive coloquei um ´brake point´ e em nenhum momento passa pelo código. A propriedade OwnerDraw está True.
procedure TFrm550F.PgCtrlClienteDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var R: TRect; S: string; begin with Control.Canvas do begin if Active then Brush.Color := clHighlight else Brush.Color := clBtnFace; Brush.Style := bsSolid; FillRect(Rect); if TabIndex >= 0 then begin if Active then Font.Color := clHighlightText else Font.Color := clBtnText; Brush.Style := bsClear; R := Rect; S := (Control as TPageControl).Pages[TabIndex].Caption; DrawText(Handle, PChar(@S[1]), Length(S), R, DT_NOPREFIX or DT_LEFT or DT_BOTTOM or DT_END_ELLIPSIS); end; end; end;
O que tenho de diferente é que só tenho o componente PageControl no form sem nenhum Tabsheet que são criados dinamicamente da seguinte forma:
if Tab = nil then begin Tab := TTabSheet.Create(PgCtrlCliente); Tab.Caption := NmPac; Tab.PageControl := PgCtrlCliente; end;
obrigado
Diogo
GOSTEI 0
Massuda
09/09/2005
Testei o código e aparentemente está OK.
Você definiu o evento TPageControl.OnDrawTab no Object Inspector?
A propriedade TPageControl.TabWidth está com um valor não nulo?
Você definiu o evento TPageControl.OnDrawTab no Object Inspector?
A propriedade TPageControl.TabWidth está com um valor não nulo?
GOSTEI 0
Diogoalles
09/09/2005
Você definiu o evento TPageControl.OnDrawTab no Object Inspector?
isso mesmo
A propriedade TPageControl.TabWidth está com um valor não nulo?
tenho um valor de 180
obrigado
GOSTEI 0
Massuda
09/09/2005
Não sei porque não funciona com você... Quando você executa o código que postei, a tab ativa deveria aparecer em azul e se o título da tab for muito grande, aparece os três pontos/reticências; a única coisa que não faz é o autosize, mas isso eu já tinha avisado no meu post inicial.
GOSTEI 0