var start,Max,i,max_thumb,Zoom,l,h,x,y:integer;
Width,Height,IconX,iconY:integer;
ok,link:boolean;
backcolor:longint;
Icon,Css,Group,StartLink,fig,Filenamezoom,bmp,ZoomGroup,Topic,color,Legende: string;
BmpSource,BmpThumb,BmpZoom,BmpIcon:TBitmap;
ThumbList:TStringList;
js:TstringList;
WINDOW_OPEN_JS,PathFile,s:string;
css_filename,name,css_thumbnails:string;
popup:string;
begin

// on va dclarer le style css pour nos miniatures
css_filename := GetParam('FilenameCss',GetProjet+'_hw.css');
name := GetParam('Name','thumbnail');
css_thumbnails := GetProjet+Name;

// icon image ê incruster
icon := GetParam('Icon','');
iconX := strToInt(GetParam('IconX','0'));
iconY := strToInt(GetParam('IconY','0'));

Link := GetParam('Link','true')='true';
Css := GetParam('Css','');
color := CssValue(css,'background-color');
if color<>'' then BackColor := StringToColor(color) else BackColor := clwhite;
Start := StrToInt(GetParam('Start','0'));
Max := StrToInt(GetParam('Max','0'));
Group := GetParam('Group','');
Zoom := StrToInt(GetParam('Zoom','100'));
Width := StrToInt(GetParam('Width','100'));
Height:= StrToInt(GetParam('Height','100'));
// les donnes ne sont disponiblent que lors de la compilation
// c'est le script HtmlImageThumbnail qui les cres
if isCompilation then
begin
ThumbList:=TStringList.create; // va servir pour liminer les doublons

StartLink := '<<MCR(JI(qchPath,`')>>;


