IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[TWinControl] Methode PaintTo(DC : HDC)


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut [TWinControl] Methode PaintTo(DC : HDC)
    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

  2. #2
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    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;

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Par défaut
    salut Corish,

    Il faut que tu passes par un Bitmap, je pense...

    A plus

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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

  6. #6
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    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

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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

  8. #8
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    Tu as un bout de code ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  9. #9
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    heuuuu nan pas exactement...

    Mais c'est du genre :
    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);
    Enfin justement c'est justement la mise en place du code qui plante

  10. #10
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    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

  11. #11
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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 ....

  12. #12
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    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

  13. #13
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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.

  14. #14
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    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

  15. #15
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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.

  16. #16
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    Idée intéressante. Le PaintTo me semble très bien adapté.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  17. #17
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    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 ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception EINVALIDOPERATION dans le modure Dll.dll dans 00049E44
    [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)
    PAr contre je ne fois rien dans le panel de l'exe qui est sense recevoir le paintto)

    Je deviens fou

  18. #18
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    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

  19. #19
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Par défaut
    Salut Clorish,

    Je pensez à cela hier en parlant d'utiliser un TBitmap (bien sûr ce n'est qu'une suggestion) :

    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);
    Voilà regarde si ça peut t'intéresser...

  20. #20
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    MDSoftware : Nan.
    Voici le code :

    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;
    Lapec : Bha on peut toujours essayer
    [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 )

Discussions similaires

  1. [JUnit] Pour tester les methodes d'acces à une sgdb
    Par yanis97 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 15/04/2004, 16h55
  2. [debutant] [servlets] methode init()
    Par be_on_edge dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/03/2004, 16h11
  3. [METHODE] -> Détection de virus ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/02/2004, 18h04
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 18h03
  5. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo