f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 10 févr. 2007 à 11:39
oui on peu,
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Style := lbOwnerDrawVariable;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with ListBox1.Canvas do begin
if odSelected in State then begin
Brush.Color := clBlue;
font.Color := clWhite;
TextRect(Rect,Rect.Left+2,Rect.Top,ListBox1.Items[index]);
end else begin
Brush.Color := clWhite;
font.Color := clBlack;
TextRect(Rect,Rect.Left+2,Rect.Top,ListBox1.Items[index]);
end;
end;
end;
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 févr. 2007 à 12:17
Bonjour à tous,
@ Foxy, je pense que la question concernait un Tlistview et que l'exemple donné concerne un Tlistbox à moins que Codial ne se soit trompé ?
L'ami ThWilliam en date du 26/01/2007 avait suggéré avec pertinence que pour le Tlistbox, la propriété "Style" existait et ne devait pas être dans le Oncreate de la fiche.
Voici son code:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ListBox1 do
begin
if odSelected in State then
begin
Canvas.Brush.Color:= clskyblue; // par exemple
Canvas.Font.Color:= clwhite;
end
else
begin
Canvas.Brush.Color:= Color;
Canvas.Font.Color:= Font.Color;
end;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
end;
end;
Maintenant avec le Tlistview, je ne pense pas que cela peut s'appliquer.
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 20151 10 févr. 2007 à 15:00
Bonjour,
merci pour ton aide, mais celà je sais faire et le sujet du lien aussi.
En revanche ce que je n'arrive pas à faire c'est changer la couleur de la ligne sélectionnée.
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 10 févr. 2007 à 15:49
Bonjour,
@ codial, voici une piste :
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
x,y,i : integer;
s:string;
begin
with Sender as TListView do
begin
with Canvas do
begin
if Item.Index mod 2 = 1 then
begin
Brush.Color := rgb(240,240,255);
end
else
begin
Brush.Color := rgb(255,255,255);
end;
if Item.Selected then
begin
Brush.Color := rgb(220,220,255);
Pen.Style := psDot;
Pen.Color := clGray;
end
else
begin
Pen.Style := psSolid;
Pen.Color := Brush.Color;
end;
end;
end;
end;
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 11 févr. 2007 à 00:07
Bonsoir,
@ codial, je viens de faire le test avec le dernier code et lorsque je sélectionne chaque item sur les 6, le fond de couleur de chaque item se modifie bien comme demandé.
N. B. Brush.Color := rgb(240,240,255); peut être remplacé par Brush.Color := cllime etc....
procedure Tform1.Dessine_ListView;
var
i: integer;
neauliste: tlistitem;
begin
listview1.viewstyle : = vsreport;
with listview1.columns do
begin
clear;
with add do
begin
caption := 'Date';
width := columnheaderwidth;
alignment := taRightJustify;
width := 100;
end;
with add do
begin
caption := 'Valeur';
width := columnheaderwidth;
alignment := taRightJustify;
width := 100;
end;
with add do
begin
caption := 'Lettre';
width := columnheaderwidth;
alignment := taRightJustify;
width := 100;
end;
end;
randomize; listview1.items.clear;
for i := 0 to 10 do
begin
neauliste := listview1.items.add;
neauliste.caption := datetostr(now + i);
procedure TForm1.FormCreate(Sender: TObject);
begin
Dessine_ListView;
end;
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
with Sender as TListView do
begin
with Canvas do
begin
if Item.Selected then
begin
Brush.Color := cllime;//ou rgb(220,220,255);
Pen.Style := psDot;
Pen.Color := clGray;
end
else
begin
Pen.Style := psSolid;
Pen.Color := Brush.Color;
end;
end;
end;
end;
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 12 févr. 2007 à 10:31
Bonjour,
@ codial, si pour la 1ère colonne tu as la couleur bleue (avec Delphi6 c'est vert et ce n'est que la largeur du texte qui garde sa couleur car la colonne est aussi colorée comme les autres), qu'est ce qui t'empêche d'utiliser cette même couleur dans le code
Brush.Color := clblue //couleur de la selection par défaut
ou de mettre la propriété de rowselect à true pour avoir la sélection en bleu sur toutes les colonnes.
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 12 févr. 2007 à 10:44
@ codial, en désactivant tout le code dans la procédure
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
et en mettant les propriétés "RowSelect" et "HotTrack" à true, on obtient la sélection de toutes les colonnes avec la couleur par défaut, (chez moi en vert).
Je ne sais pas si tu sais changer cette couleur par défaut.
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 20151 12 févr. 2007 à 10:57
Bonjour,
non, justement je veux changer la couleur bleue de la ligne par ma couleur, car les sélections de tous les autres controls DBGrid ont la couleurs:
Dbgrid1.Canvas.Font.Style := [fsBold];
Dbgrid1.Canvas.Font.Color:=clBlack;
Dbgrid1.Canvas.Brush.Color := cl3DLight ;
et je cherche à garder une certaine homogénéitédans l'interface.