killerdam
Messages postés21Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention26 mai 2006
-
8 mars 2005 à 23:59
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015
-
9 mars 2005 à 19:22
bonjour.
J ai créé une stringgrid, et je recherche un moyen de savoir si une
ligne a été entierement remplie (toutes les cases). Je n ai pas trouvé
de fonction prédéfinies dans delphi.
Sachant que le nombre de lignes remplies est aléatoire.
si vous avez une solution, ou si vou connaissez une fontion predéfinie, faite moi en part.
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 9 mars 2005 à 08:15
Sinon, plus simple (en admettant que la colonne "0" est fixe càd en gris) càd FixedCols= 1:
<HR>
var
Ligne: integer; //ou byte si tu as moins de 256 lignes (max=255)
begin
Ligne:=1; {j'ai pris la ligne '1' en exemple càd la 2° ligne puisque la 1° s'appelle "0"}
if pos(#13#10#13#10,StringGrid1.Rows[Ligne].GetText)=0 then showmessage ('OK ! toutes les cases sont remplies') else showmessage ('Tout n''est pas rempli !');
end;
<HR>
Par contre s'il s'agit d'une grille sans colonne "0" fixe (colonne "0" non-grise") càd FixedCols=0 :
<HR>
var
Ligne: integer; //ou byte si tu as moins de 256 lignes (max =255)
begin
Ligne:=1; {j'ai pris la ligne '1' en exemple càd la 2° ligne puisque la 1° s'appelle "0"}
if (pos(#13#10#13#10,StringGrid1.Rows[Ligne].GetText)=0) and (pos(#13#10,StringGrid1.Rows[Ligne].GetText)<>1) then showmessage ('OK ! toutes les cases sont remplies') else showmessage ('Tout n''est pas rempli !');
end;
<HR>
ça devrait te suffire, sinon il y a encore la possibilité universelle qui gère FixedCols de 0 à sup à 0..je t'épargne le code...
N'oubliez pas de cliquer sur Réponse acceptée si c'est OK
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 9 mars 2005 à 07:04
<HR>
var
ligne: integer; //ou byte si tu as moins de 256 lignes (max=255)
begin
ligne:=1; {j'ai pris la ligne '1' en exemple càd la 2° ligne puisque la 1° s'appelle "0"}
if (StringReplace(StringGrid1.Rows[ligne].GetText,#13#10,'',[rfReplaceAll])='') then showmessage('Cette Ligne est vide') else showmessage('Cette Ligne contient du texte');
end;
<HR>
N'oubliez pas de cliquer sur Réponse acceptée si c'est OK
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 9 mars 2005 à 07:08
pardon, je t'ai donné la solution pour savoir si c'était tout vide ou s'il y avait quelque chose dans une des cases de la ligne...j'avais lu en diagonale ta question
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 9 mars 2005 à 07:33
<HR>
var
vide:boolean;
Ligne,colonne:integer;
begin
vide:=false;
Ligne:=1; {exemple de la ligne 1}
for colonne:=1 to StringGrid1.ColCount-1 do {je démarre à colonne=1 en admettant que la colonne "0" est grisée c'àd que c'est une marge sinon tu démarres à "0"}
begin
if StringGrid1.Cells[colonne,Ligne]='' then
begin
vide:=true;
break;//pour arrêter la boucle "for".."to"..."do"
end;
end;
if vide then showmessage ('Tout n''est pas rempli dans la ligne') else showmessage (OK ! Toutes les cases sont remplies')
end;
<HR>
tu peux simplifier si tu n'aimes pas le break...ça donne :
<HR>
var
vide:boolean;
Ligne,colonne:integer;
begin
vide:=false;
Ligne:=1; {exemple de la ligne 1}
for colonne:=1 to StringGrid1.ColCount-1 do {je démarre à colonne=1 en admettant que la colonne "0" est grisée c'àd que c'est une marge sinon tu démarres à "0"}
if StringGrid1.Cells[colonne,Ligne]='' then
vide:=true;
if vide then showmessage ('Tout n''est pas rempli dans la ligne') else showmessage (OK ! Toutes les cases sont remplies')
end;
<HR>
Après, tu fais comme bon te semble
N'oubliez pas de cliquer sur Réponse acceptée si c'est OK
DrJerome...
Vous n’avez pas trouvé la réponse que vous recherchez ?
killerdam
Messages postés21Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention26 mai 2006 9 mars 2005 à 11:42
merci
je me suis servi de la version avec FixedCols=1 et ca marche tres bien , mais je ne comprends pas ce que signifie les termes
#13#10#13#10 dans la fonction pos. Je sais qu il représente le sous chaine.
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 9 mars 2005 à 19:22
le #13#10 ce sont les deux caractères virtuels que l'on utilise par exemple dans un memo pour aller à la ligne. Dans un StringGrid ça sert à montrer qu'on passe à une autre case (cellule)
par exemple #13#10"un#13#10"deux"#13#10"trois"#13#10signifie :
un | deux | trois
donc quand je prens le texte d'une ligne, si je trouve un #13#10 collé à un autre #13#10 (càd #13#10#13#10) ...ça veut dire que la cellule est vide