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 FMX Delphi Discussion :

Composant FMX : comment ancrer les objets ?


Sujet :

Composants FMX Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Composant FMX : comment ancrer les objets ?
    Bonjour,

    Introduction

    Je commence à m'habituer à FMX avec encore beaucoup d'hésitations et donc à "percevoir" le produit. J'ai cherché pendant 10 minutes quelle unité il fallait insérer dans le uses pour utiliser les couleurs pré-déclarées telles que claBlack... (System.UIConsts)... Ce qui prouve, je suppose, que je ne sais pas utiliser correctement l'aide... Pourtant un Lazarusien a l'habitude de chercher .

    Je commence à réaliser (basculer) l'équivalent de mes composants Lazarus. J'en suis à mes boutons graphiques. Je déplore évidemment l'absence de TImageList mais on fera sans... car j'ai vu une solution alternative. L'approche de "substitution" m'a semblé pour le moins complexe... J'allais écrire "invraisemblable". On va rester dans la modération. Manque de pratique sans doute.

    Mais d'une manière générale, j'en suis au stade -que j'espère dépasser- de trouver l'environnement trop "contraignant", trop sophistiqué.... J'aime les IDE simples, dépouillés à la Delphi 7. Néanmoins, j'ai noté la question pour évaluation plus tard : Que m'apporte une telle sophistication en terme de productivité ? Par exemple les styles ? Quelle est leur ré-employabilité réelle ? Quel apport dans une Form comparé à la réalisation puis à l'utilisation d'un composant personnalisé ? Quelle est la limite de ce type de développement ? Par exemple, on trouve de nouveaux boutons stylisés (Ecriture penchée, fond de couleurs différentes...) mais je n'ai rien vu d'aussi sophistiqué que ce que l'on trouve en VCL (sans style). Là encore, jeunesse du produit ou complexité exponentielle avec les exigences ? Exemple de ce que je ne peux pas transposer actuellement de Lazarus vers FireMonkey : les boutons 5 états de Windev (mode "9 images" inclus)...

    Enfin mes composants transposés "compilent" en XE4 et sont installables.

    Mon problème : les ancres

    Comment gérer l'alignement de plusieurs objets dans un TLayout utilisé comme ancêtre. En Lazarus, il m'est très facile de placer un objet par rapport à un autre, l'autre n'étant pas nécessairement le parent. Par exemple un TLabel centré horizontalement sur un TImage contenus (les deux) dans un TPanel (cf component.png). L'exemple est simple, et on pourrait certainement utiliser des références uniquement au Parent pour résoudre ce problème. Il est volontairement simple pour comprendre mon approche habituelle. Dès que le problème se complique un peu, le positionnement d'objets de "même niveau" les uns par rapport aux autres procure une souplesse et une simplicité inégalées. Comment fait on-cela en Delphi FMX ?

    L'aide existe, est utilisable, mais ne m'a pas permis de résoudre mon problème.
    Citation Envoyé par http://docwiki.embarcadero.com/Libraries/XE4/fr/FMX.Controls.TControl.Anchors[/B
    FMX.Controls.TControl.Anchors
    Spécifie comment le contrôle est ancré à son parent
    et http://docwiki.embarcadero.com/Libraries/XE4/fr/FMX.Types.TAlignLayout... Cela semble plus complet que Lazarus mais malheureusement c'est moins facilement fonctionnel.
    alHorzCenter : Le contrôle est centré horizontalement dans la zone client du parent, et se redimensionne afin de remplir la hauteur de son parent. La largeur du contrôle n'est pas affectée. Si un autre contrôle, épinglé sur le bord, occupe déjà la partie de la zone parent, le contrôle se redimensionne afin de remplir la hauteur restante de son parent. Les ancrages sont définis sur [akTop,akBottom].
    et
    Citation Envoyé par http://docwiki.embarcadero.com/Libraries/XE4/fr/System.UITypes.TAnchors
    System.UITypes.TAnchors Description
    Embarcadero Technologies ne possède pas d'informations supplémentaires pour le moment. Veuillez nous aider à documenter cette rubrique en utilisant la page Discussion !
    Je cherche pour commencer à réaliser un centrage horizontal (ou vertical) simple (ie sans redimensionnement) d'un objet dans son parent. J'ai cherché une solution dans http://docwiki.embarcadero.com/RADStudio/XE4/fr/Strat%C3%A9gies_des_dispositions_FireMonkey. Et là, pas mieux... Cela parle peut-être à un Delphien mais pas à moi. En réalité, cette complexité est dûe au fait que seul le parent est utilisé comme référence. Si les objets d'un même parent pouvait être interfacés entre eux, la simplicité et la puissance seraient au rendez-vous. Là, je veux bien supposer que la dernière y est mais quid de la simplicité ?


    Autre approche très délicate semble-t-il : les TStringGrids

    Cela fera l'objet d'une autre discussion. Pour l'instant, je cherche de la documentation. Mais visiblement le codage est très différent de la VCL/LCL et certaines des méthodes que je veux implanter sont non documentées et les moteurs de recherches relativement muets.


    Suite des commentaires

    Sinon, que de plantages... Tout de suite en quittant Delphi (cf quit.png)... C'est la plupart du temps des problèmes d'affichage. Des Forms dans l'IDE qui deviennent noires (noir sur fond noir). Un petit resize à la souris rend le noir sur fond blanc ce qui me permet de revoir mes objets... Je ne parle pas du projet compilé mais de l'utilisation de l'IDE. C'est peut-être lié à mon 64 bits, à l'utilisation d'un Dual-Screen ? Par contre d'autres, comme celui-ci apparu juste après l'ouverture de Delphi lors de la déclaration d'un nouveau composant (cf ou.png), ne sont pas des problèmes d'affichage. Delphi s'est gelé.

    Pas de nouvelles de mes déclarations de bugs (reçues pas reçues, validées, en cours de traitement ?)... Rien à voir avec le bugtracker de Lazarus et le confort des patchs quotidiens...

    Mes impressions sont à la baisse... mais pas définitives. J'ai un avis très réservé sur les styles, le livebinding... C'est simple au départ, puis rapidement compliqué. L'approche est très "propriétaire" (ie propre à Embarcadero)... Et à mon avis, d'autres approches sont aussi productives et efficaces... et moins contraignantes. Bref, je ne vois pas réellement l'apport de ces méthodes. Et là, j'ai une impression bizarre de déjà vu... Ce type d'aide au développement, on met le doigt dedans... et on subit au fil des versions -que l'on ne peut plus quitter... et pour cause- le meilleur... et le pire. En résumé, au niveau simplicité, j'ai vu mieux et au niveau fonctionnalité, j'ai vu mieux aussi... surtout si on lie les 2 !

    Il me reste 30 jours pour affiner mon approche et m'adapter au mieux au produit. Merci pour une éventuelle réponse sur les ancrages. Cela m'arrangerait bien... Sinon on va faire des calculs pour les positionnements.

    Ressources

    • INNOVA Solutions : FireMonkey is Different [http://www.innovasolutions.com.au/delphistuf/ADUGVCLtoFMXConv.htm]
      Contient notamment VclToFmxConvert.zip - Zip of Code and Executable The file includes the latest executeable and source code. Il y a les sources mais dans mon cas le paquet ne s'installe pas. Il me manque "fmx161.bpl". (cf package.png). Est-ce un moyen d'empêcher l'installation de paquets tiers dans les versions Trial ou un paquet créé en XE2 qui nécessite une bibliothèque (ou un paquet) abandonnée en XE4? Je ne sais pas.


    Bon WE. Cordialement. Gilles
    Images attachées Images attachées     
    Dernière modification par Invité ; 06/05/2013 à 10h06. Motif: Précisions

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Suite et fin


    Finalement, je renonce. Hormis les problèmes déja signalés ci-dessus, je n'arrive pas à mettre en oeuvre la cross-compilation MacOs X. Mais je ne jette pas la pierre à Delphi dans la mesure où je constate de gros problèmes avec Lazarus dans cet OS. Cela me conforte simplement dans mon opposition à la cross-compilation (en Desktop, pour le reste tablette/smartphone, tant qu'on ne fera pas tourner un IDE dessus, on ne pourra pas faire autrement). Je reste persuadé que pour réaliser des applications client riche (/lourd ?... bref des applications "traditionnelles" pour PC), un IDE doit "tourner" sur ses plate-formes cibles... comme Lazarus, C++/QT... Je sais que c'est contesté. Et je n'affirme pas que cela soit infaisable. Cependant, j'ai longuement essayé : aucun de mes tests de cross-compilation "DeskTop" d'applications de bonne envergure n'a été satisfaisant... Par contre, ils m'ont imposé une perte de temps invraisemblable.


    Conclusion

    Objectivement (ie les faits)
    • IDE : Des plantages trop nombreux sur mon appareil. Je sais bien que c'est une nouvelle release, mais comment font les programmeurs qui sont obligés de migrer avec XE4 pour bénéficier notamment des nouvelles possibilités au niveau des tablettes et autres smartphones ? C'est vraiment agaçant. Mon poste est stable. Lazarus 1.0.8 (64 bits), Windev 18 (32 bits), le dernier C++/QT... y tournent sans problème particulier.
    • FireMonkey : Au niveau des besoins pour développer des applications client riche, c'est largement incomplet... et à 2 niveaux:
      1. Cela manque de composants
      2. Les méthodes implantées dans les composants sont souvent insuffisantes.
      Le cas le plus représentatif est la TStringGrid. Les ressources dont je dispose et les méthodes de développement imposées ne me permettent pas (dans la majorité des cas) ou me permettent de manière très (vraiment très) compliquée de m'approcher de ce que je réalise en Lazarus.


    Mon ressenti

    C'est très simple. Bien que cela ne soit pas vraiment ma tasse de thé je préfère(rais) autant développer en C++/QT qu'en FMX. Je reconnais mal (c'est presqu'un euphémisme) "mon" Delphi et surtout pour le prix d'une telle "complexification" à outrance avec des méthodes "propriétaires", j'en veux (voudrais) pour mon argent... et tout de suite. Un regret est de ne pas avoir pu tester l'accès à mes bases de données (pgSQL). Je crois que j'ai désormais suffisamment "expérimenté" pour pouvoir décider. Je reste un Lazarusien convaincu parce que je l'estime supérieur en Desktop à FMX, parce que le plus Delphiste des 2 dans l'esprit que je m'en fais, c'est Lazarus... et parce que finalement ce dernier n'a pas plus de défauts (voire beaucoup moins) que XE4/FMX. Je me sers tous les jours de Lazarus, il ne plante jamais ! J'ai déjà émis cette réflexion et je la maintiens : Si on compare Delphi (même 7) à Lazarus en Windows (ie VCL), ce qui fait pencher la balance vers Delphi, c'est sa bibliothèque tierce de composants. Maintenant en FMX, elle n'existe pas. A ce niveau, on se retrouve dans la situation de Lazarus. Alors la perception est très différente.

    Durant mon test de plusieurs jours pendant mes vacances, ma sympathie envers XE4 s'est peu à peu affadie à l'épreuve des problèmes rencontrés, y compris à l'analyse des solutions trouvées... quand je les ai trouvées. La conclusion s'impose à moi en ce qui concerne XE4/FMX : bien que ce langage soit toujours du Pascal, ses approches (unités, méthodes, propriétés) me sont devenues souvent étrangères. Fréquemment, les choix retenus (les ancrages par exemple) me semblent curieux et désagréables, comparés aux solutions d'autres IDE/langages (même si pour le cas des ancrages je crois que Delphi a toujours proposé cette solution... et justement avec FMX, on aurait peut-être pu vérifier le ratio simplicité/performance et s'inspirer ailleurs. Je ne fais pas une fixation sur les ancrages... mais c'était le point de départ de ma question). Je désinstalle XE4... mais compte tenu de l'évolution du produit, de mes besoins, de mes connaissances et de mes capacités, je crains de ne plus être capable de m'y "réadapter" un jour. Mon coeur et ma raison s'accordent sur mon premier choix : plus que jamais je soutiens Lazarus. Donc, place à la nouvelle génération que je souhaite nombreuse pour Delphi.

    Cordialement. Gilles
    Dernière modification par Invité ; 08/05/2013 à 12h32.

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 907
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 907
    Par défaut
    Une chose est sûr, tu aimes écrire !
    Mais le problème est que dès qu'une intervention dépasse dix lignes, ça me rebute et je ne la lis pas

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est un moyen de penser calmement et de mettre au clair mes idées, de les organiser, les confronter, les hiérarchiser, les développer... Ecrire me facilite cette activité. Certains préférent le yoga... Je crois que dans ma génération, les "matheux" -mais pas qu'eux- aiment écrire... Cela rend toujours suspicieux mes élèves... tous très adeptes du "texto". C'est vrai que la technologie "commerciale" dont il découle (le SMS) a imposé des messages courts. Cela tombe bien, prolixes comme sont souvent leurs propos. Sans désobligeance aucune, je crois que je n'envahirai plus le forum Delphi pendant un certain temps.

    Mais en commentaire à votre propos, oserais-je affirmer qu'il ne me semble pas facile d'apprendre, de se former, voire de s'informer dès qu'on -comment disent-ils déjà ?-... "déconnecte" au bout de 10 lignes. Et même, difficile de penser en seulement 10 lignes. Un peu réducteur cette extrême simplification non ? Les résumés de résumés deviendraient suffisants ? Je perçois notre décalage...

    Remarquez, 10 lignes d'une longueur infinie... c'est de trop : une seule suffit !

    Plus sérieusement, dans le cas précis, j'émets des critiques. La moindre des choses, c'est qu'elles puissent être contestées... dans les faits. Et pour ce faire, il faut qu'elles soient étayées.

    Bon "pont" si vous le faites. Cordialement. Gilles
    Dernière modification par Invité ; 08/05/2013 à 17h09.

  5. #5
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonsoir,

    Citation Envoyé par selzig Voir le message
    Bonjour,

    C'est un moyen de penser calmement et de mettre au clair mes idées, de les organiser, les confronter, les hiérarchiser, les développer... Ecrire me facilite cette activité. Certains préférent le yoga... Je crois que dans ma génération, les "matheux" -mais pas qu'eux- aiment écrire... Cela rend toujours suspicieux mes élèves... tous très adeptes du "texto". C'est vrai que la technologie "commerciale" dont il découle (le SMS) a imposé des messages courts. Cela tombe bien, prolixes comme sont souvent leurs propos. Sans désobligeance aucune, je crois que je n'envahirai plus le forum Delphi pendant un certain temps.

    Mais en commentaire à votre propos, oserais-je affirmer qu'il ne me semble pas facile d'apprendre, de se former, voire de s'informer dès qu'on -comment disent-ils déjà ?-... "déconnecte" au bout de 10 lignes. Et même, difficile de penser en seulement 10 lignes. Un peu réducteur cette extrême simplification non ? Les résumés de résumés deviendraient suffisants ? Je perçois notre décalage...

    Remarquez, 10 lignes d'une longueur infinie... c'est de trop : une seule suffit !

    Plus sérieusement, dans le cas précis, j'émets des critiques. La moindre des choses, c'est qu'elles puissent être contestées... dans les faits. Et pour ce faire, il faut qu'elles soient étayées.

    Bon "pont" si vous le faites. Cordialement. Gilles
    On ne peut pas vous reprocher d'être bavard, mais là tout de même vous jetez des pierres un peu "gratuitement" sur Delphi. On passe sur l'approche différente VCL/FMX, elle peut vous perturber, ne pas vous convenir, souffrir également de sa jeunesse. Mais vous renoncez à priori suite à une incapacité de faire tourner votre programme sur Mac. Par contre je ne vois nul part dans votre message quelle est cette difficulté ?
    Parce que ce doit être un problème surmontable à mon avis. Personnellement je fait de la cross-compilation depuis XE2 sur Mac (et aujourd'hui j'ai fait ma première toute petite application IOS), je n'ai jamais rencontré de difficultés. Ou plutôt si, avec XE4 j'ai était obligé de désactivé le pare-feu de mon MacBook, avec XE2 et XE3 ce n'était pas nécessaire, bon. J'ai aussi un petit réseau donc le déploiement sur mac et/ou simulateur ios est plutôt très long, et heureusement qu'on peut mettre l'application au point sur Windows même pour ios, ce qui est quand même très pratique. Bon à condition de ne pas utiliser les api IOS bien sûr et on ne bénéficie pas non plus du rendu final, mais au moins on peut déboguer fonctionnellement l'application, il ne reste plus que les "détails" visuel à retravailler en étant obligé de déployer à chaque modif. Sans vouloir troller j'ai pour le moment beaucoup moins de problème sur macos avec Delphi qu'avec Lazarus.

    Bonne continuation.

    @++
    Dany

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je ne jette pas de pierres gratuitement sur Delphi. Je détaille. Je questionne. J'argumente quand je n'arrive pas à mettre en oeuvre.

    Vous mettez en avant iOS : je n'en parle pas. Je ne teste pas. Je ne connais pas. "Cela" ne m'intéresse pas. Je vous parle de FireMonkey utilisé pour développer des applications lourdes donc pour Win, linux (32 et 64 bits) et macOS 32 bits. Malgré toutes les publicités que je reçois, je ne peux pas développer... pas plus d'ailleurs que des composants à la hauteur de VCL ou LCL. Mais il est vrai que c'est une version Trial. Seulement je ne vais peut-être pas investir dans une faisabilité hypothétique avec la version Entreprise ou professionnelle.

    Je n'ai pas évoqué les problèmes de cross-compilation puisque le problème n'avait plus lieu de l'être : j'ai renoncé.

    Maintenant si je peux me permettre d'être direct : je vais me désinscrire des listes marketing d'Embarcadero. Je ne veux plus que l'on me prenne pour un imbécile..., un "pigeon"... Visiblement, c'est un produit que mes capacités et mon expérience ne me permettent pas d'appréhender voire même d'utiliser. J'ai lu récemment que leurs représentants commerciaux étaient nommés "Evangelist". C'est un terme mal adapté et inquiétant que l'on réserve à des associations très particulières. Il ne faudrait pas glisser de la niche... Pour reprendre leur vocabulaire, j'ai destiné de rester "profane"... et de garder ma liberté de penser... et d'énoncer de simples faits.

    Maintenant si vous avez un petit peu de temps, et si vous connaissez Windev, essayer de faire un composant bouton graphique de type neuf images en FireMonkey qui tourne(ra) sous Win et Mac... C'est le sujet de ma question. Une fois ceci fait, nous pourrons comparer le code, les méthodes, les approches si vous le voulez avec son équivalent que j'ai réalisé en Lazarus sous Win, Mac et Linux. C'est aussi simple que cela. J'ai essayé. Aussi bien en Lazarus qu'en Delphi. Lorsque Lazarus a posé problèmes, je les ai soulevés.

    Si vous avez plus de temps, je vous propose de réaliser des TStringGrids un peu élaborées : multiselect non contigu, tris multiples (xxx ASC, yyy DESC), gestion du multiligne.... Alors là c'est le délire... pour moi. Si vous fouillez un peu dans le forum Lazarus, vous verrez que c'est faisable et que cela fonctionne et que le code est relativement simple (après coup ).

    Jamais sur le Forum Lazarus, je n'ai recensé d'interventions de prédicateurs [on va utiliser le vocabulaire (con)sacré ] mais simplement des programmeurs qui m'ont aidé ou ont corrigé le produit. Il y a des choses à ne pas dire. Vos propos sont censé faire pression sur moi ? Quel est le problème ?
    Les bugs ? Vous avez es copies d"écran. Mes propos, j'ai différencié la partie objective que j'ai détaillée de mes impressions ? Où est la faute votre Honneur?

    Je vous laisse entre Vous. Delphi ne me concerne définitivement plus pour les raisons que j'ai évoquées. Je ne dis pas qu'il n'est pas bon (lisez les mots ont un sens pour peu qu'on ne les interprète avec un prisme... sectaire ? Delphi n'est pas adapté à mes besoins malgré ce que sous-entend la manière dont il est présenté... qui elle semble parfaitement compatible à mes besoins.

    Comme c'est la 3ème tentative, (excusez, j'ai "sauté" une version), voila, j'en reste là. C'est un avis parmi d'autres qui j'en suis sûrs en sont satisfaits. Mais même minoritaire, dans notre pays, on a le droit de s'exprimer en respectant les règles. C'est ce que j'ai fait.

    Je vous souhaite une bonne continuation.
    Cordialement Gilles
    Dernière modification par Invité ; 09/05/2013 à 09h57.

  7. #7
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonjour,

    Je vous cite :

    Citation Envoyé par selzig Voir le message
    Finalement, je renonce. Hormis les problèmes déja signalés ci-dessus, je n'arrive pas à mettre en oeuvre la cross-compilation MacOs X.
    Pour les problèmes déjà signalé, je veux bien admettre que MFX n'est pas à certains niveaux au même stade d'évolution que VCL (et je dis bien à certains niveau, parce que essayez de faire des animations et de la 3d avec la VCL, je pense que vous allez "ramer" un peu plus qu'avec FMX). Encore que, comme j'ai pu le dire lors d'autres sujets autour de FMX, il vaut mieux arriver avec un esprit non emprunt de la logique VCL, parce que la philosophie est différente, et si on retrouve bien sûr le côté pose-boutons de la VCL, dès qu'on gratte on s'aperçois que ce n'est pas la VCL. Il y a du moins bien (le côté nombre de composants tiers, su à la jeunesse de la plate-forme, qui ne pourra grandir que si on s'obstine un peu à l'utiliser, sinon elle connaitra le même sort que Kilyx, et Delphi aussi du coup vue que win32, ben c'est un peu mort). Il y a du mieux aussi : vous critiquez les live-binding, je trouve au contraire que c'est un gros plus par rapport à la VCL. Ne pas avoir une petite palette de composants liés aux données, mais pouvoir lier n'importe quel composant à n'importe quel autre (parce que là on n'est même pas limité aux datasource) je trouve que c'est une avancée certaine !! Et en plus depuis XE3 on peut le faire visuellement (avant c'était quand même assez galère à faire, il faut le reconnaitre).

    Bon par contre dire que vous n'arrivez pas à mettre en œuvre la cross-compilation, je veux bien l'entendre, mais on aimerait savoir pourquoi ? Surtout dans la mesure où de mon expérience personnelle je n'ai jamais rencontré de problème particulier en suivant la procédure (hormis le nouveau pb du pare-feu). Et si je parle d'IOS ce n'est pas pour le mettre en avant, mais pour appuyer au contraire le fait que la cross-compilation est bien possible à mettre en œuvre puisque là on déploie sur le mac mais cela s'exécute dans le simulateur IOS). On peut aussi déployer sur le device, mais là j'ai pas testé (et payer 99$ à Apple pour tester je doute que je le fasse, on verra si je développe quelque chose de plus intéressant ou si cela intéresse ma boite, ce qui est probable puisqu'il semble qu'IOS ait été choisi par la maison mère ).
    Donc oui pour le coup, la "goutte" qui vous fait renoncer n'est pas très argumentée.

    @++
    Dany

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ecoutez Dany,

    je propose d'en rester là.

    La cross-compilation fonctionne sous iOS. Heureusement sinon je ne sais pas comment vous feriez pour développer à moins de faire tourner Delphi (l'IDE) directement sous iOS.

    Pour le problème vers MacOS, je n'ai pas de copies d'écran donc difficile d'appuyer mes dires surtout sur votre forum. J'en suis resté au stade des hypothèses. J'ai écrit : "je n'ai pas réussi". Encore une fois, on va dire que je ne suis pas adapté au produit. De plus, je le redis : je n'utilise pas la cross-compilation de manière usuelle. J'ai testé longuement en Lazarus... pour me faire une idée... avant de rejeter cette méthode. Et comme la cross-compilation n'est pas nécessaire en Lazarus, pas nécessaire en QT/C++ pour le développement de mes applications Desktop... et que, comme vous le savez, les tablettes et autres Smartphones ne font pas partie de mon univers de développement, je ne prétends pas avoir une expertise sur la question.

    Dans la mesure où vous ne rencontrez pas de problème, les utilisateurs du forum savent à qui s'adresser.

    Enfin, il n' a pas de "goutte". Relisez ma participation au forum Delphi... Une succession de mises en oeuvre, de compte-rendus, de questionnements, de discussions. J'ai même essayé une approche SmartPhone... pour me rendre compte . C'est là que j'ai redécouvert Delphi et comme j'étais nulb avec, j'ai ressorti mon C++/QT pour me rendre compte... Et lui aussi avait évolué..ouah ! Voilà pourquoi j'évoquais mon rapport avec cette plate-forme
    comparée à Delphi. Je me suis procuré aussi un Windev 18 pour voir ce qu'on faisait actuellement en terme d'IHM et de composants graphiques... Re-ouah.
    Tout n'est pas rose :http://www.developpez.net/forums/d77...s-avec-windev/ Là encore, c'est un peu long.

    Je pense prendre le recul nécessaire : Delphi XE4 plante, je précise que c'est peut-être lié à mon 64 bits [mais aussi je précise qu'avec d'autres IDE installés, il ne plante pas]. Pour la programmation, je précise le problème, comment j'aimerais procéder et sollicite de l'aide après parcours d'une tonne de docs éparpillées... Et là encore, j'accepte d'entendre que le programmeur n'est pas au niveau...

    Quelque soit l'approche, j'en tire la même conclusion et pour ne plus céder aux sirènes [je suis crédule], je fais rayer mon nom des listes marketing d'Embarcadero et de ses représentants en France. Lire votre forum me suffira.

    Bonne journée.
    Cordialement. Gilles
    Dernière modification par Invité ; 09/05/2013 à 12h18.

  9. #9
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Citation Envoyé par selzig Voir le message
    J'ai lu récemment que leurs représentants commerciaux étaient nommés "Evangelist". C'est un terme mal adapté et inquiétant que l'on réserve à des associations très particulières. Il ne faudrait pas glisser de la niche... Pour reprendre leur vocabulaire, j'ai destiné de rester "profane"...
    ouh là pas de politique ici, s'il vous plait...
    Le terme "evangelist" est couramment utilisé, notamment par Microsoft et d'autres. Oui quelque part ils "portent la bonne parole", ce que d'ailleurs fait n'importe quel commercial (non ?), ils ont bien sûr pour mission de convaincre de nouveaux utilisateurs, ou clients (comme tout commercial, non ?). La comparaison s'arrête là, on est dans le domaine du technique ici...

    Citation Envoyé par selzig Voir le message
    Maintenant si vous avez un petit peu de temps, et si vous connaissez Windev, essayer de faire un composant bouton graphique de type neuf images en FireMonkey qui tourne(ra) sous Win et Mac... Je pourrais vous présenter si vous le voulez son équivalent en Lazarus sous Win, Mac et Linux. C'est aussi simple que cela. J'ai essayé. Aussi bien en Lazarus qu'en Delphi. Lorsque Lazarus a posé problèmes, je les ai soulevés. Je n'ai pas recensé d'intervention de prédicateurs [on va utilisé le vocabulaire (con)sacré ] mais simplement des programmeurs qui m'ont aidé ou ont corrigé le produit.
    Non, je ne connais pas WinDev, je l'avais essayé il y a bien longtemps, mais l'avais trouvé bien trop fermé à leur univers puisque (comme d'autres produits) il valait mieux rester enfermé avec leur base de données, ce qui n'était pas possible pour moi vu que nous sommes dans un milieu hétérogène de ce côté là. Puis il y avait des bugs, beaucoup... Et j'ai longtemps été par curiosité sur leur forums et j'ai pu voir nombre de doléances au niveau des bugs non résolut depuis plusieurs versions... Rien n'est parfait.
    Mais surtout ce que j'aime dans Delphi c'est le Pascal. C'est aussi ce que j'aime dans Lazarus, mais professionnellement je ne pouvais pas l'imposer, j'ai des besoins d'accéder à des choses comme un AS400, un Active Directory Microsoft, un serveur Exchange.. Tout cela me semblait bien moins facile avec Lazarus qui en plus à l'époque n'était même pas en version 1 (j'ai rarement vu un produit mettre aussi longtemps à passer d'une version 0.9 à une version 1.0!!), donc même si tout cela avait été possible aussi facilement, et malgré sa gratuité j'aurais eu beaucoup de mal à convaincre mon DSI.
    Mais si vous m'envoyez une petite appli qui met en œuvre ce fameux bouton qui semble si utile, je veux bien relever le défi de le porter sous Delphi/Mac (pour IOS je ne m'engage pas vu que là on est plus limité, puisque visiblement ils utilisent les composants standard de la plate-forme).


    Citation Envoyé par selzig Voir le message
    Je vous laisse entre Vous. Delphi ne me concerne définitivement plus pour les raisons que j'ai évoquées. Je ne dis pas gratuitement qu'il n'est pas bon... mais qu'il n'est pas adapté à mes besoins malgré ce que sous-entend la manière dont il est présenté... qui elle semble parfaitement compatible à mes besoins.
    C'est là que nous sommes en désaccord, il est présenté comme étant un outil permettant de développer pour plusieurs OS avec la même base de code, et cela il le fait, pas avec la VCL mais ça n'est pas caché, c'est clairement annoncé, on parle de FireMonkey, pas de VCL. Après l'outil reste sur Windows ce qui peut vous décevoir par rapport à Lazarus (mais vous mettez en avant WinDev, il tourne sur autre chose que Windows leur IDE ?).
    C'est un autre débat mais selon moi ce n'est pas forcément un frein, c'est plus du niveau du confort et de l'argument commercial, et pour moi je préfère qu'ils s'appliquent à faire murrir Firemonkey pour qu'on entendent plus le genre de critiques que vous soulevez plutôt qu'ils perdent du temps à porter leur IDE (qui inclus du .NET, merci Borland) sur toute les plate-formes. Il sera temps de le faire ensuite lorsque le reste sera stabilisé.

    Bonne continuation

    @++
    Dany

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je comprends et peux partager votre approche.

    Alors, si Windows ne me pose pas de problème en tant qu'OS, Microsoft si, comme Apple, comme Oracle... Je ne fais pas de religion non plus, ni d'anti-américanisme... Mais leur approche et leur terminologie et leur confusions (mélanges des genres) sont les leurs... et pas les miennes (j'avais écrit initialement "les nôtres" en pensant "celles des Français" mais là, je m'avance peut-être un peu). Je ne supporte pas d'être embrigadé.

    Pour Windev dont "je ne suis pas représentant", que j'ai abandonné en 7.5 pour "désaccords commercial et techniques" (cela me rappelle une autre décision très récente pour un motif quasiment identique ) et repris cette année en 18, je crois que vous devriez tester. Ergonomiquement, esthétiquement Les bases de données, c'est leur problème. Et je vais vous faire bondir (un peu de provocation, là j'admets) mais dbExpress n'est pas non plus sensationnel. Quel "truc" (approche) surprenante ! Ceci explique le succès de Zeos d'ailleurs.

    Pour Delphi : NON ! Il est présenté comme une solution permettant de porter votre application Windows directement sur MacOS. C'est jouer sur les mots : Delphi... vous pensez VCL, applications VCL... bref ce qui a fait son succès... et pas application FMX. Il n'y a pas tromperie... mais une imprécision entraînant une confusion... car les composants FMX ne sont pas comparables en nombre (notamment avec ceux des sociétés tierces), en qualité et en fonctionnalité. Et puis, pour moi (donc forcément subjectif), il faut accepter le défi : tout comme vous, le Pascal est "mon" langage... l'IDE est pratique. Mais mon activité principale et mon plaisir sont d'écrire des lignes en Pascal. Maintenant, je devrais amputer ce plaisir en "programmant" (c'est le mot qui vient ?) des styles et en "je ne sais pas décrire" le Livebinding ? Pour moi, c'est une contrainte et le pari c'est d'obtenir mieux qu'en alignant meshabituelles lignes de codes en Pascal. Je n'ai pas réussi... et pourtant j'y ai mis de la bonne volonté et le temps que j'estime nécessaire.

    Pour le défi, le bouton, c'est simple, ce serait même un plaisir : il n'y a pas un défi Pascal chaque année ?
    J'ai "mon" bouton, mais j'avais vu une approche avec JS que je n'ai pas menée à terme... Voila une occasion.

    Cordialement. Gilles
    Dernière modification par Invité ; 09/05/2013 à 15h15.

  11. #11
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Citation Envoyé par selzig Voir le message
    Pour Windev dont "je ne suis pas représentant", que j'ai abandonné en 7.5 pour "désaccords commercial et techniques" et repris cette année en 18, je crois que vous devriez tester. Ergonomiquement, esthétiquement Les bases de données, c'est leur problème. Et je vais vous faire bondir (un peu de provocation, là j'admets) mais dbExpress n'est pas non plus sensationnel. Quel "truc" (approche) surprenante ! Ceci explique le succès de Zeos d'ailleurs.
    Oui quand on a commencé avec le BDE, dbExpress peu surprendre. Là encore un héritage de Borland dont Embarcadero doit prendre en compte vu qu'il y a des utilisateurs de dbExpress. Mais ils ont quand même un gros intérêt (si on fait abstraction de l'implémentation) c'est d'unifier la méthode quelque soit la base de données. Je ne connais pas Zeos, mais j'ai un peu testé FireDac, ce Framework devrait mieux vous convenir. Je ne sais pas d'ailleurs si derrière la tête d'Embarcadero il n'y aurait pas l'idée de faire doucement glisser les client vers ce Framework pour abandonner à terme dbExpress, qui deviendrait mort-vivant comme le BDE durant une bonne décennie.

    Citation Envoyé par selzig Voir le message
    Pour Delphi : NON ! Il est présenté comme une solution permettant de porter votre application Windows directement sur MacOS. C'est jouer sur les mots : Delphi... vous pensez VCL, applications VCL... bref ce qui a fait son succès... et pas application FMX. Il n'y a pas tromperie... mais une imprécision entraînant une confusion... car les composants FMX ne sont pas comparables en nombre (notamment avec ceux des sociétés tierces), en qualité et en fonctionnalité.
    Oui la VCL a fait les beaux jours de Delphi. Mais je trouve vraiment regrettable de réduire Delphi à cela. Il n'a donc aucun autre intérêt selon vous que celui de faire une petite interface simpliste en posant visuellement des composant sur la fiche Windows ?
    Pour moi il en a d'autres : la clarté du langage, la facilité de débogage des applications, la rapidité du compilateur, la robustesse et la performance des objets générés, ...

    Citation Envoyé par selzig Voir le message
    Pour le défi, c'est simple, ce serait même un plaisir : il n'y a pas un défi Pascal chaque année ?
    Il est si compliqué à faire ce bouton (il ne l'est pas trop à l'utilisation quand même ?) ? Vous titillez ma curiosité et si je ne tenais pas à ne pas polluer mon PC j'installerai bien une version d'essai de WinDev rien que pour voir ce fameux truc (au fait faut toujours un dongle sur le port série ? Parce que mon portable n'en a plus).

    @++
    Dany

  12. #12
    Invité
    Invité(e)
    Par défaut
    Pas la peine de me "faire l'article" pour Delphi VCL. J'adore... et je suis convaincu. Mais je suis surpris : le Delphi dans sa configuration FMX n'a rien à voir avec le Delphi en mode VCL. Comparez 2 TstringGrids ! Je vois 2 plate-formes tout à fait différentes même si l'IDE est le même. Votre perception m'est étrange : je pose ma TstringGid sur ma Form... pareil en VCL et en FMX. Maintenant, je veux trier une colonne (et je n'essaie même pas 2, genre Col1 ASC, col2 DESC). C'est le même code Pascal ?.... Comme diraient mes élèves : "j'suis une buse alors... je capte rien !" Vous avez essayé le tri sur des colonnes de TStringGrid en FMX ? J'ai vu des conseils me ramenant à des styles. Ce n'est pas du Pascal cela !

    Non pour Windev, ils sont passés au port USB. Mais il existe une version gratuite d'essai.

    Pour le bouton, contrairement à JS, j'ai utilisé des "sous-composants":
    un ImageBG... Pour le background (usuellement 80*24)
    un imageFR ...de premier plan (usuellement 16*16)
    un label...
    Toute les variantes de positionnement doivent pouvoir être utilisées
    • ImageFR centré sans tLabel
    • ImageFR à gauche, Label à droite
    • ImageFR à droite, Label à gauche
    • ImageFR centré horizontalement, label en dessous, la "réunion des 2 centrée verticalement.
    • ...

    On comprend vite pourquoi la programmation des ancrages est essentielle... compte tenu du nombre de combinaisons possibles.

    La gestion des transparences BMP (et PNG) est de rigueur.
    Les imageBD.png et imagesFR.png sont en réalité chacune 5 images accolées (celles des 5 états, Out, Over...). Donc pour une imageFR de 16*16 on a une imageFR.png de 80*16. Il faut donc découper la bonne partie correspondant à l'évènement : Over, Out, Click...

    Cerise sur le gâteau... Si on élargit le bouton, en supposant qu'il y ait des bords (liserés), cela devient affreux au niveau esthétique avec le grossissement... Il faut donc agrandir la partie centrale de l'image (la majeure partie de l'image) sans agrandir (mais en dupliquant sur la longueur et sur la hauteur) les bords. On utilise un mode 9 images : 9 correspond aux 9 secteurs nécessaires (cf image.png). Les secteurs sur fond jaune ne sont pas agrandis mais dupliqués sur leur largeur ou leur longueur. Ainsi le bord des boutons restent "nets". Là la gestion des fonctions de dessin est importante mais je n'en suis pas arrivé là en FMX. On n'oublie pas non plus le disabled (le grisé).

    Voilà... J'ai un cahier des charges précis (je travaille à l'ancienne) mais pas sur le portable que j'utilise actuellement. Il faudra patienter un peu. Pour le reste l'approche de JS est meilleure. Il n'utilise pas des sous-composants. Il a défini le cadre mais j'ai encore quelques problèmes avec les transparences notamment en Linux. Donc le défi m'intéresse.

    Cordialement. Gilles
    Images attachées Images attachées  
    Dernière modification par Invité ; 09/05/2013 à 15h17.

  13. #13
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Oui, FMX est différent de VCL, je ne l'ai jamais nié. La stringgrid de FMX n'est pas celle de la VCL, elle ne s'utilise pas pareil, est moins sophistiquée, mais n'est pas cantonnée à Windows. Après tout dépend des besoins de chacun. Si le développement multi-plateforme ne vous intéresse pas, vous disposez toujours de la VCL (même en 64bits d'ailleurs).

    Concernant le bouton pour le coup c'est moi qui suis une buse... je comprend pas bien ce que vous voulez. Un simple bouton et un TImage que vous mettez comme enfant du TButton avec tous les anchors cochés répond à votre cahier des charges non ?

    @++
    Dany

  14. #14
    Invité
    Invité(e)
    Par défaut
    Vous voyez le bouton "Citer" du message d'au dessus ?
    Je voudrais, enfin c'est ce que j'essayais de faire avec FMX :
    • qu'il soit construit à partir de 2 TBitMap définis dans les propriétés (FBitmapBG: TBitmap; FBitmapFO: TBitmap; ) une pour le fond du bouton, et une pour le petit dessin de gauche, à gauche de "Citer") et un TLabel.caption
    • donc charger seulement 2 fichiers images.png pour les 5 états (cf imagex5.png pour FBitMapFO).
    • que le bouton réagisse aux évènements (actualisation des 2 TImages à partir des 2 TBitMap ce qui nécessite un découpage de ces derniers correspondant à l'évènement en cours : Out, Over, Click...)... ou qu'il ne réagisse pas s'il est disabled (et dans ce cas, les 2 états Out "se grisent")...
    • pourvoir agrandir le composant sans que le liseré du bord ne change d'épaisseur ce qui le rend disgracieux (d'où le mode 9 images). Imaginez le liseré noir du bouton "Citer" agrandi 4 fois notamment ses parties arrondies ou le cas où les bords sont dégradés...
    • qu'il conserve la géométrie interne que je définis dans les propriétés du bouton
    • qu'il gère la transparence bmp [mauve par exemple] et la transparence native d'un .png (voire d'un gif mais je ne me sers pas de ce format).

    Pour les géométries définies par défaut :
    Bouton horizontal : Image Interne et label centrés verticalement dans l'image de fond et au choix
    • Image interne à gauche-label à droite [l'alignement interne du label étant également une propriété au même titre que sa fonte] (c'est le cas du bouton "Citer"
    • Image interne à droite - Label à gauche
    • Image centrée pas de Label

    Bouton vertical : Image Interne et label centr's horizontalement dans l'image de fond et au choix
    • Image interne au dessus -label en dessous [l'alignement interne du label étant toujours dans ce cas "Centré"]
    • L'inverse
    • Image centrée pas de Label

    Enfin une dernière exigence, il faut prévoir une propriété afin que l'image interne puisse (éventuellement) suivre les agrandissement de l'image externe tout en conservant ses propres proportions. Ici notamment les ancrages du Tlabel par rapport à l'Image interne (et pas externe, le parent) sont extrêmenment utiles.

    Evidemment au cas par cas, on peut (peut-être) faire chaque bouton à la main... Mais ce n'était pas mon approche.

    Cordialement. Gilles
    Images attachées Images attachées  
    Dernière modification par Invité ; 09/05/2013 à 16h28.

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 907
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 907
    Par défaut
    Je continue à lire en diagonale...

    Citation Envoyé par selzig Voir le message
    pourvoir agrandir le composant sans que le liseré du bord ne change d'épaisseur ce qui le rend disgracieux (d'où le mode 9 images). Imaginez le liseré noir du bouton "Citer" agrandi 4 fois notamment ses parties arrondies ou le cas où les bords sont dégradés...
    Oui, mais non !
    On n'a besoin que d'une seule image. On l'a coupe en quatre parties qui deviennent les angles. Le remplissage n'est ensuite que du stretch-ing sur les pixels centraux.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Ah, je suis intéressé, dès qu'on simplifie.

    Pour l'instant, j'en suis là; C'est à dire à 9:
    • 4 pour les angles qui doivent demeurer "invariables" (ce qui implique les 2 + 2 suivants). En effet, il n'est pas concevable de strecher les angles surtout s'ils sont arrondis ou qu'ils présentent un dégradé.
    • 2 (pour les bords inférieur et supérieur) qu'on laisse dans leur hauteur et qu'on allonge sur la largeur : en supposant que le bord soit un liseré, il doit garder la même épaisseur que celui des coins
    • 2 (pour les bords gauche et droit) que l'on laisse dans leur largeur mais qu'on allonge sur la hauteur : idem
    • 1 partie centrale que l'on "streches"


    Si je comprends correctement ce que vous proposez alors que deviennent les bords latéraux ? Comment sont-ils traités ? Ils ne doivent être "allongés" que dans une dimension, l'autre étant conservée.

    Une seule image de "travail" (je suppose) dans le parent, c'est la conception de JS qui a travaillé "en dur"... mais ce n'était pas la mienne au départ. J'ai préféré utiliser 2 Timages et un TLabel profitant ainsi des ancrages (par économie de code)... et par soucis de séparer les difficultés : chaque Timage possède ses propres problèmes. Quoiqu'il en soit , que l'on choisisse un ou 2 Timages visibles dans le parent, un découpage est nécessaire à partir des 2 TBipMap des propriétés : à chaque fois 1/5ème de chaque TBitMap est chargé dans le ou les Timage(s).

    En Lazarus, un problème inattendu est apparu sous Nux lors de l'utilisation des 2 images au niveau de la transparence du résultat final si les Tbitmaps possédent un canal alpha différent en png. Pourtant avec ce type de fichiers, cela fonctionne correctement en Windows. Cela fonctionne également correctement avec des bmp sous Nux si l'on déclare une couleur (mauve) comme celle de la transparence. C'est le problème que j'évoquais précédemment et qu'il faut que j'étudie de plus près. Comme je ne suis pas un spécialiste des bibliothèques graphiques, il va falloir que je creuse le problème... avant d'envisager de travailler directement sur une seule image.

    Cordialement. Gilles

    PS : désolé d'avoir (encore) dépassé 10 lignes.
    Dernière modification par Invité ; 10/05/2013 à 16h46.

  17. #17
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 907
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 907
    Par défaut
    Oui, il y a deux étirements : un en largeur uniquement et l'autre en hauteur.
    Voilà un exemple rapide en GDI. A adapter pour d'autres formats d'image (ou d'autres technos) :

    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
    42
    43
    44
    45
    procedure ResizeImage(aBmp :TBitmap; aWidth, aHeight :integer);
    var
      Tmp   :TBitmap;
      Rs,Rd :TRect;   //Rect source/destination
      w, h  :integer; //demi hauteur/largeur
     
      //-------------------------------------------------------------
      procedure DrawCorner(aSourceOffset, aDestOffset :TPoint);
      begin
        Rs.Offset(aSourceOffset);
        Rd.Offset(aDestOffset);
        Tmp.Canvas.CopyRect(Rd, aBmp.Canvas, Rs);
      end;
      //-------------------------------------------------------------
     
    begin
      Tmp := TBitmap.Create;
     
      try
        Tmp.SetSize(aWidth, aHeight);
     
        w  := aBmp.Width div 2;
        h  := aBmp.Height div 2;
        Rs := Rect(0, 0, w, h);
        Rd := Rs;
     
        //Haut-gauche
        DrawCorner(Point(0, 0), Point(0, 0));
        //Haut-droite
        DrawCorner(Point(w, 0), Point(aWidth -w, 0));
        //Bas-droite
        DrawCorner(Point(0, h), Point(0, aHeight -h));
        //Bas-gauche
        DrawCorner(Point(-w, 0), Point(-aWidth +w, 0));
     
        //Haut/bas
        StretchBlt(Tmp.Canvas.Handle, w, 0, aWidth -aBmp.Width, aHeight, Tmp.Canvas.Handle, w-1, 0, 1, aHeight, SRCCOPY);
        //Gauche/centre/droite
        StretchBlt(Tmp.Canvas.Handle, 0, h, aWidth, aHeight -aBmp.Height, Tmp.Canvas.Handle, 0, h-1, aWidth, 1, SRCCOPY);
     
        aBmp.Assign(Tmp);
      finally
        Tmp.Free;
      end;
    end;

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Merci pour le code. Je dois mal l'utiliser : il y a des units particulières ?
    En VCL comme en FMX, j'ai des erreurs d'identificateurs non déclarés.

    J'ai essayé de porter ma première approche (de "faisabilité à mon niveau") en code Lazarus en Delphi... Il s'agissait d'agrandir une image "en mode 9" : Alors comme cela, au hasard quelques différences avec le code Delphi (XE4 VCL et/ou FMX).
    • Le Canvas n'a pas de propriété Heigth et Width
    • Le TBitmap.Create (nécessite x et y) : inutile lorsque le TBitMap est virtuel
    • Le mélange single/entier pour la taille des images (!?)
    • Les RectF de FireMonkey...
    • les CopyRect...j'ai essayé de remplacé par DrawBitMap...


    Vers FMX, le code LCL n'est portable qu'au prix d'une réécriture pratiquement complète des méthodes... et je n'ai pas abouti : je n'ai plus d'erreurs mais le résultat n'est pas là. En VCL cela ne semble guère mieux. Je dis semble parce que sous XE4 dans les 2 cas, j'ai des déclarations d'erreurs. J'ai remis le code le plus simple (ie le plus réduit) que j'avais créé en phase d'élaboration de mon composant. Vous avez ici la dernière version compatible Windows uniquement [je n'ai retrouvé que d'anciennes versions. Aussi ai-je dû le remettre au goût du jour dans la journée].

    Voici le code en Lazarus
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
      StdCtrls;
     
    type
     
      { TForm1 }
      TForm1 = class(TForm)
        Button1: TButton;
        Image1: TImage;
        Image2: TImage;
        procedure Button1Click(Sender: TObject);
     
      private
        { private declarations }
      public
        { public declarations }
        procedure aTraiterWH(sBitMap : TBitMap; dCanvas : TCanvas; aHeight,
                  aWidth : Integer; TraitG, TraitD, TraitH, TraitB : integer);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.aTraiterWH(sBitMap : TBitMap; dCanvas : TCanvas; aHeight,
              aWidth : Integer; TraitG, TraitD, TraitH, TraitB : integer);
    {Les TraitX sont comptés à partir des coins}
    var
      {Position des traits : Rappel HG -> (0,0)}
      sPixG, sPixD, sPixH, sPixB : integer;
      dPixG, dPixD, dPixH, dPixB : integer;
     
      {Délimitations des rectangles}
      sRectGH, sRectDH ,sRectGB, sRectDB, sRectH, sRectB, sRectG, sRectD, sRectC : TRect;
      dRectGH, dRectDH ,dRectGB, dRectDB, dRectH, dRectB, dRectG, dRectD, dRectC : TRect;
     
      {Variables Tmp}
      sCanvas : TCanvas;
     
    begin
      {Le canevas source}
       sCanvas := sBitMap.Canvas;
       sPixG   := TraitG -1;
       sPixD   := sCanvas.Width -TraitD;
       sPixH   := TraitH -1;
       sPixB   := sCanvas.height -TraitB;
     
       {Les Rects}
       with sCanvas do begin
         {Les coins}
         sRectGH := Rect(0, 0, sPixG , sPixH);
         sRectDH := Rect(sPixD, 0, Width, sPixH);
         sRectGB := Rect(0, sPixB, sPixG, Height);
         sRectDB := Rect(sPixD, sPixB, Width, Height);
         {Les bords}
         sRectH := Rect(sPixG, 0, sPixD, sPixH);
         sRectB := Rect(sPixG, sPixB, sPixD, Height);
         sRectG := Rect(0, sPixH, sPixG, sPixB);
         sRectD := Rect(sPixD, sPixH, Width, sPixB);
         {Le centre}
         sRectC := Rect(sPixG, sPixH, sPixD, sPixB);
       end;
     
       {Le canevas destination}
       dCanvas.Rectangle(0, 0 , aWidth, aHeight);
       dPixG   := TraitG -1;
       dPixD   := dCanvas.Width -TraitD;
       dpixH   := TraitH -1;
       dPixB   := dCanvas.height -TraitB;
     
       {Les Rects}
       with dCanvas do begin
         {Les coins}
         dRectGH := Rect(0, 0, dPixG , dPixH);
         dRectDH := Rect(dPixD, 0, Width, dPixH);
         dRectGB := Rect(0, dPixB, dPixG, Height);
         dRectDB := Rect(dPixD, dPixB, Width, Height);
         {Les bords}
         dRectH := Rect(dPixG, 0, dPixD, dPixH);
         dRectB := Rect(dPixG, dPixB, dPixD, Height);
         dRectG := Rect(0, dPixH, dPixG, dPixB);
         dRectD := Rect(dPixD, dPixH, Width, dPixB);
         {Le centre}
         dRectC := Rect(dPixG, dPixH, dPixD, dPixB);
       end;
     
       {L'affectation au canevas de destination}
       with dCanvas do begin
         CopyRect(dRectGH, sCanvas, sRectGH );
         CopyRect(dRectDH, sCanvas, sRectDH);
         CopyRect(dRectGB, sCanvas, sRectGB);
         CopyRect(dRectDB, sCanvas, sRectDB);
         CopyRect(dRectH, sCanvas, sRectH);
         CopyRect(dRectB, sCanvas, sRectB);
         CopyRect(dRectG, sCanvas, sRectG);
         CopyRect(dRectD, sCanvas, sRectD);
         CopyRect(dRectC, sCanvas, sRectC);
       end;
     
    {2 problèmes :
       Réaffectation obligatoire png ? Observation : il faut appeler plusieurs fois
       la procedure si on utilise un png. Pourquoi ? Sinon la réaffectation utilisée
       suffit. Autre méthode ?
       Chevauchement des Rects ou copyRect. Normalement :
       with sCanvas do begin
         //Les coins
         sRectGH := Rect(0, 0, sPixG , sPixH);
         sRectDH := Rect(sPixD, 0, Width -1, sPixH);
         sRectGB := Rect(0, sPixB, sPixB, Height -1);
         sRectDB := Rect(sPixD, sPixB, Width -1, Height -1);
         //Les bords
         sRectH := Rect(sPixG +1, 0, sPixD -1, sPixH);
         sRectB := Rect(sPixG +1, sPixH, spixD -1, Height-1);
         sRectG := Rect(0, sPixH+1, sPixG, sPixB -1);
         sRectD := Rect(sPixD, sPixH +1, Width -1, SPixB -1);
         //Le centre
         sRectC := Rect(sPixG +1, sPixH +1, sPixD -1, sPixB -1);
       end;
       Idem pou D or chevauchement incomplet. cause ? remède ?
       }
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       aTraiterWH(Image1.Picture.Bitmap, Image2.Canvas , Image2.Height, Image2.Width, 4, 4, 4, 4);
    end;
     
    end.
    Le but était de partir d'une image1 et d'adapter son contenu à la taille de l'image2 sans changer la taille des bords (ici j'ai choisi un cadre de 4 pixels)... d'analyser le fonctionnement, de repérer les (premiers) problèmes.

    Voici le résultat. L'image1 fait 80*24 et l'image2 320*96. Le code est volontairement simple, ne fait appel qu'à la LCL de base. Il ne fonctionne qu'avec les images bmp... Il a fallu le compliquer un peu ensuite notamment pour faire une approche compatible Linux.

    Je vous montre ce que Lazarus fait en Nux (et Windows). Je n'ai pas installé mon paquet sur mon "mini Mac". Je n'en suis pas là encore. [Pour être précis, j'ai porté plusieurs parties du code mais pas tout le composant... et je préfére développer sous Nux et Win, les environnements me sont plus naturels, question d'habitude évidemment.]. Un bouton 5 états à la Windev : je ne l'ai pas terminé car il me convient comme il est... Dès que j'ai le temps ou que le défi est lancé... je m'y recolle.

    Ici une Ubuntu 12.04.2 64 bits installée cette semaine. Vous voyez rien "d'antique" ni de "rudimentaire"... et largement à la hauteur de FMX sous Windows. Vous comprendrez peut-être mieux mon exigence... dans la mesure où c'est un développement sans API, exactement dans la lignée d'un codage Delphi 7 (pas de style, ni de livetruc..., instructions usuelles et basiques), et que cela pilote directement les Widgets natifs de l'OS... Seul vrai problème actuellement, la gestion de la transparence sous Nux des gifs et png sur l'image du dessus (Glyph)... à cause de mon manque de compétence. Le code est stable puisque le composant a été créé le 121128-05... ce qui compte-tenu des patchs quotidiens de Lazarus et de l'enchaînement des versions aussi bien de l'IDE que de FPC, démontre que le produit (Laz/FPC) est opérationnel. Donc je prétends (si, si) que Delphi peut faire aussi bien et doit faire aussi simple. Je rappelle quand même que Lazarus est issu de Dephi ! Faut pas pousser ! C'est vrai que FMX n'est pas d'origine Borland, ni autant que je m'en souvienne, un travail d'élaboration interne à Embarcadero, mais l'adaptation d'une bibliothèque tierce existante... Ceci explique sans doute cela et par conséquent, on ne me fera pas croire à l'excellence de l'approche actuelle quelque soit la qualité de la publicité déployée et l'engouement probablement réel des promoteurs de FMX.

    Andnotor, je sais, c'est encore plus long que d'habitude... Mais vous avez fait l'effort de me transmettre un exemple de votre code. En réciprocité, je vous fais part d'une partie de mon approche. Mais pas plus que je ne sais coder en 10 lignes, je ne sais m'exprimer de la même façon...

    Je me sauve de ce forum dédié à FMX alors que je vous "bassine" avec Lazarus... mais il est bon des fois de voir ailleurs et surtout autrement. A bientôt.
    Cordialement. Gilles
    Images attachées Images attachées    
    Dernière modification par Invité ; 12/05/2013 à 15h55. Motif: Nombreux bricolages pour remettre (reconstituer) un vieux code de "faisabilité" donc non finalisé. C'est plus présentable ainsi.

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/05/2008, 02h06
  2. Comment deplacer les objets sur JBuilder?
    Par awane dans le forum JBuilder
    Réponses: 3
    Dernier message: 08/07/2006, 18h23
  3. Comment lister les objets d'Active Directory ?
    Par fbalien dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/01/2006, 19h59
  4. [gcc/ld] comment "zapper" les objets non référéren
    Par jula dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 05/01/2006, 15h15
  5. [JVM]Comment obtenir les objets en mémoire ?
    Par ZeKiD dans le forum Général Java
    Réponses: 6
    Dernier message: 15/12/2005, 08h59

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