- procedure former(Obj:tform;img:tbitmap;couleur:tcolor);
- var
- x, y, reg, regtemp, debut, fin:integer;
- EtaitTrans, first:boolean;
- begin
- obj.height:=img.height; //on adapte les
- obj.width:=img.width; //dimensions de la fiche
- first:=true; //c'est pour savoir si on a deja créé une région : voir CombineRgn (nécessite une region non vide)
- for y:=1 to img.height do begin
- debut:=1; //debut=debut de la zone non- transparente
- fin:=1; //fin =fin de la zone non- transparente
- EtaitTrans:=true; //EtaitTrans, c'est pour savoir si le pixel examiné précédemment était transparent ou pas
- for x:=1 to img.width do begin
- if img.Canvas.Pixels[x,y]=couleur then begin//si le pixel est transparent
- if EtaitTrans=false then begin //et que le précédent ne l'etait pas
- fin:=x-1; //le dernier pixel non transparent etait le precedent
- if first=true then begin //si c'est la 1°region qu'on crée:
- reg:=CreateRectRgn(debut,y,fin+1,y+1);//on la crée
- first:=false; //la prochaine ne sera plus la premiere
- end else begin //si c'est pas la premiere region
- regtemp:=createrectrgn(debut,y,fin+1,y+1);//on en crée une temporaire
- CombineRgn(reg, reg, regtemp, rgn_or);//on l'ajoute à reg qui sera la region finale avec rgn_or (voir autres possibilités dans l'aide)
- deleteobject(regtemp); //on supprime la region temporaire
- end;
- end;
- EtaitTrans:=true;
- end else begin //le pixel n'est pas transparent
- if EtaitTrans=true then debut:=x; //ben oui rien que ca
- EtaitTrans:=false;
- if x=img.width-1 then //on arrive au dernier point de la ligne
- if first=true then begin //si c'est la 1°region qu'on crée:
- reg:=CreateRectRgn(debut,y,x,y+1); //on la crée
- first:=false; //la prochaine ne sera plus la premiere
- end else begin //si c'est pas la premiere region
- regtemp:=createrectrgn(debut,y,x,y+1); //on en crée une temporaire
- CombineRgn(reg, reg, regtemp, rgn_or); //on l'ajoute à reg qui sera la region finale avec rgn_or (voir autres possibilités dans l'aide)
- deleteobject(regtemp); //on supprime la region temporaire pour rester propres (si on ne le fait pas, ca se fait autom. qd on ferme l'application)
- end;
- end;
- end;
- end;
-
- SetWindowRgn(Obj.handle, reg,true); //on applique la region finale !
- end;
procedure former(Obj:tform;img:tbitmap;couleur:tcolor);
var
x, y, reg, regtemp, debut, fin:integer;
EtaitTrans, first:boolean;
begin
obj.height:=img.height; //on adapte les
obj.width:=img.width; //dimensions de la fiche
first:=true; //c'est pour savoir si on a deja créé une région : voir CombineRgn (nécessite une region non vide)
for y:=1 to img.height do begin
debut:=1; //debut=debut de la zone non- transparente
fin:=1; //fin =fin de la zone non- transparente
EtaitTrans:=true; //EtaitTrans, c'est pour savoir si le pixel examiné précédemment était transparent ou pas
for x:=1 to img.width do begin
if img.Canvas.Pixels[x,y]=couleur then begin//si le pixel est transparent
if EtaitTrans=false then begin //et que le précédent ne l'etait pas
fin:=x-1; //le dernier pixel non transparent etait le precedent
if first=true then begin //si c'est la 1°region qu'on crée:
reg:=CreateRectRgn(debut,y,fin+1,y+1);//on la crée
first:=false; //la prochaine ne sera plus la premiere
end else begin //si c'est pas la premiere region
regtemp:=createrectrgn(debut,y,fin+1,y+1);//on en crée une temporaire
CombineRgn(reg, reg, regtemp, rgn_or);//on l'ajoute à reg qui sera la region finale avec rgn_or (voir autres possibilités dans l'aide)
deleteobject(regtemp); //on supprime la region temporaire
end;
end;
EtaitTrans:=true;
end else begin //le pixel n'est pas transparent
if EtaitTrans=true then debut:=x; //ben oui rien que ca
EtaitTrans:=false;
if x=img.width-1 then //on arrive au dernier point de la ligne
if first=true then begin //si c'est la 1°region qu'on crée:
reg:=CreateRectRgn(debut,y,x,y+1); //on la crée
first:=false; //la prochaine ne sera plus la premiere
end else begin //si c'est pas la premiere region
regtemp:=createrectrgn(debut,y,x,y+1); //on en crée une temporaire
CombineRgn(reg, reg, regtemp, rgn_or); //on l'ajoute à reg qui sera la region finale avec rgn_or (voir autres possibilités dans l'aide)
deleteobject(regtemp); //on supprime la region temporaire pour rester propres (si on ne le fait pas, ca se fait autom. qd on ferme l'application)
end;
end;
end;
end;
SetWindowRgn(Obj.handle, reg,true); //on applique la region finale !
end;