Options d'affichage de la StringGrid [Résolu]

Jubilatthorr 15 Messages postés jeudi 19 mai 2005Date d'inscription 5 septembre 2005 Dernière intervention - 4 juin 2005 à 16:10 - Dernière réponse : cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention
- 8 juin 2005 à 20:46
Bonjour à tous,

Pour présenter des résultats j'utilise une StringGrid, et je souhaiterais qu'elle soit la plus discrète, la plus intégrée possible au reste de la feuille. En particulier j'aimerais que la sélection de cellule ne soit pas possible, pour éviter que la cellule sélectionnée s'affiche toujours en bleu.
J'aimerais aussi interdire à l'utilisateur de se "déplacer" à l'intérieur du tableau. C'est à dire que j'ai enlevé les scrolls mais il est toujours possible de se déplacer en restant appuyé sur la souris tout en la déplaçant.

D'avance merci pour vos réponses ;)
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 5 juin 2005 à 08:36
3
Merci
Je propose la démarche suivante :

1er étape - Créer une méthode chargée de modifier la cellule sélectionnée. Cette méthode prendra un seul paramètre qui est une référence sur le contrôle grille. Pour que cette méthode soit utilisable le plus largement possible, nous lui passerons une référence sur un TCustomDrawGrid :

<CODE><CODE>procedure TCalcul.HideGridSelection(Grid: TCustomDrawGrid);
var
  R: TGridRect;
begin
  R.TopLeft :=  TGridCoord(Point(-1, -1));
  R.BottomRight := TGridCoord(Point(-1, -1));
  Grid.Selection := R;
 end ;
</CODE>

2ème étape - Créons un squelette de procédure pour l'évènement OnDrawCell du composant grille et ajoutons y un appel à la méthode précédente :

procedure TCalcul.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
//Pour effacer la s&#233;lection m&#234;me quand le contr&#244;le perd le focus
  HideGridSelection(Sender as TStringGrid);
end;

</CODE>
Et hop, ça marche !
Elle est pas belle la vie ?

<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
cs_grandvizir 1237 Messages postés samedi 8 novembre 2003Date d'inscription 3 septembre 2006 Dernière intervention - 4 juin 2005 à 16:46
0
Merci
Options.Editing:=false;
TStringGrid.Enabled:=false;

Autant tout bloquer...

===========
Validez les réponses si ok...

ViewVite : HTML
Commenter la réponse de cs_grandvizir
Jubilatthorr 15 Messages postés jeudi 19 mai 2005Date d'inscription 5 septembre 2005 Dernière intervention - 4 juin 2005 à 17:15
0
Merci
Merci pour ta réponse qui règle en partie le problème mais au démarrage la première cellule s'affiche toujours en bleu. Sais-tu comment éviter cela?
Commenter la réponse de Jubilatthorr
cs_grandvizir 1237 Messages postés samedi 8 novembre 2003Date d'inscription 3 septembre 2006 Dernière intervention - 4 juin 2005 à 17:23
0
Merci
Form1.ActiveControl:= nil ;

La sélection vient du fait que le composant fenêtré est actif... pas actif donc pas de sélection. Rien ne t'empêche d'activer un composant de ton choix via la fonction SetFocus.

=============
Validez les réponses si ok...

ViewVite : HTML
Commenter la réponse de cs_grandvizir
Jubilatthorr 15 Messages postés jeudi 19 mai 2005Date d'inscription 5 septembre 2005 Dernière intervention - 4 juin 2005 à 18:23
0
Merci
J'ai recopié ta ligne de code mais j'ai toujours une sélection en bleu :/
Voici le code:
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Form1.ActiveControl:=nil;
Application.Run;
end.

Sais-tu s'il est possible de désactiver ce seul composant (la TStringGrid) dès le démarrage, dans l'inspecteur d'objet par exemple?

Merci de ton aide
Commenter la réponse de Jubilatthorr
cs_grandvizir 1237 Messages postés samedi 8 novembre 2003Date d'inscription 3 septembre 2006 Dernière intervention - 4 juin 2005 à 20:06
0
Merci
Il ne faut pas coder le ActiveControl à ce niveau. C'est dans l'inspecteur d'objet (F11) qu'il faut régler une fois pour toute la focalisation de tel ou tel composant, de manière à ce qu'il ne puisse plus être activé (avec Enabled=false). Mais avec Enabled, ça risque de faire tout gris.

