Déssiner un rectangle dans un TMainMenu

cs_dugueclin Messages postés 66 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 10 juillet 2012 - 26 juil. 2006 à 16:06
cs_dugueclin Messages postés 66 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 10 juillet 2012 - 27 juil. 2006 à 16:14
Bonjour à tous,

Voici les procédures aves lesquelles je déssine un rectangle dans mon TMainMenu.
Ce code fonctionne très bien et déssine un rectangle bleu.

Mais celui-ci, ne se déssine au passage de la souris, que lorsque j'ai cliquer sur un bouton.
Comment faire pour déssiner le rectangle lorsque je fais glisser la souris sur les boutons et sans clicqer sur un bouton du menu?.

J'ai essayer :
avec la procédure de la form OnMousseMove.
avec la possition X,Y de la souris et essayer aussi plusieurs solutions diverses,
mais rien ne fonctionne correctement.

Quelqu'un pourrait-il m'aider à résoudre mon problème?.

En vous remercient d'avance, 
Sincères salutations et bon codding à tous.
Dugueclin.
 Voici les procédures.
procedure TForm1.DrawMenuText(X: integer;ACanvas: TCanvas;ARect: TRect;Text: string);
begin
 ARect.Left := X;
 DrawText(ACanvas.Handle,
         PChar(Text),
         -1,
         ARect,
         DT_SINGLELINE or DT_LEFT or DT_VCENTER);
end;


procedure TForm1.FichierDrawItem(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
begin
if  Selected  then
  begin
   ACanvas.Brush.Color := $00F0D6CA;
   MRect.Left := ARect.Left+1;
   MRect.Top := ARect.Top+1;
   MRect.Right := ARect.Right-1;
   MRect.Bottom := ARect.Bottom-1;
   ACanvas.FillRect(MRect);
   ACanvas.Brush.Color := $00B05F3C;
   setBkMode(ACanvas.Handle, Transparent);
   ACanvas.Font.Color := ClBlue;
   DrawMenuText(MRect.Left + 3, ACanvas, MRect, (sender as TMenuItem).Caption);
   ACanvas.FrameRect(MRect);
  end
else
  begin
   ACanvas.Brush.Color := ClMenu;
   MRect.Left := ARect.Left+1;
   MRect.Top := ARect.Top+1;
   MRect.Right := ARect.Right-1;
   MRect.Bottom := ARect.Bottom-1;
   ACanvas.FillRect(MRect);
   setBkMode(ACanvas.Handle, Transparent);
   ACanvas.Font.Color := ClBlue;
   DrawMenuText(MRect.Left + 3, ACanvas, MRect, (sender as TMenuItem).Caption);
  end;
end;

2 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
26 juil. 2006 à 19:57
Salut.

Le plus simple pour ton problème de clic, c'est d'employer l'événement OnAdvancedDrawItem au lieu de l'événement OnDrawItem.

procedure TForm1.FichierAdvancedDrawItem(Sender: TObject;
                  ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
var
   MRect: TRect;
begin
       if  (odSelected in State) or (odHotLight in State)  then  //...
       else //...
end;

A +
Thierry
0
cs_dugueclin Messages postés 66 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 10 juillet 2012
27 juil. 2006 à 16:14
Bonjour thWilliam,


Merci de m'aoir répondu, j'avais réessayer avec cette procédure, car, je ne connaissais pas ta condition if then , alors, je vais tester et si tu le permets, je te tiendrai informé du résultat.
En tout cas, je t'en remercie d'avance !!!. Sympat.
Sincères Salutations et bon codding !!!
Dugueclin.

A+ Eric
 
0
Rejoignez-nous