Agrandissement proportionnelle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 222 fois - Téléchargée 6 fois

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

Ajouter un commentaire

Commentaires

jordane45
Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
313 -
Merci de corriger ton code en y ajoutant la coloration syntaxique (les balises de code).
Depuis le temps que tu es sur ce site... tu devrais le savoir... !!!
denisbertin
Messages postés
194
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
16 juillet 2019
1 > jordane45
Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
-
Je me demande comment ajouter la coloration syntaxique ? quelle sont les balises nécessaire dont vous parlez ?
Whismeril
Messages postés
13508
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juillet 2019
288 > denisbertin
Messages postés
194
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
16 juillet 2019
-
Cirec
Messages postés
4233
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 juillet 2019
32 -
avant même de penser à la coloration syntaxique ou à la description ...
il faudrait penser à produire un code utilisable par toute la communauté !!!

ton code a été supprimé 2 fois déjà et il subira à chaque fois le même sort. Tant que tu produiras un code qui ne compile qu'avec des unités et libs privées que tu ne fournis pas !!!
tu aurais très bien pu poster comme ceci:
begin
  agrandissement_central(atelement1);
end;
ça fait exactement le même effet ... c'est inutilisable en l'état.
ça aussi tu le sais depuis le temps

si aucune modification, ce code sera donc supprimé très prochainement
denisbertin
Messages postés
194
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
16 juillet 2019
1 -
Bien vous avez raison effectivement si l'on ne disposé pas de ces bibliothèques applicative, ce code ne se compileras pas. Néanmoins l'exemple ne paraissait suffisamment compliqué pour le publier.

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.