<<FNT(COMMENT.--,-,-,-:// obtenir le nombre total d'images lgendes)>>
max_Thumb := getVarInt(<<FNT(STRING.-,-,-,-:'idxZoom')>>,<<FNT(NUMBER.-,-,-,-:0)>>);



<<FNT(KEYWORD.-,-,-,-:if)>> Start< <<FNT(NUMBER.-,-,-,-:0)>> <<FNT(KEYWORD.-,-,-,-:then)>> Start:=<<FNT(NUMBER.-,-,-,-:1)>>;
<<FNT(KEYWORD.-,-,-,-:if)>> Max = <<FNT(NUMBER.-,-,-,-:0)>> <<FNT(KEYWORD.-,-,-,-:then)>> Max := max_Thumb;
<<FNT(KEYWORD.-,-,-,-:if)>> Start+Max-<<FNT(NUMBER.-,-,-,-:1)>> >max_Thumb <<FNT(KEYWORD.-,-,-,-:then)>> Max := max_Thumb-Start+<<FNT(NUMBER.-,-,-,-:1)>>;


<<FNT(COMMENT.--,-,-,-:// on dfini le conteneur)>>

<<FNT(KEYWORD.-,-,-,-:if)>> Condition(<<FNT(STRING.-,-,-,-:'_HTML_')>>) <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<WEB(<div class="')>>+css+<<FNT(STRING.-,-,-,-:'">)>>')>>);
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<WEB(<div class="thumbnailspacer">)>>')>>);
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:' ')>>);
writeln(<<FNT(STRING.-,-,-,-:'<<WEB(</div>)>>')>>);
<<FNT(KEYWORD.-,-,-,-:end)>>;
<<FNT(COMMENT.--,-,-,-:// pour chaque image)>>
<<FNT(KEYWORD.-,-,-,-:while)>> i<=max <<FNT(KEYWORD.-,-,-,-:do)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
fig := <<FNT(STRING.-,-,-,-:'ZOOM_')>>+intTostr(i); <<FNT(COMMENT.--,-,-,-:// entete identifiant)>>
<<FNT(COMMENT.--,-,-,-:// on rcup¾re le group)>>
Zoomgroup := GetVarString(fig+<<FNT(STRING.-,-,-,-:'_GRP')>>,<<FNT(STRING.-,-,-,-:'')>>);
<<FNT(KEYWORD.-,-,-,-:if)>> (group=<<FNT(STRING.-,-,-,-:'')>>) or (group=ZoomGroup) <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
ok := false;
<<FNT(COMMENT.--,-,-,-:// prparation de la vignette)>>
BmpSource := TBitmap.create;
<<FNT(COMMENT.--,-,-,-:// on rcup¾re la lgende)>>
Legende := getVarString(fig+<<FNT(STRING.-,-,-,-:'_LEG')>>,<<FNT(STRING.-,-,-,-:'')>>);
<<FNT(COMMENT.--,-,-,-:// on rcupre l'image originale)>>
bmp := GetVarString(fig+<<FNT(STRING.-,-,-,-:'_IMG')>>,<<FNT(STRING.-,-,-,-:'')>>);
<<FNT(KEYWORD.-,-,-,-:if)>> bmp=<<FNT(STRING.-,-,-,-:'')>> <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
Topic := GetVarString(fig+<<FNT(STRING.-,-,-,-:'_TPC')>>,<<FNT(STRING.-,-,-,-:'')>>);
<<FNT(KEYWORD.-,-,-,-:if)>> Topic<><<FNT(STRING.-,-,-,-:'')>> <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
BmpSource.LoadFromString(GetTextOf(GetProjet,Topic));
Bmp := Topic;
ok := true;
<<FNT(KEYWORD.-,-,-,-:end)>>;
<<FNT(KEYWORD.-,-,-,-:end)>> <<FNT(KEYWORD.-,-,-,-:else)>> <<FNT(KEYWORD.-,-,-,-:begin)>>
BmpSource.LoadFromFile(bmp);
ok := true;
<<FNT(KEYWORD.-,-,-,-:end)>>;

<<FNT(COMMENT.--,-,-,-:// vrifier maintenant que l'on ê pas djê affich cette vignette)>>
<<FNT(KEYWORD.-,-,-,-:if)>> ThumbList.IndexOf(Bmp)>-<<FNT(NUMBER.-,-,-,-:1)>> <<FNT(KEYWORD.-,-,-,-:then)>> Ok:=false;

<<FNT(KEYWORD.-,-,-,-:if)>> ok <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
ThumbList.add(Bmp);
L := BmpSource.Width;
H := BmpSource.Height;
BmpZoom := TBitmap.create;
<<FNT(COMMENT.--,-,-,-:// on ne peut sauver que des bitmaps alors il faut fixer la bonne extension)>>
<<FNT(COMMENT.--,-,-,-:// help&web se chargera par la suite de convertir)>>
FileNameZoom := changefileExt(<<FNT(STRING.-,-,-,-:'Thumb')>>+bmp,<<FNT(STRING.-,-,-,-:'.bmp')>>);
BmpZoom.width := L*Zoom <<FNT(KEYWORD.-,-,-,-:div)>> <<FNT(NUMBER.-,-,-,-:100)>>;
BmpZoom.height := H*Zoom <<FNT(KEYWORD.-,-,-,-:div)>> <<FNT(NUMBER.-,-,-,-:100)>>;

<<FNT(KEYWORD.-,-,-,-:if)>> BmpZoom.Width>Width <<FNT(KEYWORD.-,-,-,-:then)>> BmpZoom.Width := Width;
<<FNT(KEYWORD.-,-,-,-:if)>> BmpZoom.height>Height <<FNT(KEYWORD.-,-,-,-:then)>> BmpZoom.Height := Height;

BmpSource.Stretch(BmpZoom);

<<FNT(KEYWORD.-,-,-,-:if)>> Icon<><<FNT(STRING.-,-,-,-:'')>> <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
BmpIcon := TBitmap.create;
BmpIcon.LoadFromfile(icon);
BmpIcon.Transparent := true;
Bmpzoom.canvas.Draw(Iconx,IconY,BmpIcon);
<<FNT(KEYWORD.-,-,-,-:end)>>;

BmpThumb := TBitmap.create;
BmpThumb.Width := Width;
BmpThumb.Height:= Height;
<<FNT(COMMENT.--,-,-,-:// on repeind de la bonne couleur...)>>
bmpThumb.Brush.Color := BackColor;
bmpThumb.Pen.Color := BackColor;
bmpThumb.Canvas.Rectangle(<<FNT(NUMBER.-,-,-,-:0)>>,<<FNT(NUMBER.-,-,-,-:0)>>,Width,Height);
x := (Width - BmpZoom.Width) <<FNT(KEYWORD.-,-,-,-:div)>> <<FNT(NUMBER.-,-,-,-:2)>>;
y := (Height - BmpZoom.Height) <<FNT(KEYWORD.-,-,-,-:div)>> <<FNT(NUMBER.-,-,-,-:2)>>;

BmpThumb.Canvas.Draw(x,y,BmpZoom);




BmpThumb.SAveToFile(FilenameZoom);
BmpZoom.free;
BmpThumb.free;
BmpSource.free;


<<FNT(KEYWORD.-,-,-,-:if)>> Condition(<<FNT(STRING.-,-,-,-:'_HTML_')>>) <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:begin)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<WEB(<div class="')>>+css_thumbnails+<<FNT(STRING.-,-,-,-:'">)>>')>>);
<<FNT(COMMENT.--,-,-,-:// on va placer un lien sur l'image pour ouvrir celle-ci en taille relle)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<WEB(<a href="')>>+bmp+<<FNT(STRING.-,-,-,-:'" onclick="WindowOpen(this.href,')>>+inttostr(L+<<FNT(NUMBER.-,-,-,-:20)>>)+<<FNT(STRING.-,-,-,-:',')>>+IntToStr(H+<<FNT(NUMBER.-,-,-,-:20)>>)+<<FNT(STRING.-,-,-,-:'); return false;">)>>')>>);
<<FNT(COMMENT.--,-,-,-:// on y accole notre image)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<BMP(C,')>>+FilenameZoom+<<FNT(STRING.-,-,-,-:',,')>>+Legende+<<FNT(STRING.-,-,-,-:',,1,1)>>')>>);
<<FNT(COMMENT.--,-,-,-:// on ferme le lien et on passe ê la ligne)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<WEB(</a>)>>')>>);
<<FNT(COMMENT.--,-,-,-:// on crit ensuite la lgende, avec un lien vers la page o& se trouve l'image ou non)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(<<FNT(STRING.-,-,-,-:'<<WEB(<p>)>>')>>);
<<FNT(KEYWORD.-,-,-,-:if)>> Link <<FNT(KEYWORD.-,-,-,-:then)>>
<<FNT(KEYWORD.-,-,-,-:write)>>(StartLink+GetVarString(fig+<<FNT(STRING.-,-,-,-:'_Link')>>,<<FNT(STRING.-,-,-,-:'')>>)+<<FNT(STRING.-,-,-,-:'>')>>+fig+<<FNT(NUMBER.-,-,-,-:#39)>>+<<FNT(STRING.-,-,-,-:'):')>>+Legende+<<FNT(STRING.-,-,-,-:')>>'
) else
write(Legende);
write('<<WEB(</p></div>)>>');
end else if Condition('_HLP_') then
begin
// popup est le nom de notre rubrique dynamique contenant l'image taille relle
// la rubrique dynamique a t cr par le composant thumbnailimage
popup := replace(bmp,'.','')+'_thumbnail';
write('<<MCR(PI(qchPath,`')>>+popup+<<FNT(NUMBER.-,-,-,-:#39)>>+<<FNT(STRING.-,-,-,-:'):')>>+<<FNT(STRING.-,-,-,-:'<<BMP(C,')>>+FilenameZoom+<<FNT(STRING.-,-,-,-:',,')>>+Legende+<<FNT(STRING.-,-,-,-:',,1,1)>>')>>+<<FNT(STRING.-,-,-,-:')>> ');
end;

end;
end;
// image suivante
i := i + 1;

end;


if Condition('_HTML_') then
begin
// on ferme le conteneur
write('<<WEB(<div class="thumbnailspacer">)>>');
write(' ');
write('<<WEB(</div>)>>');
write('<<WEB(</div>)>>');
end;

ThumbList.free;

end else writeln('La planche des vignettes n'+#39+'est disponible que dans un format compil hlp, html, htmlhelp, pdf ou rtf');

if Condition('_HTML_') then
begin

// ne gnrer qu'une seule fois les css
if GetVarInt('htmlthumbnails',0)=0 then
begin
// on positionne la variable globale ê 1, comme cela la prochaine fois
// que ce script sera excut dans ce projet on ne viendra pas ici
SetVarInt('htmlthumbnails',1);
css_thumbnails := '.'+css_thumbnails;
SetCss(css_filename,css_thumbnails,'float','left');
SetCss(css_filename,css_thumbnails,'text-align','center');
SetCss(css_filename,css_thumbnails,'width',inttostr(width+20)+'px');
SetCss(css_filename,css_thumbnails,'height',inttostr(height+20)+'px');
SetCss(css_filename,css_thumbnails,'padding','10px');

SetCss(css_filename,'.thumbnailspacer','clear','both');
end;

// insrer lien vers css externe qu'une fois par page
if GetVarInt(css_filename+GetTitre,0)=0 then
begin
SetVarInt(css_filename+GetTitre,1);
writeln('<<WEB(head:<link rel="stylesheet" type="text/css" href="')>>+css_filename+<<FNT(STRING.-,-,-,-:'" />)>>');
end;

// on va maintenant crer le fichier js externe dfinissant notre fonction WindowOpen
WINDOW_OPEN_JS := 'windowopen.js';

// mais on va d'abord tester si on ne l'a pas djê fait ;)
if GetVarInt(WINDOW_OPEN_JS,0)=0 then
begin
SetVarInt(WINDOW_OPEN_JS,1); // pour ne pas le recrer la prochaine fois
JS := TStringList.create;
js.add('function WindowOpen(url,w1,h1){');
js.add('var w = screen.availWidth;');
js.add('var h = screen.availHeight;');
js.add('var leftPos = (w-w1)/2;');
js.add('var topPos = (h-h1)/2;');
s := 'window.open(url,'+#39+'zoom'+#39+','+#39+'width='+#39+' + w1 +'+#39;
s := s+ ',height='+#39+'+h1+'+#39+',top='+#39+'+topPos+'+#39+',left='+#39;
s := s+ '+leftPos+'+#39+ ',toolbar=no'+#39+', '+#39+'menubar=yes'+#39+', '+#39;
s := s+ 'location=no'+#39+', '+#39+'resizable=yes'+#39+', '+#39+'scrollbar=no'+#39;
s := s+ ', '+#39+'status=no'+#39+');';
js.add(s);
js.add('}');
// on sauvegarde
PathFile := PathProjet ;
if Condition('_HTMLHELP_') then PathFile:=PAthFile+'htmlhelp\';
PathFile:=PathFile+'html\';
js.SaveToFile(PathFile+WINDOW_OPEN_JS);
JS.free;
end;

// si on ne l'a pas djê fait pour cette page on place un lien dans le head pour lier notre script
if GetVarInt(WINDOW_OPEN_JS+GetTitre,0)=0 then
begin
SetVarInt(WINDOW_OPEN_JS+GetTitre,1);
writeln('<<WEB(head:<script type="text/javascript" src="')>>+WINDOW_OPEN_JS+<<FNT(STRING.-,-,-,-:'"></script>)>>');
end;
end;

end;
end.

Sommaire