ListView Color des titres des Colonnes [Résolu]

Messages postés
5
Date d'inscription
vendredi 30 juillet 2004
Dernière intervention
9 septembre 2010
- 7 sept. 2010 à 14:14 - Dernière réponse :
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 10 sept. 2010 à 10:39
Bonjours,

J'ai une question concernant les ListView est-il possible de personnaliser la couleur des titres des Colonnes ?

Je l'ai déjà fais sur un DBGRID avec les propriétés FixedColor et une autre (chez plus le nom) pour changer la couleur du texte.
Hors ces propriétés n'existent pas dans un ListView .

Merci pour vos infos
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
5
Date d'inscription
vendredi 30 juillet 2004
Dernière intervention
9 septembre 2010
- 9 sept. 2010 à 09:25
3
Merci
Pour ce qui on se probleme , voila une solution :

unit ListviewEx;

interface

Uses Windows, SysUtils, Messages, Classes, Controls, ComCtrls, Graphics;

Const
PM_CHANGEPROC = WM_USER + 1;
PM_HEADERMSG = WM_USER + 2;

Type
TListViewEx = class(TListView)
private
FFixedColor : TColor;
AFixedColor : TColor;
AColumnHdr : integer;
Header : HWND;
HeaderWndProc : Integer;
procedure ChangeHeaderWndProc(var Msg : TMessage); message PM_CHANGEPROC;
procedure HeaderMessage(var Msg : TMessage); message PM_HEADERMSG;
procedure CMRecreateWnd(var Message: TMessage); message CM_RECREATEWND;
procedure DrawButtons;
procedure SetFixedColor(const Value: TColor);
procedure SetActiveFixedColor(const Value: TColor);
procedure SetActiveColumnHdr(const Value: integer);
public
constructor Create(AOwner : TComponent); override;
procedure CreateHandle; override;
published
property FixedColor : TColor read FFixedColor Write SetFixedColor;
property ActiveFixedColor : TColor read AFixedColor Write SetActiveFixedColor;
property ActiveColumnHdr : integer read AColumnHdr Write SetActiveColumnHdr;
End;


procedure Register;

implementation

procedure Register;
Begin
RegisterComponents('TListViewEX', [TListViewEx]);
End;

{ TListViewEx }

function MyWndProc(Wnd: HWND; Msg, WParam, LParam: Longint): Longint; stdcall;
Var
ParentH : HWND;
M : TMessage;
Begin
ParentH := GetParent(Wnd);
If (ParentH 0) or (ParentH Wnd) Then Begin
Result := 1;
Exit;
End;

M.Msg := Msg;
M.WParam := WParam;
M.LParam := LParam;

Result := SendMessage(ParentH, PM_HEADERMSG, Integer(@M), 0);
end;

procedure TListViewEx.ChangeHeaderWndProc(var Msg: TMessage);
begin
CMRecreateWnd(Msg);
If (Parent <> nil) Then Begin
Header := FindWindowEx(Handle, 0, 'SysHeader32', nil);
If Header = 0 Then Exit;
HeaderWndProc := GetWindowLong(Header, GWL_WNDPROC);
SetWindowLong(Header, GWL_WNDPROC, Longint(@MyWndProc));
End;
end;

procedure TListViewEx.CMRecreateWnd(var Message: TMessage);
begin
If Header <> 0 Then Begin
If HeaderWndProc <> 0 Then
SetWindowLong(Header, GWL_WNDPROC, HeaderWndProc);
Header := 0;
HeaderWndProc := 0;
End;
end;

procedure TListViewEx.HeaderMessage(var Msg: TMessage);
Var
M : PMessage;
begin
M := PMessage(Msg.WParam);

Msg.Result := CallWindowProc(Pointer(HeaderWndProc), Header, M^.Msg, M^.WParam, M^.LParam);

If M^.Msg = WM_PAINT Then
DrawButtons;
end;

procedure TListViewEx.DrawButtons;
Var
DC : HDC;
Bounds : TRect;
Border1,
Border2 : Integer;
I, X : Integer;

