RetourForum Delphi
Nouveau compte - Se connecter - Perdu votre mot de passe?Recherche: Utilisateur - Message

Index > Forum général > Base de données : recherches de fichiers images classées..Nouveau post - Répondre
Dudu31
membre
13 messages
Message Base de données : recherches de fichiers images classées.. message: éditerle 25/10/16 à 00h31

Voici ci-après codes sources pour rechercher des images rangées dans les dossiers numérotés par chiffres (0..9) ou par lettres (A ou a ..z..ou Z).
Il faut d'abord extraire et identifier le premier caractère par exemple ECH3 , ici "E".. et 6AQ5, ici "6".
Fans le cas présenté ici, les "tiroirs" sont nommés Pict0 ..9 et suivants.

procedure TForm1.Table7AfterScroll(DataSet: TDataSet);
// table photo
var Photos : string;
    ch1 : string;
    PhotoTube : TJpegImage;
  begin
  SDirExe := ExtractFilePath(Application.ExeName);
  Photos := Table7.FieldByName('Photo').AsString;
  ch1 := copy(Photos,1,1);
  if ch1 = '0' then sDirImg4 := sDirExe + 'ImgMTX\Pict0\';
  if ch1 = '1' then sDirImg4 := sDirExe + 'ImgMTX\Pict1\';
  if ch1 = '2' then sDirImg4 := sDirExe + 'ImgMTX\Pict2\';
  if ch1 = '3' then sDirImg4 := sDirExe + 'ImgMTX\Pict3\';
  if ch1 = '4' then sDirImg4 := sDirExe + 'ImgMTX\Pict4\';
  if ch1 = '5' then sDirImg4 := sDirExe + 'ImgMTX\Pict5\';
  if ch1 = '6' then sDirImg4 := sDirExe + 'ImgMTX\Pict6\';
  if ch1 = '7' then sDirImg4 := sDirExe + 'ImgMTX\Pict7\';
  if ch1 = '8' then sDirImg4 := sDirExe + 'ImgMTX\Pict8\';
  if ch1 = '9' then sDirImg4 := sDirExe + 'ImgMTX\Pict9\';
  if (ch1 = 'A') or (ch1 = 'a') then sDirImg4:= sDirExe + 'ImgMTX\PictA\';
  if (ch1 = 'B') or (ch1 = 'b') then sDirImg4 := sDirExe + 'ImgMTX\PictB\';
  if (ch1 = 'C') or (ch1 = 'c') then sDirImg4 := sDirExe + 'ImgMTX\PictC\';
  if (ch1 = 'D') or (ch1 = 'd') then sDirImg4 := sDirExe + 'ImgMTX\PictD\';
  if (ch1 = 'E') or (ch1 = 'e') then sDirImg4 := sDirExe + 'ImgMTX\PictE\';
  if (ch1 = 'F') or (ch1 = 'f') then sDirImg4 := sDirExe + 'ImgMTX\PictF\';
  if (ch1 = 'G') or (ch1 = 'g') then sDirImg4 := sDirExe + 'ImgMTX\PictG\';
  if (ch1 = 'H') or (ch1 = 'h') then sDirImg4 := sDirExe + 'ImgMTX\PictH\';
  if (ch1 = 'I') or (ch1 = 'i') then sDirImg4 := sDirExe + 'ImgMTX\PictI\';
  if (ch1 = 'J') or (ch1 = 'j') then sDirImg4 := sDirExe + 'ImgMTX\PictJ\';
  if (ch1 = 'K') or (ch1 = 'k') then sDirImg4 := sDirExe + 'ImgMTX\PictK\';
  if (ch1 = 'L') or (ch1 = 'l') then sDirImg4 := sDirExe + 'ImgMTX\PictL\';
  if (ch1 = 'M') or (ch1 = 'm') then sDirImg4 := sDirExe + 'ImgMTX\PictM\';
  if (ch1 = 'N') or (ch1 = 'n') then sDirImg4 := sDirExe + 'ImgMTX\PictN\';
  if (ch1 = 'O') or (ch1 = 'o') then sDirImg4 := sDirExe + 'ImgMTX\PictO\';
  if (ch1 = 'P') or (ch1 = 'p') then sDirImg4 := sDirExe + 'ImgMTX\PictP\';
  if (ch1 = 'Q') or (ch1 = 'q') then sDirImg4 := sDirExe + 'ImgMTX\PictQ\';
  if (ch1 = 'R') or (ch1 = 'r') then sDirImg4 := sDirExe + 'ImgMTX\PictR\';
  if (ch1 = 'S') or (ch1 = 's') then sDirImg4 := sDirExe + 'ImgMTX\PictS\';
  if (ch1 = 'T') or (ch1 = 't') then sDirImg4 := sDirExe + 'ImgMTX\PictT\';
  if (ch1 = 'U') or (ch1 = 'u') then sDirImg4 := sDirExe + 'ImgMTX\PictU\';
  if (ch1 = 'V') or (ch1 = 'v') then sDirImg4 := sDirExe + 'ImgMTX\PictV\';
  if (ch1 = 'W') or (ch1 = 'w') then sDirImg4 := sDirExe + 'ImgMTX\PictW\';
  if (ch1 = 'X') or (ch1 = 'x') then sDirImg4 := sDirExe + 'ImgMTX\PictX\';
  if (ch1 = 'Y') or (ch1 = 'y') then sDirImg4 := sDirExe + 'ImgMTX\PictY\';
  if (ch1 = 'Z') or (ch1 = 'z') then sDirImg4 := sDirExe + 'ImgMTX\PictZ\';

  PhotoTube := TJPegImage.Create;
  try
    PhotoTube.LoadFromFile(sDirImg4+Table7.FieldByName('photo').AsString);
    Image4.Picture.Graphic := PhotoTube;

  finally
  PhotoTube.Free;
  end;
