begin process at 2010 02 10 09:31:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaire

 > FORM AUX BORDS IRREGULIERS EN FONCTION D'UNE IMAGE,(DECOUPAGE, TRANSPARENCE, REGIONS)

FORM AUX BORDS IRREGULIERS EN FONCTION D'UNE IMAGE,(DECOUPAGE, TRANSPARENCE, REGIONS)


 Information sur la source

Note :
9,1 / 10 - par 10 personnes
9,10 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaire Niveau :Initié Date de création :06/09/2001 Date de mise à jour :23/03/2002 23:46:47 Vu / téléchargé :8 768 / 1 101

Auteur : fabiin

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette procedure vous permettera de 'découper' une form en fonction d'une bitmap

Paramètres :
- obj : la form sur laquelle appliquer le découpage
- img : image de fond , ki sert pour le découpage
- couleur : couleur de la transparence(tous les pixels de cette couleur seront transparents)

Pour une utilisation simple :
Placer un TImage sur votre form
Ouvrez l'image ke vous voulez dans le TImage
Mettez la propriété AutoSize de la form et du Timage a true
Dans FormCreate : appeller la fonction : Former(Form1,Image1.Picture.Bitmap,clfuchsia); par exemple
voila, votre form est découer en fonction de l'image du TImage :)

Attention : Votre image devra comporter un pixel de plus de chaque coté !!! ;)

Source

  • 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;

 Conclusion

Voir le zip pour un exemple simple et concret :)

ce code n'est pas de moi

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CAPTUER LE SON SORTANT ET L'ENREGISTRER DANS UN FICHIER WAV
CALCUL D'UNE MOYENNE
CHANGER LA DURÉE D'AFFICHAGE DES BULLES D'AIDES (HINT)
Source avec Zip Source avec une capture ASCII-T : PETIT SOFT D'ASCII ART.
CHANGER CONTRASTE / LUMINOSITÉ (L'ALGORITHME)

 Sources de la même categorie

Source avec Zip Source avec une capture WEBDEZIGN FORMULAIRE par craftsystem
Source avec Zip Source avec une capture GESTION DE CALENDRIER DYNAMIQUE par docfullspeed
Source avec Zip APPARITION PROGRESSIVE D'UNE FENÊTRE par wolf691300
Source avec une capture UN CADRE CONTENANT UN NAVIGATEUR TYPE MAGNÉTOSCOPE par speletux
Source avec Zip LOGICIEL POUR GÉNÉRER UNE CLASSE DELPHI par hudsonhawk3

Commentaires et avis

Commentaire de Youyou0214 le 04/05/2002 21:52:47

Il est génial ce truc! c'est exactement se que je cherchais!

Commentaire de Incanus le 29/06/2003 11:19:05

Je ne comprend pas pourqoi tu utilise un code si long alors que delphi le fait automatiquement.
En effet, l'une des caractéristique d'un FORM permet de rendre une couleur transparente. Par exemple prenons le rouge. Tu met en la caractérisique COLOR de la forme en rouge et tu met la form sans bord. Place maintenant ton image et met la caractéristique de l'image TRANSPARENCE rt la tu obtient la même chose sans ligne de code.
J'espére que j'ai été clair.

Commentaire de fabiin le 05/10/2003 21:35:59

C'est exacte, je ne savais pas !
Merci

Commentaire de Thunder_nico le 26/07/2004 15:59:20

sous 98 delphi ne gere pas la transparence en plus en modifiant un peu cette source on peut facilment réalisé une interface skinnable avec plein d'image , seul ptit truc il faut modifier les point de depart et d'arrivé d'une image car g jamais vu une image commencer a 1 personnellement ;)! en prog ca commence toujours a 0

Commentaire de Snesman le 17/01/2005 22:40:51

Sous Xp, ça compile que dalle de ce qui est dans le zip. Sinon je cherchais à faire depuis longtemps, merci.

Commentaire de Bacterius le 14/03/2008 18:04:54

Bonjour,
Incanus peut-tu me dire comment on rend une fiche transparente à une couleur (j'utilise Delphi 3, je crois que les fiches ne peuvent pas encore faire ca), et si elles peuvent, pourrais-tu me dire si c'est une propriété ? :x

Cordialement, Bacterius ....

Commentaire de craftsystem le 29/04/2008 18:03:20 10/10

J'aime les codes comme çà!!!!

10 pour ce code

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales