Agrandissement proportionnelle

Contenu du snippet

<pre>
{Agrandir proportionnellement à partir d'une pastille la résolution d'une image quelconque. Visulalisateur Xavier}
  procedure agrandissement_central(at_element:wformes.tforme); {écrit par denis Bertin le 11.12.2016}
    var i,j:integer;
        anode:font_ob1.testnode;
        une_distance,rapport:real;
        un_at_element:wformes.tforme;
        control:boolean;
        attrib:wcarac.TUn_attrib;
        my_rect:trect;
    begin
    if at_element=nil then exit;
    control:=(wmsg.msg.wparam and mk_control)<>0;
    une_distance:=utile.distance_2pt(wformes.global_central_point,wmsg.point);
    rapport:=une_distance/utile.distance(
      wformes.global_central_point.x,
      wformes.global_central_point.Y,
        wformes.global_rect_central.Right,
        wformes.global_rect_central.bottom)/200;
    if rapport>=5 then rapport:=5;
    if at_element.ClassType=wformes1.tforme_dessin then
      begin
      for i:=0 to pred(wformes1.tforme_dessin(at_element).elements.count) do
        begin
        anode:=wformes1.tforme_dessin(at_element).elements.at(i);
        if control then
          begin
          anode.x:=round(anode.x-anode.x*rapport);
          anode.y:=round(anode.y-anode.y*rapport);
          anode.z:=round(anode.z-anode.z*rapport);
          end
        else
          begin
          anode.x:=round(anode.x+anode.x*rapport);
          anode.y:=round(anode.y+anode.y*rapport);
          anode.z:=round(anode.z+anode.z*rapport);
          end;
        end;
      at_element.calcul;
      end
    else if at_element.ClassType=wformes1.tforme_text then
      begin
      my_rect:=at_element.rect;
      if control then
        wformes1.tforme_text(at_element).af.raf.taille:=
          wformes1.tforme_text(at_element).af.raf.taille-
            round(wformes1.tforme_text(at_element).af.raf.taille*rapport)
      else
        wformes1.tforme_text(at_element).af.raf.taille:=
          wformes1.tforme_text(at_element).af.raf.taille+
            round(wformes1.tforme_text(at_element).af.raf.taille*rapport);
      if wformes1.tforme_text(at_element).af.raf.taille<=0 then
        wformes1.tforme_text(at_element).af.raf.taille:=1;
      if wformes1.tforme_text(at_element).af.raf.taille>999 then
        wformes1.tforme_text(at_element).af.raf.taille:=999;
      wformes1.tforme_text(at_element).af.raf.index:=0;
      at_element.calcul;
      wformes1.tforme_text(at_element).af.raf.x:=wformes1.tforme_text(at_element).af.raf.x-(at_element.right-my_rect.right) div 2;
      wformes1.tforme_text(at_element).af.raf.y:=wformes1.tforme_text(at_element).af.raf.y-((at_element.top-my_rect.top)+(at_element.bottom-my_rect.bottom)) div 2;
      at_element.calcul;
      end
    else if at_element.ClassType=wformes1.TForme_bloc_de_true_type then
      begin
      for j:=0 to pred(wformes1.TForme_bloc_de_true_type(at_element).une_collection.count) do
        begin
        attrib:=wformes1.TForme_bloc_de_true_type(at_element).une_collection.at(j);
        if attrib<>nil then
          begin
          if attrib.ClassType=wcarac.TUn_attrib then
            begin
            if control then
              attrib.size_font:=attrib.size_font-round(attrib.size_font*rapport)
            else
              attrib.size_font:=attrib.size_font+round(attrib.size_font*rapport);
            if attrib.size_font<=0 then attrib.size_font:=1;
            if attrib.size_font>500 then attrib.size_font:=500;
            end;
          end; {attrib<>nil}
        end; {for j}
      at_element.calcul;
      end
    else if at_element.ClassType=wformes1.tforme_ligne then
      begin
      if control then
        wformes1.tforme_ligne(at_element).size:=
          wformes1.tforme_ligne(at_element).size-
            round(wformes1.tforme_ligne(at_element).size*rapport)
      else
        wformes1.tforme_ligne(at_element).size:=
          wformes1.tforme_ligne(at_element).size+
            round(wformes1.tforme_ligne(at_element).size*rapport);
      if wformes1.tforme_ligne(at_element).size<=0 then
        wformes1.tforme_ligne(at_element).size:=1;
      if wformes1.tforme_ligne(at_element).size>500 then
        wformes1.tforme_ligne(at_element).size:=500;
      at_element.calcul;
      end
    else if at_element.ClassType=wformes1.tforme_little_texte then
      begin
      if control then
        wformes1.tforme_little_texte(at_element).size:=
          wformes1.tforme_little_texte(at_element).size-
            round(wformes1.tforme_little_texte(at_element).size*rapport)
      else
        wformes1.tforme_little_texte(at_element).size:=
          wformes1.tforme_little_texte(at_element).size+
            round(wformes1.tforme_little_texte(at_element).size*rapport);
      if wformes1.tforme_little_texte(at_element).size<=0 then
        wformes1.tforme_little_texte(at_element).size:=1;
      if wformes1.tforme_little_texte(at_element).size>999 then
        wformes1.tforme_little_texte(at_element).size:=999;
      at_element.calcul;
      end
    else if at_element.ClassType=wformebm.Tforme_TBitMap then
      begin
      my_rect:=at_element.rect;
      if control then
        begin
        wformebm.Tforme_TBitMap(at_element).rect.left:=wformebm.Tforme_TBitMap(at_element).rect.left+
          round(wformebm.Tforme_TBitMap(at_element).rect.left*rapport);
        wformebm.Tforme_TBitMap(at_element).rect.top:=wformebm.Tforme_TBitMap(at_element).rect.top+
          round(wformebm.Tforme_TBitMap(at_element).rect.top*rapport);
        wformebm.Tforme_TBitMap(at_element).rect.right:=wformebm.Tforme_TBitMap(at_element).rect.right-
          round(wformebm.Tforme_TBitMap(at_element).rect.right*rapport);
        wformebm.Tforme_TBitMap(at_element).rect.bottom:=wformebm.Tforme_TBitMap(at_element).rect.bottom-
          round(wformebm.Tforme_TBitMap(at_element).rect.bottom*rapport);
        end
      else
        begin
        wformebm.Tforme_TBitMap(at_element).rect.left:=wformebm.Tforme_TBitMap(at_element).rect.left-
          round(wformebm.Tforme_TBitMap(at_element).rect.left*rapport);
        wformebm.Tforme_TBitMap(at_element).rect.top:=wformebm.Tforme_TBitMap(at_element).rect.top-
          round(wformebm.Tforme_TBitMap(at_element).rect.top*rapport);
        wformebm.Tforme_TBitMap(at_element).rect.right:=wformebm.Tforme_TBitMap(at_element).rect.right+
          round(wformebm.Tforme_TBitMap(at_element).rect.right*rapport);
        wformebm.Tforme_TBitMap(at_element).rect.bottom:=wformebm.Tforme_TBitMap(at_element).rect.bottom+
          round(wformebm.Tforme_TBitMap(at_element).rect.bottom*rapport);
        end;
      at_element.deplace(
        ((my_rect.right+my_rect.left) div 2-(at_element.rect.right+at_element.rect.left) div 2),
        ((my_rect.bottom+my_rect.top) div 2-(at_element.rect.bottom+at_element.rect.top) div 2),0);
      {écrit par denis Bertin le 11.12.2016}
      my_rect:=at_element.rect;
      end
    else if (at_element.ClassType=wformes2.tforme_groupe)
    //or (at_element.ClassType=wformes2.Tforme_indice)
    or (at_element.ClassType=wformes2.tforme_symetrie_horizontale)
    or (at_element.ClassType=wformes2.tforme_symetrie_verticale)
    or (at_element.ClassType=wformes2.tforme_Interpolation) then
      begin
      for i:=0 to pred(wformes2.tforme_groupe(at_element).groupe.count) do
        begin
        un_at_element:=wformes.tforme(wformes2.tforme_groupe(at_element).groupe.at(i));
        if un_at_element<>nil then
          agrandissement_central(un_at_element);
        end;
      at_element.calcul;
      end;
    end; {agrandissement_central}
    
</pre>

A voir également

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.