end;

Il me reste à ajouter le bon code :
si le fichier "Photos" est trouvé, afficher cette image, dans le cas contraire, afficher "image ?". Dans mes essais, cela fonctionnait avec des images .bmp et non avec le format .jpeg.
Dudu 31

ZeuS-[SFX]
modérateur
4750 messages
Message Re: Base de données : recherches de fichiers images classées.. message: éditerle 25/10/16 à 15h28

Ce code peut déjà être simplifié
 

code



procedure TForm1.Table7AfterScroll(DataSet: TDataSet);
// table photo
var Photos : string;
    ch1 : string;
    PhotoTube : TJpegImage;
  begin
  SDirExe := ExtractFilePath(Application.ExeName);
  Photos := Table7.FieldByName('Photo').AsString;
  ch1 := copy(Photos,1,1);
  if ch1 = '0' then sDirImg4 := sDirExe + 'ImgMTX\Pict0\';
  if ch1 = '1' then sDirImg4 := sDirExe + 'ImgMTX\Pict1\';
  if ch1 = '2' then sDirImg4 := sDirExe + 'ImgMTX\Pict2\';
  if ch1 = '3' then sDirImg4 := sDirExe + 'ImgMTX\Pict3\';
  if ch1 = '4' then sDirImg4 := sDirExe + 'ImgMTX\Pict4\';
  if ch1 = '5' then sDirImg4 := sDirExe + 'ImgMTX\Pict5\';
  if ch1 = '6' then sDirImg4 := sDirExe + 'ImgMTX\Pict6\';
  if ch1 = '7' then sDirImg4 := sDirExe + 'ImgMTX\Pict7\';
  if ch1 = '8' then sDirImg4 := sDirExe + 'ImgMTX\Pict8\';
  if ch1 = '9' then sDirImg4 := sDirExe + 'ImgMTX\Pict9\';
  if (ch1 = 'A') or (ch1 = 'a') then sDirImg4:= sDirExe + 'ImgMTX\PictA\';
  if (ch1 = 'B') or (ch1 = 'b') then sDirImg4 := sDirExe + 'ImgMTX\PictB\';
  if (ch1 = 'C') or (ch1 = 'c') then sDirImg4 := sDirExe + 'ImgMTX\PictC\';
  if (ch1 = 'D') or (ch1 = 'd') then sDirImg4 := sDirExe + 'ImgMTX\PictD\';
  if (ch1 = 'E') or (ch1 = 'e') then sDirImg4 := sDirExe + 'ImgMTX\PictE\';
  if (ch1 = 'F') or (ch1 = 'f') then sDirImg4 := sDirExe + 'ImgMTX\PictF\';
  if (ch1 = 'G') or (ch1 = 'g') then sDirImg4 := sDirExe + 'ImgMTX\PictG\';
  if (ch1 = 'H') or (ch1 = 'h') then sDirImg4 := sDirExe + 'ImgMTX\PictH\';
  if (ch1 = 'I') or (ch1 = 'i') then sDirImg4 := sDirExe + 'ImgMTX\PictI\';
  if (ch1 = 'J') or (ch1 = 'j') then sDirImg4 := sDirExe + 'ImgMTX\PictJ\';
  if (ch1 = 'K') or (ch1 = 'k') then sDirImg4 := sDirExe + 'ImgMTX\PictK\';
  if (ch1 = 'L') or (ch1 = 'l') then sDirImg4 := sDirExe + 'ImgMTX\PictL\';
  if (ch1 = 'M') or (ch1 = 'm') then sDirImg4 := sDirExe + 'ImgMTX\PictM\';
  if (ch1 = 'N') or (ch1 = 'n') then sDirImg4 := sDirExe + 'ImgMTX\PictN\';
  if (ch1 = 'O') or (ch1 = 'o') then sDirImg4 := sDirExe + 'ImgMTX\PictO\';
  if (ch1 = 'P') or (ch1 = 'p') then sDirImg4 := sDirExe + 'ImgMTX\PictP\';
  if (ch1 = 'Q') or (ch1 = 'q') then sDirImg4 := sDirExe + 'ImgMTX\PictQ\';
  if (ch1 = 'R') or (ch1 = 'r') then sDirImg4 := sDirExe + 'ImgMTX\PictR\';
  if (ch1 = 'S') or (ch1 = 's') then sDirImg4 := sDirExe + 'ImgMTX\PictS\';
  if (ch1 = 'T') or (ch1 = 't') then sDirImg4 := sDirExe + 'ImgMTX\PictT\';
  if (ch1 = 'U') or (ch1 = 'u') then sDirImg4 := sDirExe + 'ImgMTX\PictU\';
  if (ch1 = 'V') or (ch1 = 'v') then sDirImg4 := sDirExe + 'ImgMTX\PictV\';
  if (ch1 = 'W') or (ch1 = 'w') then sDirImg4 := sDirExe + 'ImgMTX\PictW\';
  if (ch1 = 'X') or (ch1 = 'x') then sDirImg4 := sDirExe + 'ImgMTX\PictX\';
  if (ch1 = 'Y') or (ch1 = 'y') then sDirImg4 := sDirExe + 'ImgMTX\PictY\';
  if (ch1 = 'Z') or (ch1 = 'z') then sDirImg4 := sDirExe + 'ImgMTX\PictZ\';

  PhotoTube := TJPegImage.Create;
  try
    PhotoTube.LoadFromFile(sDirImg4+Table7.FieldByName('photo').AsString);
    Image4.Picture.Graphic := PhotoTube;

  finally
  PhotoTube.Free;
  end;
