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

WinDev Discussion :

Libellé avec angle à 90° pixélisé


Sujet :

WinDev

  1. #1
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut Libellé avec angle à 90° pixélisé
    Bonjour,

    J'aimerais savoir si vous constatiez le même problème de votre coté. Je dois écrire du texte (titre de graphe par exemple) en vertical. Pour cela j'utilise la propriété Angle des champs libellés.
    Cela fait exactement ce que je souhaite mais le texte affiché est tout pixelisé.... ce qui n'est pas le cas dans les autres logiciels existants sous Windows.

    Auriez-vous une astuce pour améliorer la qualité ?


    EDIT : La propriété "Angle" est une propriété de Police (MonLibelle..Police..Angle = 90)
    Google est ton ami !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Auriez-vous une astuce pour améliorer la qualité ?
    Pour améliorer la qualité il faut utiliser directement l'API bas niveau (GDI+ par exemple), ou afficher le texte à l'horizontal sur un fond transparent (image PNG) et dans ce cas on peut faire une rotation sur 360°.

    Il est également possible d'utiliser les vieilles API GDI32 "TextOut" et "SetTextAlign" avec une fonte dont le nom débute par @
    Vous trouverez un exemple qui utilise l'API "ExtTextOut" ici
    http://www.codeproject.com/Articles/...-text-rotation

    Il existe aussi la solution de luxe, qui consite à utiliser une librairie graphique spécialisée pour créer des graphes en 3D comme dans l'exemple posté sur le forum pcsoft hors sujet.
    http://forum.pcsoft.fr/fr-FR/pcsoft....liste/read.awp

  3. #3
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Bonjour Patrice,

    Merci pour cette réponse très précise. J'ai regardé la librairie GDImage mais j'avoue avoir du mal à m'en sortir....
    Cela est cependant très très intéressant. Existe-t-il un guide simplifié ou une doc de prise en main pour commencer doucement et s'imprégner de cette nouvelle façon de programmer ?
    Google est ton ami !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    En fait ce n'est pas une nouvelle façon de programmer, car toute l'API bas niveau de Windows (ce que l'on appel le SDK) fonctionne à l'identique (mode procédural). Il en est de même pour l'API OpenGL sur laquelle s'appuient les fonctions 3D implantées dans GDImage.

    Pour débuter, le mieux c'est de partir des exemples WinDev, qui sont disponibles sur mon site (www.zapsolution.com) ou sur celui de PC-Soft

    Une recherche sur GOOGLE avec "WinDev GDImage WinLIFT" et affichage des images, devrait vous aider à trouver un projet qui vous intéresse.

    Vous trouverez également de nombreux exemples sur le forum de mon ami José Roca
    Pour vous inscrire sur le forum vous devez envoyer un message à José Roca (en lui disant que vous venez de ma part)
    joseroca.daman (at) ono.com
    ou
    JRoca (at) com.it-berater.org
    et en précisant votre nom complet (car les pseudos ne sont pas autorisés)
    Voir sur son site, les sections "GDImage" et "GDImage WinDev".
    Le site est également une mine de renseignements très pointus, pour ceux qui veulent en savoir plus sur la programmation bas niveau.

    De mémoire je crois qu'Emmanuel Lecoester, a également posté sur son blog plusieurs articles sur GDImage avec des liens.

    Enfin voici quelques liens vers les exemples les plus récents postés sur le forum "hors sujet" de PC-Soft :
    Visualisation temps réel dans WinDev
    Image 2D en 3D (projet GDImage)
    Graph 3D avec rendu hyper-réaliste
    VISION TETE HAUTE (HUD window)
    Accordéon d'images (en mode 64-bit)
    BassBox Radio
    "Naavi HUD" projet WD15 pour VISTA/SEVEN.
    Pour la liste complète des exemples faites une recherche dans le forum "Hors Sujet" avec le mot clé "GDImage".

    Si la programmation 3D vous intéresse, faites également un tour sur mon site www.objreader.com
    La majorité des modèles exposés représentent un très grand nombre d'heures de travail, c'est pourquoi il faut s'enregistrer avant de pouvoir les télécharger gratuitement. Il faut également télécharger le reader gratuit ObjReader64 (écrit en C++ 64-bit) pour examiner les modèles dans le détail en temps réel. Pour info, le moteur 3D est celui de GDImage 7.00 basé sur l'utilisation directe du GPU via GLSL.

    ...

  5. #5
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Merci pour tous ces liens que je prendrais le temps de regarder attentivement.

    Je suis surtout intéressé par les possibilités d'effets graphiques possibles avec cette libraire. Windev étant assez limité de ce coté là de base.

    L'idéal serait de pouvoir proposer des animations fluides dans des projets windev "standard" (dans une fenêtre créée avec windev).

    Quelques exemples très intéressants :
    - Les spinners affichés en bas à droite de cet exemple : http://forum.pcsoft.fr/fr-FR/pcsoft....liste/read.awp
    - Le poisson qui bouge et que l'on peux déplacer de manière fluide de l'exemple "Gauge" (GoldFish).

    J'ai télécharger la version d'essai pour voir comment la prendre en main.

    Question précise :
    Pouvez-vous me schématiser rapidement le système a mettre en place (si c'est possible) pour intégrer un "spinner" dans une fenetre windev ?
    Google est ton ami !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Le principe est le suivant

    Avant toute chose on charge la DLL GDImage (dans la section déclarations globales de la fenêtre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IF LoadDLL(GDImage) THEN
    	// On initialise GDImage avec la clé privée
    	API(GDImage, "ZI_LoadDLL", "xxxxxxx")
    ELSE
    	Error("Impossible de démarrer l'application." + CR + CR + "Fichier GDImage.DLL manquant.")
    	EndProgram()
    END
    Ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZI_SpinnerInit(Handle(WIN_Main..Name), Chemin_complet_Du_Spinner_a_utiliser,  0)
    Le code WinDev qui nécessite de faire patienter l'utilisateur
    ...

    Une fois le code WinDev terminé, on ferme le spinner en utilisant

    Concernant le projet GoldFish (datant de 2008), vous pouvez télécharger le code source WinDev ici
    http://forum.pcsoft.fr/fr-FR/pcsoft....dfish/read.awp

  7. #7
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Le lien indiqué vers le projet goldfish est mort...

    Pour ce qui est de la schématisation de l'utilisation de GdImage j'ai testé de remplir les 2 fonctions ZI_SpinnerInit() et ZI_SpinnerClose() mais je n'arrive pas a identifier clairement quel fonction de l'API utilisées...
    J'ai beau essayé de décortiquer le code source du projet Chart3D pour ne prendre que les parties concernant le spinner je n'arrive à rien.

    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
     
    ImageW is int
    ImageH is int
    hBitmap is int = API("WinLIFT64", "skInitEngine", AnsiToUnicode("C:\MonSpinner.ski"), AnsiToUnicode("0"))
     
    IF hBitmap THEN
              API("GDImage64", "ZI_GetBitmapSize", hBitmap, &ImageW, &ImageH)          
     
              // ZD_DrawBitmapToCtrl(hWnd, (128 - ImageH) / 2, (128 - ImageH) / 2, hBitmap, 0xFFFFFFFF, ID_SPIN01, ZS_VISIBLE)
              // ZD_SetObjectFrameCount(ID_SPIN01, ImageW / ImageH)
              // ZD_SetObjectFrameToUse(ID_SPIN01, 1, False)
              // Je bloque sur ces 3 fonctions.  
     
              API("GDImage64", "ZD_DrawBitmapToCtrl", Handle(MonChampImage), (128 - ImageH) / 2, (128 - ImageH) / 2, hBitmap, 0xFFFFFFFF, 1, 1)
              API("GDImage64", "ZD_SetObjectFrameCount", 1, ImageW / ImageH)
              API("GDImage64", "ZD_SetObjectFrameToUse", 1, 1, 0)
     
    END
    Déjà, est-ce les bonnes fonctions à utiliser ? Le fait de ne pas appeler les API par des procédures qui définissent le type des variables passés à l'api pose t-il problème ?
    Google est ton ami !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Le projet GoldFish, est disponible sur mon site ici :
    http://www.zapsolution.com/DW/download/GoldFish12.zip

    Le projet Chart3D, est écrit pour du 64-bit, en conséquence il utilise les versions 64-bit de GDImage et WinLIFT.
    Il combine donc des fonctions des 2 API(s) (GDImage et WinLIFT).

    Dans un premier temps il est préférable de vous limiter a la version 32-bit de GDImage, qui correspond à la version d'évaluation disponible sur mon site.

    Je vais regarder si j'ai un projet WinDev simple, pour vous montrer comment afficher le spinner centré dans une fenêtre.

    ...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut Spinner GDImage
    Voilà j'ai fait rapidement un petit projet WD17, pour vous montrer comment afficher un Spinner GDImage dans une fenêtre WinDev.
    Le code n'est pas compilé, vous devez tester le projet en mode GO.

    Le Spinner est centré automatiquement dans la fenêtre dont vous passez le Handle lors de l'appel de l'API ZI_SpinnerInit.

    WD17_Spinner.zip

    ...

  10. #10
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Merci beaucoup du temps que vous passez à m'aider. Je ne pourrais tester le projet qu'à partir de demain mais j'ai hate de voir ce que cela donne.
    Google est ton ami !

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Une chose que j'ai oublié de vous dire, dans la version 32-bit les chaines de caractères sont en ANSI, alors qu'elles sont en UNICODE en 64-bit.
    D'autre part avec les fonctions GDImage, vous devez utiliser une champ GDImage, à la place du champ image WinDev. Un champ GDImage fonctionne en code natif (pas de p-code) et il est optimisé pour fonctionner avec DWM et le GPU lorsque cela est possible, d'où des vitesses de traitement de 10 à 100 fois plus rapide, ce qui permet de faire du temps réel (affichage de type oscilloscope par exemple).

    Lorsque vous utilisez la fonction API de WinDev, évitez de répéter à chaque fois le nom de la DLL, utilisez de préférence une variable globale qui est affectée une fois pour toute, sinon, le nom sera dupliqué autant de fois dans le fichier WDL qui embarque le p-code.

    ...

  12. #12
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Bonjour Patrice,

    Je viens de tester le projet que vous avez partagé. Cela fonctionne bien de mon coté. J'ai cependant des questions sur le fonctionnement :

    - Le handle passer à l'api par la variable "gh_Parent" est déclarée mais jamais initialisée. Est-ce normal ?
    - Le spinner affiché n'est pas "lié" à la fenêtre. On peut déplacer l'objet en dehors de la fenetre, quand la fenetre est minimisé, le spinner reste affiché. Doit-on gérer tout ces évènements manuellement ?

    Qu'entendez-vous par champ GDImage ? C'est un champ créé par programmation sans passer par le créateur d'ihm de windev ?
    Google est ton ami !

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Vous avez raison, je suis allé un peu vite dans l'écriture de l'exemple, et j'ai oublié d'assigner le Handle.
    gh_Parent = Handle(WIN_Main..Name)
    Lorsque le handle n'est pas précisé (égal à zéro), la fonction utilise comme parent GetDesktopWindow()

    Dans tous les cas le Spinner est centré par rapport au parent, mais la fonction ZI_SpinnerInit, retourne le Handle du Spinner, donc vous pouvez désactiver le déplacement si vous le souhaitez, en utilisant l'API EnableWindow qui permet d'activer ou désactiver la souris et le clavier pour n'importe quel fenêtre.

    Qu'entendez-vous par champ GDImage ? C'est un champ créé par programmation sans passer par le créateur d'ihm de windev ?
    Oui c'est un champ qui est créé par programmation, mais vous pouvez utiliser un champ WinDev masqué pour indiquer les coordonnées que vous voulez utiliser.

    Voir sur mon site le projet "Carrousel" et utilisez le comme exemple, dans le code faites une recherche sur "GDImage_Template"
    et regardez le code WinDev "Initialisation de GDImage_Template", tout y est expliqué.

    ...

Discussions similaires

  1. TQrDBText ou TQrLabel avec angle d'orientation
    Par cadetill dans le forum Contribuez
    Réponses: 8
    Dernier message: 07/07/2016, 04h48
  2. Réponses: 2
    Dernier message: 08/04/2009, 06h39
  3. Réponses: 1
    Dernier message: 27/06/2007, 16h01
  4. masquer un libellé avec javascript
    Par cyberastuce dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 12/04/2006, 16h09

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