seba31stien
Messages postés51Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention25 juillet 2006
-
12 juil. 2006 à 18:16
birdyz
Messages postés42Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 4 septembre 2006
-
13 juil. 2006 à 14:41
Bonjour,
je souhaiterais mettre en gras le caption d'un onglet d'un pagecontrol. les autres restant en normal.
Tabsheet[1].Font.Style :=[fsbold]; met tout le contenu de l'onglet en gras alors que je ne voudrais que le caption
merci pour toute aide
Seb
seba31stien
Messages postés51Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention25 juillet 20061 13 juil. 2006 à 08:26
rectificatif, sur tous les label, si je mets leur parentfont à false, effectivement, ils n'héritent pas du caractère gras de son parent. mais le caption ne se met jamais en gras;
Comment mettre le caption de caption de l'onglet actif et uniquement celui ci, en gras ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
seba31stien
Messages postés51Date d'inscriptionlundi 13 juin 2005StatutMembreDernière intervention25 juillet 20061 13 juil. 2006 à 11:14
merci pour ces renseignements qui m'éclairent.
mon composant pagecontrol est créé dynamiquement, peux tu m'indiquer comment associer cette procedure au composant créé? je sais le faire pour l'évènement onclick d'un TButton créé dynamiquement, mais pas pour un pagecontrol
Seb
birdyz
Messages postés42Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 4 septembre 2006 13 juil. 2006 à 13:46
Effectivement pour le if Active. C'est parce que ce code est repris d'un composant que je me suis fais qui dérive de TPageControl. J'ai modifié les lignes ou j'utilisait le self, mais j'ai oublié cette ligne. Pour la taille de l'onglet, c'est effectivement un problème, mais je n'ai pas encore trouvé la solution
birdyz
Messages postés42Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 4 septembre 2006 13 juil. 2006 à 14:24
Après quelques recherche, j'ai fais ceci (il y a surement possibilité d'améliorer) :
Dans le OnDrawTab, j'ai ajouter au début de la procédure le code suivant :
iMaxTaille := 0;
Font := PageControl1.Pages[0].Font;
Font.Style := Font.Style + [fsBold];
for i := 0 to PageControl1.PageCount - 1 do
begin
iTaille := TextSize(PageControl1.Pages[i].Caption, Font).X;
if iTaille > iMaxTaille then
iMaxTaille := iTaille;
end;
PageControl1.TabWidth := iMaxTaille + 16;
Cela nécesite les variables :
i : integer;
iTaille, iMaxTaille : integer;
Font : TFont;
Il faut également ajouter la fonction TextSize (Elle n'est pas de moi, mais viens de www.developpez.com)
Function TextSize(Phrase : string; Police : TFont = nil) : TPoint;
var
DC: HDC;
X: Integer;
Rect: TRect;
C : TBitmap;
begin
C := TBitmap.create;
if police <> nil then C.canvas.Font := police;
En gros, je calcul la taille de l'onglet le plus grand, avec la police en gras, et je met tous les ongles à cette taille, en ajoutant 16 pixels pour s'adapter avec la marge de 8 présente dans la procédure d'origine.
Le top serai de retailler chaque onglet à la bonne taille, mais mes cela dépasse mes connaissances
for i := 0 to PageControl1.PageCount - 1 do
begin
iTaille := TextSize(PageControl1.Pages[i].Caption, Font).X;
if iTaille > iMaxTaille then
iMaxTaille := iTaille;
end;
PageControl1.TabWidth := iMaxTaille + 16;
if Active then
begin
PageControl1.Canvas.Font.Style := PageControl1.Canvas.Font.Style + [fsBold];
iLeft := (Rect.Right - Rect.Left - TextSize(PageControl1.Pages[TabIndex].Caption, PageControl1.Canvas.Font).X) div 2 + Rect.Left;
end
else
begin
PageControl1.Canvas.Font.Style := PageControl1.Canvas.Font.Style - [fsBold];
iLeft := (Rect.Right - Rect.Left - TextSize(PageControl1.Pages[TabIndex].Caption, PageControl1.Canvas.Font).X) div 2 + Rect.Left;
end;
PageControl1.Canvas.TextOut(iLeft, Rect.Top + 3, PageControl1.Pages[TabIndex].Caption);
end;
for i := 0 to PageControl1.PageCount - 1 do
begin
iTaille := TextSize(PageControl1.Pages[i].Caption, Font).X;
if iTaille > iMaxTaille then
iMaxTaille := iTaille;
end;
PageControl1.TabWidth := iMaxTaille + 16;
if Active then
begin
PageControl1.Canvas.Font.Style := PageControl1.Canvas.Font.Style + [fsBold];
iLeft := (Rect.Right - Rect.Left - TextSize(PageControl1.Pages[TabIndex].Caption, PageControl1.Canvas.Font).X) div 2 + Rect.Left;
end
else
begin
PageControl1.Canvas.Font.Style := PageControl1.Canvas.Font.Style - [fsBold];
iLeft := (Rect.Right - Rect.Left - TextSize(PageControl1.Pages[TabIndex].Caption, PageControl1.Canvas.Font).X) div 2 + Rect.Left;
end;
PageControl1.Canvas.TextOut(iLeft, Rect.Top + 3, PageControl1.Pages[TabIndex].Caption);
end;