end;



par
 

code



procedure TForm1.Table7AfterScroll(DataSet: TDataSet);
// table photo
var Photos : string;
    filename : string;
  begin
  Photos := Table7.FieldByName('Photo').AsString;
  if length(Photos)<=0 then exit;
  filename := ExtractFilePath(Application.ExeName +  'ImgMTX\Pict' + Photos[0]+'\'+Photos;
  if fileexists(fileName) then
  begin
    try
      Image4.Picture.LoadFromFile(Filename);
    finally
      PhotoTube.Free;
    end;
  end;
end;




Je n'ai plus Delphi donc il y'a peut-être quelques fautes de syntaxe

ZeuS-[SFX]
modérateur
4750 messages
Message Re: Base de données : recherches de fichiers images classées.. message: éditerle 25/10/16 à 15h31

L'édition ne marche plus c'est vrai...
il faut naturellement enlever la ligne "PhotoTube.Free;" qui devient inutile

Dudu31
membre
13 messages
Message Re: Base de données : recherches de fichiers images classées.. message: éditerle 04/11/16 à 07h14

Bonjour,
Merci pour cette réClin d'oeil langue onse ; malgré tout, je ne comprends pas votre citation ci-après : Pourquoi longueur du mot égal ou inférieur à zéro
  "if length(Photos)<=0 then exit; "
Dans le cas où il y a une erreur dans le libellé en principe surtout dans l'extension du fichier .jpg ou .bmp, l'application se bloque; dans ce cas, l'image .jpg est remplacée par une image nommée 'nop.jpg' ; dans les fichiers .bmp, l'image est remplacée par une nommée 'S00.bmp' ;
Je comptais analyser le nom de l'image pour trouver la position du point par rapport à la longueur du mot, extraire l'extension, et vérifier si c'est correct ...j'ai 35.000 lignes à vérifier.
DuDu31

tourlourou
modérateur
2935 messages
Message Re: Base de données : recherches de fichiers images classées.. message: éditerle 05/11/16 à 13h40

ExtractFileExt ?

<<débutant, et pour longtemps...>>

Dudu31
membre
13 messages
Message Re: Base de données : recherches de fichiers images classées.. message: éditerle 05/11/16 à 18h47

Bonjour Toulourou,
Votre proposition a été la bienvenue : j'ai ajouté un variable remplaçant l'image recherchée et une seconde, code_extension;
Après identification, si le code correspond à la valeur imposée, l'image à afficher est égale à l'image recherchée, dans le cas contraire, l'image à afficher est égale à l'image code_erreur, tout cela étant transcrit en langage Delphi.
L'image code_erreur se situe dans la même table.
Tout est entré dans l'ordre.
Merci pour ce détail.
Dudu31

Index > Forum général > Base de données : recherches de fichiers images classées..Nouveau post - Répondre
 page 1 sur 1