Ou alors, en gérant une interception WM_ActiveControl (un truc dans ce genre) ou un évènement OnEnter, tu rediriges la focalisation demandée. Ainsi, il n'est plus focusé...

Désolé, mais ça risque de tourner en rond... Alors

===========
ViewVite : HTML
Commenter la réponse de cs_grandvizir
Jubilatthorr 15 Messages postés jeudi 19 mai 2005Date d'inscription 5 septembre 2005 Dernière intervention - 6 juin 2005 à 20:09
0
Merci
Merci Delphiprog!

C'est pas facile mais puissamment efficace! :)

Sait-tu s'il est possible d'appeler ta procédure dès le chargement de la feuille? Le compilateur me répond que HideGridSelection est une variable non déclarée:

begin


HideGridSelection(StringGrid1 as TStringGrid);
end.
Commenter la réponse de Jubilatthorr
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 7 juin 2005 à 21:19
0
Merci
Si tu observes le code ci-dessus :
<CODE>procedure TCalcul.HideGridSelection(Grid: TCustomDrawGrid);
</CODE>
Tu peux voir que la classe de la fiche se nomme TCalcul et que cette classe possède (au moins) une méthode nommée : HideGridSelection.
Il te suffit donc de déclarer une procédure dans la section Public ou Private de la fiche (comme il te plaira) :
TCalcul = class (TForm)
//...
private
procedure HideGridSelection(AGrid: TCustomDrawGrid);
end;

Alors que le curseur est encore dans la déclaration de la classe TCalcul, tu appuies sur Shift+Ctrl+C et Delphi écrira tout seul le squelette de cette méthode. Il ne te reste plus qu'à reproduire le code indiqué. On peut aussi faire un clic droit et sélectionner "Compléter la classe sous le curseur".

Note bien que si tu as déjà recopié le code donné dans le précédent post dans la partie implémentation, alors place ton curseur entre le begin et le end de la procédure et appuie également sur Shift+Ctrl+C. Delphi procédera ajoute alors en section Private la déclaration de ta procédure. Magique, non ?
Ah, si on pouvait disposer du même confort sous C++Builder...

<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<
Commenter la réponse de cs_Delphiprog
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 7 juin 2005 à 21:52
0
Merci
Salut à tous,

Delphiprog, il est inutile de créer un membre de classe pour cette
procédure que tu nous a posté puisqu'il n'y a aucune référence aux
objets de la classe TCalcul (dans ton exemple).



Sinon, ton histoire de Shift, Ctrl + C ne marque pas sur les versions personnelles de Delphi (aussi bien 6, 7, 8 que 2005).



@ ++

Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
Commenter la réponse de florenth
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 7 juin 2005 à 22:52
0
Merci
Florenth : tu as tout à fait raison. Ce n'est pas nécessaire de créer une méthode pour cela dans le cas présent. Mais ça ne nuit pas non plus

Je suis étonné que la combinaison de touches ne fonctionne pas avec Delphi édition perso. Quand tu fais un clic droit à l'intérieur de la déclaration d'une classe, vois-tu oui ou non le choix "Compléter la classe sous le curseur" dans le menu contextuel ?


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<
Commenter la réponse de cs_Delphiprog
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 8 juin 2005 à 12:24
0
Merci
J'imagine bien que les clases ne nuisent pas. car .NET est conçu
exclusivement là-dessus. (je ne programme pas en .NET mais comme D2005
est gratuit et qu'il le propose j'ai essayé).



Non malheusement, je n'ai pas ce sous menu lorsque je clique droit.
Tout comme les options de refactoring tant convoités de Delphi 2005 (et
qui semblent très pratiques).



@ ++ Florent
Commenter la réponse de florenth
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 8 juin 2005 à 20:46
0
Merci
Merci pour cette info. J'ignorais que l'édition perso ne possédait pas cette option si pratique.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<
Commenter la réponse de cs_Delphiprog

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.