Canvas : TCanvas;
Begin
If Header = 0 Then Exit;

Windows.GetClientRect(Header, Bounds);

Border1 := GetSystemMetrics(SM_CXBORDER);
Border2 := GetSystemMetrics(SM_CXFIXEDFRAME) - Border1;

DC := GetDC(Header); X := 0;

Canvas := TCanvas.Create;
Canvas.Handle := DC;

Canvas.Brush.Color := FFixedColor;
if ParentFont then
Canvas.Font := self.Font;

For I := 0 To Columns.Count - 1 Do Begin

if AColumnHdr > -1 then
begin
if (i = AColumnHdr) then
Canvas.Brush.Color := AFixedColor
else
Canvas.Brush.Color := FFixedColor;
end;
Canvas.FillRect(Rect(X + Border1, Border1,
X + Columns[I].Width - Border2,
Bounds.Bottom - Border2));

Canvas.TextOut(X + Border2, Border2, Columns[I].Caption);

X := X + Columns[I].Width;
End;
Canvas.FillRect(Rect(X + Border1, Border1, Bounds.Right, Bounds.Bottom - Border2));

Canvas.Free;
End;

procedure TListViewEx.SetActiveColumnHdr(const Value: integer);
begin
AColumnHdr := Value;
end;

procedure TListViewEx.SetActiveFixedColor(const Value: TColor);
begin
AFixedColor := Value;
end;

procedure TListViewEx.SetFixedColor(const Value: TColor);
begin
FFixedColor := Value;
DrawButtons;
end;

procedure TListViewEx.CreateHandle;
begin
inherited;

If Parent <> nil Then
PostMessage(Handle, PM_CHANGEPROC, 0, 0);
end;

constructor TListViewEx.Create(AOwner: TComponent);
begin
inherited;
Header := 0;
HeaderWndProc := 0;

ViewStyle := vsReport;
FixedColor := clBtnFace;

AColumnHdr := -1;
AFixedColor := clBtnFace;
end;

end. 

Merci jorisT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de jorisT
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 8 sept. 2010 à 01:31
0
Merci
Ca devient grave question "se prendre en charge" !

Il y a juste 24 heures !
Commenter la réponse de Caribensila
Messages postés
5
Date d'inscription
vendredi 30 juillet 2004
Dernière intervention
9 septembre 2010
- 8 sept. 2010 à 09:22
0
Merci
Dsl si je suis débutant et que sur internet je n'ai rien trouvé à part sur un forum anglais ou un mec explique que lui a redeveloppé le composant pour le faire car d'apres lui sur Delphi 5 se n'est pas possible.

Pourtant je pensais avoir mis mon message dans la partie débutant !!!!
Commenter la réponse de jorisT
Messages postés
5
Date d'inscription
vendredi 30 juillet 2004
Dernière intervention
9 septembre 2010
- 8 sept. 2010 à 09:25
0
Merci
Et pour info FixedColor et TitreFont n'existe pas pour les ListViews du moins sur Delphi 5 mais il existe dans les DBGRID.
Commenter la réponse de jorisT
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 9 sept. 2010 à 17:04
0
Merci
bon c'est bien t'as fini par trouver tout seul !!

il t'a fallu deux questions sous deux pseudos différents pour en arriver à ça ... soit mais t'as oublié le plus important ... on cite toujours ses sources par respect pour l'auteur original:

http://www.delphipages.com/forum/showthread.php?t=199219
Merci pour lui


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 10 sept. 2010 à 01:52
0
Merci
« Pourtant je pensais avoir mis mon message dans la partie débutant !!!! »

Ouais. Et alors ?..

Si on n'a pas créé de rubrique 'fainéant', c'est parce qu'on a nos raisons.
(Y'a pas plus actifs que les fainéants sur un forum d'entraide gratos.)
Commenter la réponse de Caribensila
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 10 sept. 2010 à 10:39
0
Merci
et pour toute réponse monsieur demande la suppression de son compte !!

enfin il te reste encore le deuxième compte pour répondre


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.