bonjour tout le monde
est ce qu'on peut écrire sur une image?
et est il possible de mettre une image comme un fond pour un EDIT
merci
bonjour tout le monde
est ce qu'on peut écrire sur une image?
et est il possible de mettre une image comme un fond pour un EDIT
merci
Tu peux écrire avec ça :
NomdeL'image.Canvas.TextOut(x,y,text)
text est du type string
x et y sont du type integer
Pour mettre une image en fond d'un edit je pense que ça doit etre possible en le faisant hériter d'une propriété image mais je sais pas comment![]()
il faut associer un canvas à l'edit qui n'en possède pas...
dc:THandle
dc avec getwindowDC(edit1.handle) pour obtenir le contexte graphique de l'édit.
canvas:=Tcanvas.create;
canvas.handle:=dc; lier le canvas au contexte graphique
puis un canvas.draw(0,0,monimagebmp)
canvas.free et releaseDC(dc,0)
ça devrait marcher...
Je teste^^
erreur sur ça :/canvas:=Tcanvas.create;
ça marche !!!!!!!!!!!!!!!!!
Merci
quand je clique sur le bouton, l'edit se remplit de l'image chargée dans "image".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure TForm1.Button1Click(Sender: TObject); begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TBitmap.create; image.LoadFromFile('fond.png'); Canvas.handle:=dc; canvas.draw(0,0,image); canvas.free; releaseDC(dc,0); end;
Mais à la fin du programme ça me dit :
ce message à été copié grace à une astuce vue dans le topic astuces de delphi^^---------------------------
Erreur d'application
---------------------------
Exception EAccessViolation dans le module Project1.exe à 00000000.
Violation d'accès à l'adresse 00000000. Lecture de l'adresse 00000000.
EDIT :
Le message d'erreur n'apparait pas si je ne libere pas le canvas.
je ne sais pas ça ne marche pas avec moi la compilation se bloque au niveau de
Canvas.handle:=dc;
Fais un test :
1) cree un nouveau projet vide (juste une form)
2) met un edit
3) met un bouton
4) dans le click du bouton tu met le code :
En t'assurant du bon chemin de l'image indiquée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm1.Button1Click(Sender: TObject); begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TBitmap.create; image.LoadFromFile('fond.png'); Canvas.handle:=dc; Canvas.draw(0,0,image); //canvas.free; releaseDC(dc,0); end;
ça marche chez moi^^
Bonjour à toutes et à tous,
@ Dragonno et pour Sky88, ton code ne peux fonctionner tel quel, en effet tu crées un bitmap que tu ne libères pas et de plus tu appelles dans ce bitmap une image au format Png !
De plus, tu n'indiques pas tes variables.
Enfin ceci serait plus correct sans message d'erreur.
Puis ajout dans le Uses:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 { -- use PNG format -- remove/insert double-slash} {$DEFINE SAVEPNG} {$IFDEF SAVEPNG} { -- use PNG with PNGImage -- remove/insert double-slash} {$DEFINE PNGLIB1} { -- use PNG with zPNG -- remove/insert double-slash} {$DEFINE PNGLIB2} {$ENDIF} {$IFDEF SAVEPNG} {$IFDEF PNGLIB1} {$MESSAGE 'La prise en charge du format PNG est activée avec PNGImage.'} {$ELSE} {$IFDEF PNGLIB2} {$MESSAGE 'La prise en charge du format PNG est activée avec zPNG.'} {$ELSE} {$MESSAGE warn 'La prise en charge du format PNG est activée avec une librairie inconnue.'} {$ENDIF} {$ENDIF} {$ELSE} {$MESSAGE warn 'La prise en charge du format PNG est Désactivée.'} {$ENDIF} unit Unit1; interface
puis ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Uses Jpeg{$IFDEF PNGLIB1},PNGImage{$ELSE}{$IFDEF PNGLIB2},zPNG{$ENDIF}{$ENDIF}
Et cela fonctionne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TForm1.Button1Click(Sender: TObject); var dc:THandle; image : TPNGObject ; begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TPNGObject.Create; image.LoadFromFile('fond.png'); Canvas.handle:=dc; Canvas.draw(0,0,image); //canvas.free; releaseDC(dc,0); image.Free; end;
@+,
Cincap
Chez moi ça marche très bien et sans erreurs
Moi j'ai chargé un png mais lui il est pas obligé
Ha t'a raison il y avait juste la variable dc qui était indiquée :/
Sinon moi dans mon essai qui marche j'ai fait ça :il faut associer un canvas à l'edit qui n'en possède pas...
dc:THandle
Mais pas dans mon dernier exemple puisque je ne montre que la procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3image:TBitmap; dc:THandle;
![]()
@ Dragonno, désolé mais tu induis tout le monde en erreur ou il manque une précision en effet tu indiques :
Un format PNG n'est pas un Bitmap.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 procedure TForm1.Button1Click(Sender: TObject); Var image:TBitmap; // Suite à mes remarques dc:THandle;// Suite à mes remarques begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TBitmap.create; // Impossible avec cela de charger un Png comme tu l'indiques image.LoadFromFile('fond.png'); Canvas.handle:=dc; Canvas.draw(0,0,image); //canvas.free; releaseDC(dc,0); end;
Donc ton code est erroné sauf si tu indiques à tous que :
Si tu veux charger le format PNG il faut ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 var dc:THandle; image : Tbitmap ; begin dc:=getwindowDC(edit1.handle); image := TBitmap.create; image.LoadFromFile('fond.bmp'); // et non fond.png dans ce contexte Canvas.handle:=dc; Canvas.draw(0,0,image); releaseDC(dc,0); image.Free;
J'espère que tu as compris.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TForm1.Button1Click(Sender: TObject); var dc:THandle; image : TPNGObject ; begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TPNGObject.Create; image.LoadFromFile('fond.png'); Canvas.handle:=dc; Canvas.draw(0,0,image); //canvas.free; releaseDC(dc,0); image.Free; end;
@+,
Cincap
OUi j'ai compris bien sûr
Je me répète
Sinon moi j'ai la librairie graphicx mais lui est pas obligé de mettre un pngMoi j'ai chargé un png mais lui il est pas obligé![]()
@ Dragonno, je sais que tu as chargé un png mais même avec ta librairie, tu auras un bug si tu fais comme tu l'as dit à sky88.
Png est un objet, tu ne saurais pas le charger dans un Tbitmap.create.
@+,
Cincap
Mais pourquoi ça marche sans erreur chez moi alors ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 unit test; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, GraphicEx; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1:TForm; image:TBitmap; dc:THandle; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TBitmap.create; image.LoadFromFile('fond.png'); Canvas.handle:=dc; Canvas.draw(0,0,image); //canvas.free; releaseDC(dc,0); end; end.
@ Dragonno, désolé je viens de faire une fiche en copiant exactement ton code et en utilisant la librairie GraphicEx (en enlevant la mienne) et j'ai un bug au chargement 'Image bitmap incorrecte" ce qui démontre ce que je te dit.
De plus dans ton code tu crées la variable Image et tu ne la libère pas.
Je suis certain de ce que j'avance concernant le png.
Tu as certainement modifié quelque chose sur ta fiche ou tu charges un bitmap dont l'extension est png (à vérifier faux png).
@+,
Cincap
Désolé si ça marche pas chez toi :/
j'ai testé le listing que j'ai affiché avant de l'afficher et ça marche donc je ne peux rien dire de plus, je ne comprend pas si ça ne marche pas chez toi :/
d'un autre coté je ne dis pas que si ça marche chez moi ça doit marcher chez tout le monde, mais le fait est que j'ai affiché le listing et il fonctionne.
Par contre c'est vrai que je libere pas le bitmap à la fin.
@ Dragonno, j'ai pris une texture en bmp, soit fond2.bmp, je l'ai renommé fond2.png et ton code fonctionne.
Mais pas avec un vrai PNG !!!!!!!!!!!!!!!!!!!!.
Voici la réponse, tu ne sais pas chargé un object (png) dans un bitmap comme tu l'indiques sauf si c'est un faux.
@+,
Cincap
@ Dragonno, c'est pour avancer et non t'ennuyer, le code que tu as proposé ne fonctionnera pas chez les autres sauf si une indication m'échappe.
Mais retiens ceci le vrai format png est un objet et ne peut être chargé comme tu l'indiques dans un Tbitmap.
@+,
Cincap
Je sais bien que c'est pas pour m'ennuyer
Mais ce que je dis c'est juste que le code affiché fonctionne bien chez moi et qu'il est tel quel sur ma fiche, sauf que le bitmap n'est pas libéré à la fin, mais bon, j'ai testé cette fois avec la libération de 'image' et ça marche pareil.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TForm1.Button1Click(Sender: TObject); begin dc:=getwindowDC(edit1.handle); // lier le canvas au contexte graphique image:=TBitmap.create; image.LoadFromFile('fond.png'); Canvas.handle:=dc; Canvas.draw(0,0,image); image.free; releaseDC(dc,0); end; Est-ce que la différence entre toi et moi vient de ma version de Delphi ? (Delphi 5 standard)
@ Dragonno, vérifie ton fichier "Fond.png", je doute que c'est un vrai format png.
Essaye en cherchant sur le net une image png et fais le test.
Avec ce vrai format tu auras un bug avec ton code.
Maintenant si cela va pour toi, tant mieux.
Cela n'a rien à voir avec la version de Delphi mais bien des formats graphics.
@+,
Cincap
Je teste^^
J'ai ouvert le fichier "fond.png" dans un logiciel d'image et il le reconnait comme un bmp avec mauvaise extension.
Je l'ai re-enregistré au format png pour tester et le code ne fonctionne pas !
(Mais remarque bien que je n'ai jamais dis que tu avais tord, je disais juste que ça marchait chez moi hein)
Et souviens-toi que je disais qu'il n'etait pas obligé de mettre un png mais plutot un bmp^^
![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager