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

Delphi Discussion :

gestion des contours des png [Archives]


Sujet :

Delphi

  1. #81
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Je vois que la Saga continue ! J'ai testé de long en large. Effectivement les contrôles scintillent mais on déplace pas non plus une form toutes les 30 secondes

    Par contre j'ai viré le contenu du FormCreate pour le mettre dans une procédure indépendante que FormCreate appelle... Hé oui, comme ça je peux changer les PNG à l'exécution ! Tadadaa !

    ça donne un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NouveauPNG:='autre.png';
    NouveauFOND:='autrefond.png';
    PNGForm.Destroy;
    BmpForm := Nil;
    ProcedureIndependante;
    ...et je remplace par un moyen quelconque les "form.png" et "6c.png" (...6c : t'es en deuil de soutien à Cissé ? ) par ce que j'ai défini ci-dessus.

    Mais si on en fait un composant, y aura-t-il moyen de l'appeler à l'exécution pour changer les PNG ?

    Citation Envoyé par Sub0
    Je trouve que tu aurais pu laisser l'en-tête de la source, respect de l'auteur, merci
    Oui, c'est pas cool puisqu'un composant est destiné à être distribué et donc c'est une reconnaissance pour le travail fourni. D'ailleurs, les neuronnes que je me suis grillé pour glaner des pistes et émuler les neuronnes de Sub0 et le fait que je poste un sujet pertinent qui va servir à des milliards de gens... Moi aussi à la limite j'aimerai bien avoir un peu de reconnaissance

    Bah j'm'en fous du moment que j'ai mon jouet (ce code) . J'ai déjà mon frère (qui développe aussi ) à qui ça va servir (c'est pas la première fois que je lui trouve des soluces pour ses softs ! Hé oui, il sous-traite, sauf que lui il est infographiste et qu'il apporte le côté "boôÔ" à la chose )

    A ce propos, Sub0, c'est quoi ton prénom (en message privé si tu préfères) ? Mon frérot veut mettre un mot de remerciement dans son soft (genre "Toute ma gratitude à mon gentil frérot intelligent et aussi à XXX et la communauté delphiste pour leur travail") XXX c'est toi, mais il tient à mettre des prénoms.

  2. #82
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Oh on se calme. C'est quoi ce délire ?
    Je travaille sur un compo, je transmet l'ébauche et on me fusille pour avoir supposément viré l'entête?

    C'était un travail très préliminaire pas du tout destiné à la distribution. J'avais pas mis mon nom dans le fichier non plus. Et je m'en fous complètement.

    Ceci étant dit on attend toujours ta dernière modif qui ne necessite pas de dessinner les constrôles sub0

  3. #83
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Mon petit ajout du jour dans notre compo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    procedure tpngform.ChangeForm(PNGFilename:string);
    begin
     if fileexists(PNGFilename)=false then exit;
       fpngpicture.LoadFromFile(PNGFilename);
       theform.Free;
       initialize(owner);
    end;
    Faudrait sans doute ajouter un evenement afin que l'utilisateur puisse changer la position de certains controles lors du changement de la form.

  4. #84
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Bon j'ai aussi viré la procedure show que je ne trouvais pas élégante et l'ai remplacée par une propriété "Active". On peut donc mettre le composant sur une forme, charger un png dans la propriété PNGPicture, mettre activate à True et lancer le programme. Plus besoin de ligne de 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Private
    Factive:boolean;
    procedure SetActive(Value: Boolean);
     
    protected
       procedure  Loaded; override;
     
    Published
     
    property Active:boolean read Factive write SetActive;
     
    procedure tpngform.setactive(Value:boolean);
    begin
    if Value <> Factive then
       begin
        Factive:=Value;
        if (csdesigning in componentstate)
        or (csLoading in componentstate)  then exit;
        if Factive then initialize(owner)
          else
            begin
            theform.Free;
            tform(owner).TransparentColor:=false;
            tform(owner).Color:=clbtnface;
            tform(owner).borderstyle:=bssizeable;
            end;
       end;
    end;
     
    { Faudrait sauvegarder les propriétés 
    de la form maitresse avant les modifs 
    afin de récupérer la forme originale 
    si on désactive la form png}
     
    procedure tpngform.loaded;
    begin
    inherited loaded;
    if not(csdesigning in componentstate) and (Factive) then initialize(owner);
    end;

  5. #85
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je vais étudier vos modifs pour essayer de les adapter à mon code actuel... Ça va me demander un peu de temps alors soyez patient. En tous les cas, le fait de passer l'image PNG au 1er plan avec l'emplacement des controls transparent et afficher la form des controls juste derrière supprime le scintillement lorsqu'on clique dessus pour le déplacement puisqu'on a pas à réafficher les controls. Par contre, on perd toujours le focus puisqu'on clique sur une form différente pour le déplacement... Dans ce projet, ce que je recherche avant tout, c'est d'obtenir un affichage aussi rapide que possible, qui utilise le moins de ressources possibles pour les différentes actions dites "standarts". Ensuite, je pense que nous aurons aucun problème à ajouter de superbes fonctions.
    à+

    ps: Mon prénom, Laurent
    De retour parmis vous après 10 ans!!

  6. #86
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Moi j'avais déjà plus le scintillement.
    Mais bon ta nouvelle méthode est j'imagine plus performante alors j'ai bien hâte de voir ça.

  7. #87
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Oh, en passant quel est le problème majeur de la perte de focus exactement ?
    Ça me semble très mineur si ça ne paraît pas visuellement

    Je vais donc attendre tes modifs avant d'ajouter d'autres fonctions car ta dernière idée me semble sans aucun doute plus intéressante côté performance.

  8. #88
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Le scintillement n'est pas très visible mais se produit lorsqu'on clique sur la form pour la déplacer, car comme on clique sur image png, elle prend le focus et passe alors immédiatement au 1er plan. Elle cache ainsi la form des controls qui se retrouve derrière elle. Tout de suite, on repasse les controls au 1er plan pour pouvoir faire leur capture et fusionner cette dernière à l'image png d'arrière-plan. Et puis enfin, on cache la form des controls et on peut alors déplacer la form. En fait, on déplace seulement une image... Pour mieux voir ce problème, il suffit d'ajouter un délai avec sleep au tout début de la procédure FormMouseDown...
    De retour parmis vous après 10 ans!!

  9. #89
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Salut, je vois. Cependant je crois que le problème ne se posait pas en interceptant le message hittest comme je le faisais. En tout cas je ne note pas de scintillement mais ce sont ptetre mes yeux qui me jouent des tours.

    Quoiqu'il en soit, tu peux me donner des indices sur ta nouvelle méthode?
    J'ai essayé ce qui suit mais je ne suis pas certain que cela soit ce que tu fais.
    Dans la procedure FusionForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      For i := 0 To FusBitmap.Width - 1 Do Begin
          If (pa[i * 3 + 2] <> tcol.R) Or
             (pa[i * 3 + 1] <> tcol.G) Or
             (pa[i * 3 + 0] <> tcol.B) Then Begin
            pd[i * 4 + 0] := 0;//pa[i * 3 + 0];
            pd[i * 4 + 1] := 0;//pa[i * 3 + 1];
            pd[i * 4 + 2] := 0;//pa[i * 3 + 2];
            pd[i * 4 + 3] := 0;//$FF;
    Autrement dit je rend transparent tout ce qui ne l'est pas sur la Form1.¸

    Puis au moment du déplacement de la Pngform je fais suivre la form1 en dessous.

    Ça fonctionne mais il y a un petit scintillement désagréable, surtout si on bouge vite. En fait c'est pas vraiment un scintillement mais un effet de transparence sur qques pixels près des controles. C'est bien sur du à un petit délai entre le mouvement des 2 formes.

    C'est surement tout bête comme probleme mais là cela m'échappe.

    Comment gères-tu le mouvement simultané des 2 fenêtres qui sont maintenant visibles lors des déplacements?

    Merci de m'éclairer.
    J'ai ptetre mal compris ce que tu faisais dans ta nouvelle approche

  10. #90
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    C'est bien ça, excepté que je fusionne les 2 forms juste avant le déplacement. Je ne pense pas pouvoir trouver mieux pour le moment... Par contre, cette solution impose de régler 2 ou 3 petits bugs (je bosse justement là dessus).
    De retour parmis vous après 10 ans!!

  11. #91
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Qu'entends-tu par "fusionner les 2 forms" au juste?

    Enfin, tiens-nous au courant. J'ai passé quelques heures à m'amuser sur ce projet et j'ai appris quelques trucs. C'est déjà ça

    Drôle mais à force d'essayer des trucs par ci par là j'en venais à chercher exactement la même chose que toi il y a quelques jours. C'est à dire à désactiver le focus. Pas évident de trouver le bon message à intercepter. Si on pouvait y arriver ça serait sans doute la meilleure solution.

    En fait si on met la form maitresse (celle avec les controles) à fsstayontop on évite la disparition des controles au lancement du déplacement. Par contre à ce moment là les controles apparaissent par dessous toutes les fenêtres de toutes les applications bien évidemment.

    Pas facile tout ça mais bien interessant.

  12. #92
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Fusionner les 2 forms, c'est-à-dire capturer la form des controls et fusionner cette image à celle de l'arrière-plan pour n'obtenir qu'une seule image à déplacer.

    Bon, voilà, il me semble que j'ai enfin trouvé la solution idéale ! En tous les cas, il n'y a plus de scintillements, on ne perd pas le focus, seulement j'ai été obligé de mettre la propriété HideSelection du Memo à False... Si cette méthode vous convient, j'ajouterais les fonctions suplémentaires de chargement PNG et FadeIn/FadeOut et transformation en composant.
    Fichiers attachés Fichiers attachés
    De retour parmis vous après 10 ans!!

  13. #93
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut cool
    Cool, merci à l'avance

    Au fait, c'est bizarre, quand on clique droit sur le memo, après avoir donné le focus au bouton puis avoir déplacé la fenêtre ou superposé une autre fenêtre par-dessus (bon d'accord, faut vraiment le vouloir) il ne se passe rien (pas de menu contextuel). Mais si avant on clique d'abord avec le gauche alors ensuite le droit fonctionne.

    ça doit être lié à ton histoire de focus peut-être.

    Par contre je ne comprend pas : tu as viré les fade et quand je remplace tes images par des PNG ça fonctionne plus comme avant, j'ai loupé un épisode (à part le fade) ?

    Concrètement si je mets par exemple un png à la place de ton image bleue, à l'exécution cela me fait un effet mi-néon, mi-transparent... J'ai comme l'impression que tu as rechuté : Bitmapvore va ! Bin oui, ton fond de départ c'est pas du png on dirait ? Même en utilisant la version png que tu avais mis dans la version 2 ça fait cet effet d'aurore boréale . on peut plus cliquer dessus en plus ça passe à travers . Heu c'est quoi ce beanss... Bon, où est-ce que j'ai loupé le train ?

    ?

    Au passage, cela arrivera peut-être jamais mais si les 2 PNG (homer + fond) ont la même taille j'ai l'impression que ça plante (access violation truc) ou alors c'est parce que j'ai voulu tester de mettre le même png pour les 2 images... sinon si je mets un png plus petit pour l'image 2 et un png plus grand pour l'image 1 (ça ça risque d'arriver) tout disparait même les contrôles, on voit plus rien

  14. #94
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Oué, dans cette démo, ce n'est pas du PNG mais du BMP 32 bits. De toutes façons, cette source n'était destinée qu'à vous montrer la différence entre la version précédente et la nouvelle méthode avec les emplacements transparents des controls. Ce qu'il faut surtout remarquer, c'est la rapidité de déplacement légèrement supérieure et le scintillement disparu lorsqu'on cliquait sur la form pour la déplacer. Bon, j'imagine que c'est bon alors à présent je pars sur cette base pour ajouter tout le reste. J'en profiterai pour ajouter le code pour Win95/98 qui ne supporte pas la fonction UpdateLayeredWindow... Et par la suite, j'en ferai un compo en utilisant le travail de sfpx. A ce stade, je pense qu'on aura finaliser le projet. Pour distribuer le compo, je vous propose de réaliser 2 petites démos, donc pngform et une infobulle à la XP (genre celle qui apparaît de temps en temps dans le systray). Bien entendu, si vous avez d'autres idées de démos, je suis preneur, à+

    [EDIT] Ok, j'ai noté les bugs. Merci pour ces tests, c'est du bon boulot !
    De retour parmis vous après 10 ans!!

  15. #95
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Ah bon ok, OUF ! je croyais que je m'étais trompé de post tellement le résultat ne ressemblait plus à la version 2

    Effectivement ça scintille plus

    Pour les exemples je pense qu'il n'y pas besoin de se triturer pour le systray : ton pngform est très explicite , enfin c'est mon avis. Après il faut laisser un peu la créativité s'exprimer et pas macher tout non plus nan ?

    Au fait, qu'est-ce que tu vas pouvoir faire pour Win9x, la transparence n'existe pas, je me trompe ?

    Tiens, au passage je me suis enfin mis un avatar merci à mon frérot pour ces beaux chamallows !

  16. #96
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Sub0
    Fusionner les 2 forms, c'est-à-dire capturer la form des controls et fusionner cette image à celle de l'arrière-plan pour n'obtenir qu'une seule image à déplacer.

    Bon, voilà, il me semble que j'ai enfin trouvé la solution idéale ! En tous les cas, il n'y a plus de scintillements, on ne perd pas le focus, seulement j'ai été obligé de mettre la propriété HideSelection du Memo à False... Si cette méthode vous convient, j'ajouterais les fonctions suplémentaires de chargement PNG et FadeIn/FadeOut et transformation en composant.
    Ah je croyais qu'on cherchait à éliminer cette capture pour la seconde méthode. Mon composant n'avait déjà pas le scintillement en utilisant cette capture. Je l'ai modifié afin de ne la faire qu'une seule fois (mon composant le faisait trop souvent pour rien).


    J'attache ci-bas un petit test que j'avais fait avec mon compo.
    Je ne vois pas de scintillement lors du premier déplacement.
    Il y a un ptetre un léger lors du changement de skin mais là c'est inévitable.

    Enfin c'est ptetre moi qui ai de mauvais yeux
    Fichiers attachés Fichiers attachés

  17. #97
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Pour Win98, j'utiliserai la tout 1ère méthode que j'avais codé (si tu te souviens...). Je dois avouer que le scintillement n'est pas très visible en effet, surtout avec un bon PC, mais je me répète, si on ajoute un sleep au tout début du FormMouseDown, on voit alors que les controls disparaissent avant d'être redessinés... Et ceci à chaque fois que l'on clique sur la form... Et plus les controls seront nombreux et complexes et plus ils demanderont de la ressource machine, plus cette disparition se verra.

    sfpx, ta démo saccade pas mal au déplacement chez moi, et la form est toute noire lorsqu'on lance le programme. De plus, avec ta méthode, j'imagine que si je veux déplacer un control pendant l'éxécution du programme, ce ne sera plus possible, non ?
    De retour parmis vous après 10 ans!!

  18. #98
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Re-bonjour sptx, perso ton exemple bug chez moi un max : déjà au lancement ça clignote un coup et ensuite ça scintille effectivement. Les boutons sont sympas mais leur affichage est aléatoire (disparaissent puis réapparaissent, testé sur 3 machines récentes avec XP SP2)

    Ah oui, tiens moi aussi en déplaçant la form devient noire !! T'as trop assaisonné le code de Sub0 peut-être ?

  19. #99
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    hehe Bizarre car tout est nickel chez -moi

    J'avoue que je ne comprend pas l'histoire de la fenêtre noire au déplacement
    Je vais regarder ça.

  20. #100
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Au fait Sub0, tu sais l'essai de composant que je t'ai envoyé par mail, tu n'as qu'à le modifier comme tu m'as dis, il marche impeccable d'après tous les tests passés !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GRAPH] [GCHART] Couleur des contours des barres d'histogramme
    Par mohamed_ dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 02/09/2011, 10h18
  2. Réponses: 3
    Dernier message: 30/06/2009, 19h16
  3. Réponses: 2
    Dernier message: 23/01/2008, 23h56
  4. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

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