Texturer une fenetre ou y placer une image ? [Résolu]

vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 1 déc. 2009 à 16:50 - Dernière réponse : Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention
- 17 déc. 2009 à 10:55
Bonjour,

Je souhaiterais savoir comment je peux changer la couleur de fond de ma form par une texture (ou un dégradé de couleur), voire si c'est possible une image de fond.

J'avez pensez à un composant TImage mais à la compilation les images qui sont placées dedans s'en trouvent altérés (perte de qualité), je pense que le composant gére un nombre limité de couleurs.

Merci de me donner votre avis.

Cordialement,
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Cirec 4225 Messages postés vendredi 23 juillet 2004Date d'inscription 24 juin 2018 Dernière intervention - 2 déc. 2009 à 11:36
3
Merci
Salut,

pour placer une texture sur le fond d'une fiche ... rien de plus simple:

[hr][b]var

  /baBMP: TBitmap;
procedure TForm1.FormCreate(Sender: TObject);
[b]begin
  /baBMP := TBitmap.Create;
  aBMP.LoadFromFile('images\misc026.bmp');
  Canvas.Brush.Handle := CreatePatternBrush(aBMP.Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
[b]begin
  /baBmp.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
[b]begin
  /bCanvas.FillRect(ClientRect);
end;
[hr]
et c'est tout

pour un dégradé voir cette source


[hr]@+Cirec
[hr]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Cirec 4225 Messages postés vendredi 23 juillet 2004Date d'inscription 24 juin 2018 Dernière intervention - 7 déc. 2009 à 14:30
3
Merci
avec quelle version de Delphi tu compiles le code ?

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.FillRect(ClientRect);
end;

initialization

finalization
  if Assigned(aBmp) then
    aBmp.Free;
end.


pour le reste .. oui tout est possible mais la méthode présentée ici n'est pas adaptée à un stretch ... l'effet produit ici est équivalent à l'option "Mosaïque" du papier peint du bureau et elle s'adapte toute seule à la taille de la fenêtre ... il n'est pas utile de gérer un "Resize" ... c'est fait automatiquement.

C'est vraiment fait pour utiliser avec des textures.

Pour Stretcher (par ex.) il faut créer un Bitmap intermédiaire de la taille souhaité (taille de la fiche: "ClientRect") faire une copie avec StretchBlt (en HALFTONE) et dans le onPaint un BitBlt sur le canvas de la fiche ... le truc classique quoi

mais encore une fois ... pour texturer c'est le code que j'ai donné plus haut !!
Essayes le avec un bitmap de petite taille (genre 80 * 50) et si possible une texture, pour bien te rendre compte du résultat


[hr]@+Cirec
[hr]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 7 déc. 2009 à 14:31
3
Merci
Met un "initialization" juste avant.

Cordialement, Bacterius !

Merci Bacterius 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de Bacterius
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 1 déc. 2009 à 17:35
0
Merci
As-tu cherché le mot "skin" sur delphifr ?
Commenter la réponse de JulioDelphi
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 2 déc. 2009 à 00:04
0
Merci
Si t'as Vista ou seven (tourne beaucoup mieux sur seven il paraît) tu peux placer un bel effet de verre en fond de ton application. Si l'utilisateur ne choisit pas une couleur trop agressive (genre rouge intensité maximale) ça peut faire joli. Et avec l'unité de support que je prépare ça sera du gateau de poser des composants dessus

Cordialement, Bacterius !
Commenter la réponse de Bacterius
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 7 déc. 2009 à 10:35
0
Merci
Bonjour et merci à tous.

Un remerciement tous particulier à Cirec pour son code, qui avec son code constitue pour moi une réponse simple et adapté.

J'ai par contre deux questions sur le code de Cirec :
- Quand je ferme mon appli en ayant mis son code ci-dessus, l'appli me renvoie une erreur : "débordement de pile" quelqu'un as-t'il une idée ?

- Peut-t'on améliorer ce code pour pouvoir avoir des options de streetching (étirer l'image selon la taille de la form) ?

Merci à tous en cas.
Commenter la réponse de vieuxpere
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 7 déc. 2009 à 12:17
0
Merci
Pour le débordement de pile j'ai enlevé le "aBmp.Free" dans le ondestroy et ça ne le fait plus.
Commenter la réponse de vieuxpere
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 7 déc. 2009 à 12:24
0
Merci
Il faut le mettre ! Sinon fuite de mémoire.
Mets-le plutôt dans un finalization à la fin de ton code :

finalization
aBmp.Free;

Cordialement, Bacterius !
Commenter la réponse de Bacterius
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 7 déc. 2009 à 13:02
0
Merci
Merci bacterius mais à a fin de mon code c'est où "end." ??
Commenter la réponse de vieuxpere
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 7 déc. 2009 à 13:06
0
Merci
Juste avant le "end." final.

Cordialement, Bacterius !
Commenter la réponse de Bacterius
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 7 déc. 2009 à 14:22
0
Merci
Merci quand je le met juste avant le end. il me marque [DCC Erreur] Unit1.pas(52): E2029 Déclaration attendu(e) mais 'FINALIZATION' trouvé(e).

Voici mon code complet :
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


var
aBMP: TBitmap;

procedure TForm1.FormCreate(Sender: TObject);

Var aBMP: TBitmap;
begin
aBMP := TBitmap.Create;
aBMP.LoadFromFile('1.bmp');
Canvas.Brush.Handle := CreatePatternBrush(aBMP.Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
Var aBMP: TBitmap;
begin
//aBmp.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.FillRect(ClientRect);
end;

finalization
aBmp.Free;

end.
Commenter la réponse de vieuxpere
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 7 déc. 2009 à 14:57
0
Merci
Merci Beaucoup Cirec et Bacteris,

Pour le pb de compilation en effet, il fallait mettre d'abord en effet initialization.

Pour la fonction mosaique, j'ai bien compris.

Merci encore.
Commenter la réponse de vieuxpere
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 17 déc. 2009 à 10:55
0
Merci
" Canvas.Brush.Handle := CreatePatternBrush(aBMP.Handle); "

Waw , c'est tout simplement génial ce code ... moi qui me faisais toujours chi** à le réaliser "manuellement"

Merci

Nico
Commenter la réponse de Nicolas___

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.