Est ce que quelqu'un peut me montrer un exemple d'utilisation de cette fonction ?
Il semblerais qu'elle m'interesse bcp mais je n'arrive pas a la mettre en place
![]()
Est ce que quelqu'un peut me montrer un exemple d'utilisation de cette fonction ?
Il semblerais qu'elle m'interesse bcp mais je n'arrive pas a la mettre en place
![]()
Un exemple simple avec un TButton et un TPaintBox :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.PaintBox1Paint(Sender: TObject); var dc: HDC; begin dc:= PaintBox1.Canvas.Handle; Button1.PaintTo(dc, 0, 0); end;
C'est pourtant bien ce que je cherche a faire .. mais il me dit que le parent n'est pas defini.
Faut il qu'il ait un parent ? Je voyais cette fonction comme la possibilite d'afficher un composant depuis une Dll dans une fiche de l'exe par exemple.
salut Corish,
Il faut que tu passes par un Bitmap, je pense...
A plus
Un paint to dans le Handle d'un TBitmap ? (qu'apres j'affciche dans autre chose bien sur ...
Peut etre pas idiot en fait ... je vais essayer.
Par contre, je pensais "transformer" le handle en HDC via l'api windows GetDC(AHandle). Mais vuq ue j'y connait pas grand chose dans le domaine des handle (et leurs diff) ni des apis windows .. je ne suis pas sur que ca soit forcement utile![]()
Le handle d'un Canvas est un HDC (Handle Device Context). La fonction GetDC(AHandle) te permet de récupérer le HDC de n'importe quel objet graphique. Passe le handle d'un bouton, tu obtiendras le HDC du bouton.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Oki c'est noté.
PAr contre rien ne marche :/
Je n'arrive toujours pas a utiliser la methode PaintTo :/
Il me demande un parent et une fois le parent specifié, je n'ai aucun effet sauf un affichage dans le parent :/ (pas celui du paint to forcement sinon ca sert a rien .....)
Bref je ne vois pas comment le mettre en place![]()
Tu as un bout de code ?
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
heuuuu nan pas exactement...
Mais c'est du genre :
Enfin justement c'est justement la mise en place du code qui plante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Var L : TStaticText; L := TStaticText.Create; L.PaintTo(GetDC(Panel1.Handle), 10, 20);![]()
Ceci fonctionne chez moi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var leTexte : TStaticText; begin leTexte := TStaticText.Create(Self); letexte.Parent := Self; leTexte.Caption := 'Coucou'; leTexte.PaintTo(GetDC(Panel1.Handle), 10, 20); leTexte.Hide; end;
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Ok ca marche .... mais cela ne m'arrange pas tellement dans le sens ou il faut un parent :/
Quel est l'interet de cette methode si on peut mettre le Parent a panel 1 ?
Je pensais que ca permettait de cour circuitais la gestion de l'affichage via le parent et donc de pouvoir passer au dela des limes de la Dll ....
La différence, c'est qu'en utilisant PaintTo, tu ne fais que dessiner le composant. Le composant n'est pas "physiquement" sur le panel.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Oki ..... donc on peut dessiner sur le canvas apres avoir fait un paintto ce qui entraine le fait de povoir dessiner "sur" le composant en question ?
Et dasn ce cas .. est il plus propre de creer une Dll avec un panel qui est le parent des composants et que l'on dessine avec des paintto sur une form de l'exe ? ou bien de faire un "setparent" du panel sur la form de l'exe ?
Car apres tout mon but est de bouvoir creer, manipuler des composant dans une Dll en utilisant les proprietees "Align/Anchors" de delphi mais d'effectuer son affichage dans l'exe.
Avec les SetPArent de Windows et/ou les parentWindows on pert les fonctionnalités align/Anchors.
Je comprend pas très bien ce que tu veux faire.
Tu veux qu'une dll dessine des composants sur un exe, c'est ça ?
Quand tu parles de dessiner, c'est au sens propre [comme si c'était une image] ou vraiment créer un composant.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Actuelement peut importe.... Disons que ce que je souhaite developper c'est une sorte de "player" genre PowerPoint.
J'ai donc une fenetre dans l'application qui s'occuper d'affichier des labels, des images de la 3D, des boutons, etc ...
Le contenu est defini par une sorte de fichier script definissant le nombre, le types la position et le contenu de ces composants, ainsi que quelques actions a faire en cas de clic, survol, etc ...
Je souhaitais developper mon application de maniere generique et evolutien en centralisant la fenetre et la plupart des fonctionnalites dans l'exe, generer uen dll de script et une 2e Dll regrouppant les "APIS" d'affichage et donc les composants. Comme ca la creation des composants et leur affichage se fait independement de l'exe. Je peut mettre a jour la Dll des APIs pour inclure un nouveau composant, qui sera donc manipulé par les scrips futur sans avoir a recopiler et redistribuer l'exe d'affichage.
J'ai laisse tombe un moment cette version en generant l'affichage dans une form interne a la dll, affichee via un setparent de Windows dans la form principale.
Mais le paoint to m'a redonné un peu d'espoir.
Deplus le passage a un nouveau moteur 3D qui laisse tomber la gestion sous forme de composant activeX mais par la gestion sous forme de Dll avec une intee d'interface a inclure dans les programes mais surtout le fait que la zone d'affichage et definie en transmettant un "Handle" de fenetre represente exacement ce que je souhaite faire :
Transmettre un handle et afficher mes composants dedans.
Qu'ils soit sous forme dessin ou reel, l'aspect graphique final est le meme.
Idée intéressante. Le PaintTo me semble très bien adapté.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Mais il marche pas plus dans la Dll :'O
Erreur de violation d'acces dans la Dll ou je ne ais pas quoi .. c'ets le GetDC qui genere l'erreur ...
Peut etre que les espaces memoires ne sont pas bon et qu'il ne le trouve pas .. ce qui m'etonne quand meme foncierement ....
[Edit] nan ca marche mais il faut que le label soit affiché dans une form dans la Dll (un panel semble ne pas marche une fois de plus a cause du parent)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Exception EINVALIDOPERATION dans le modure Dll.dll dans 00049E44
PAr contre je ne fois rien dans le panel de l'exe qui est sense recevoir le paintto)
Je deviens fou![]()
Si tu créés ton label dans la dll [avec pour parent, une fiche de la dll] et que tu tentes de la dessiner sur un panel de l'exé, ça ne marche pas ?
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Salut Clorish,
Je pensez à cela hier en parlant d'utiliser un TBitmap (bien sûr ce n'est qu'une suggestion) :
Voilà regarde si ça peut t'intéresser...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DC := CreateCompatibleDC(GetDC(Handle)); TempBitmap := CreateCompatibleBitmap(GetDC(Handle), Succ(ClientWidth), Succ(ClientHeight)); Bitmap := SelectObject(DC, TempBitmap); PaintTo(DC, 0, 0); ... DeleteDC(DC); ReleaseDC(Handle, GetDC(Handle)); DeleteObject(TempBitmap);
MDSoftware : Nan.
Voici le code :
Lapec : Bha on peut toujours essayer
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 Exe : CreateDll(Self.Panel1.Handle); Dll : Procedure Create(AHandle : THandle); StdCall; Begin Form1 := TForm1.Create(nil); l := TStaticText.Create(form1); l.Parent := form1; l.Caption := 'Coucou'; ShowMessage('ok'); l.PaintTo(GetDC(AHandle), 10, 20); ShowMessage('ok2'); l.Hide; End;
[Edit] Oulala en fait j'ai du mal a foir ou se trouve mon composant source et mon composant dest ... puis j'en fait quoi de mes bitmap
Ca sent les apis windows .. que je ne maitrise pas encore tres bien (et je ne demande pas mieux qu'apprendre)
Partager