|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
Bonjour,
Voici un exemple de création d'une fenêtre MacOSX avec instanciation des objets NSApplication, NSWindow et création des classes TApplicationDelegate et TWindowDelegate qui reçoivent les événements des deux précédents. Il faut savoir que Objective-C est une surcouche à C qui se contente de faire les appels que j'ai mis ici sous Delphi XE2, c'est donc plus verveux sous Delphi XE2 mais au final c'est la même chose. Le coeur du système est la fonction objc_msgSend qui permet d'invoquer la méthode d'un object. L'objet peut être une classe (objc_getClass) et dans ce cas on a une méthode de classe, ou une instance obtenue par un objc_msgSend justement. En Objective-C le code objc_msgSend(objc_getClass('NSObject'), sel_getUid('alloc')) s'écrira tout simplement [NSObject alloc]; de même l'appel d'init se fera dans la foulée [[NSObject alloc] init]. Notez cependant que Objective-C utilise des fichiers NIB qui sont l'équivalent des DFM de Delphi, donc généralement l'approche est tout de même différente. Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||
|
10
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Développeur C++\Delphi Inscription : juillet 2006 Messages : 9 195 ![]() |
C'est un programme CONSOLE ?
Je ne savais pas que l'on pouvait faire de la Console MAC sous Delphi XE2, faut dire que je n'a pas du tout exploré ça ! C'est un projet FMX ? je suppose avec la plateforme MacOS ? Comme ton code utilise juste le minimum de la RTL (le namespace System inclu par défaut), ton programme n'inclu pas les 8Mo de FMX ? Intéressant, c'est un peu brutale comme méthode mais cela montre les bases sous MacOS en Delphi comme on le faisait en Borland C++5.0 à coup de CreateWindow J'avoue ne pas être aller très loin dans le bouquin (acheté en occaz) "Borland C++ Version 5. Programmation Windows 95" de Gérard Leblanc vu que je en même temps découvrais Delphi 4 et les facilités du RAD ! Merci Paul ! ![]() FMX c'est une bonne idée, mais je le mode full graphique, c'est peut-être un peu lourd, En tant que PRO, j'ai préféré un mode avec un système de Render que l'on pourrait changer à volonté des Render FMX très graphiques mais aussi des Render plus léger basé sur les Contrôles Windows ou Apple comme à l'époque de VCL\CLX ! Après tout un TButton c'est un juste un concept : une zone en relief avec texte clickable Les options graphiques communes sont mise dans TButtonRenderAbstract et implémenté par un Render selon OS et Options souhaités TButtonRenderWin, TButtonRenderCocoa, TButtonRenderFMX Idem, la gestion de la Souris, OnMouseMove, OnMouseEnter ... tout ça on le sépare dans un TButtonMouseControllerAbstract ... en fonction des possibilités de l'OS, on offre plus ou moins de possibilité Evidemment tout cela encapsulé pour ne pas effrayer l'utilisateur ! Dans l'inspecteur on aurait eu des sous rubriques + Win + Mac, un peu comme le gestionnaire de config ! FMX lui offre le minimum commun, du coup, on perd des trucs possibles en Windows parce qu'ils ne l'ont pas codé en Apple ! ![]() Et dans la DFM, on aurait pu définir pour chaque Render les options spécifiques de chacun (Image, Couleur de Font, ...) pour avoir le meilleur résultat que possible dans chaque variante ! Un tel système plus souple aurait été une meilleure façon d'intégrer des composants externes comme TMS ou DevExpress ! Je pense au Smooth de TMS, quelle corvée lorsque l'on veut passer des anciens composants TMS au composants Smooth TMS, il faut ajouter les uns, supprimer les autres, se retaper toute la config, changer le code qui n'est plus compatible... Du coup Paul, tu vas te lancer un Défi et nous faire ta propre VCL Cross-Plateforme comme tu l'avais déjà fait ? Perso, pour un projet Web (une sorte de XML Rad), j'ai appliqué le MVC à différent niveaux (on peut considérer qu'un export de DB, c'est juste une Vue, suffit donc de faire autant de Vue que de format exportable) en PHP, j'ai refait une sorte de TClientDataSet (et tout ce qui va avec) avec des "vues" permettant son remplissage ou exportation en via CSV, XML, JSON mais via ZendDB Dans le code c'est des Factory qui font le boulot pour instancier les bonnes classes Si l'on applique le principe du MVC au TButton, on le découpe en plus petit élément, le Render étant la Vue, la Souris\Clavier son contrôleur ...
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y ! Attention Troll Méchant ! ![]() "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer ! L'ignorance n'excuse pas la médiocrité ! L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde) Il faut avoir le courage de se tromper et d'apprendre de ses erreurs Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié ! |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
Hello,
non ce n'est pas FMX, c'est du Cocoa, l'appli compilé en mode release fait 70Ko (mais il faut ajouter libcgunwind dont je ne sais pas s'il est possible de se séparer). Firemonkey utilise cette API pour construire les fenêtre sous MacOSX en y ajoutant un contexte OpenGL. Par contre en FMX c'est invoqué via un système assez complexe qui mappe les Interface Delphi vers l'API ci-dessus. L'avantage c'est qu'il suffit de définir une Interface pour que Delphi produise grâce aux RTTI les bons appels à l'OS, mais c'est assez lourd je trouve. et oui il y a derrière cela une idée à la LightVCL Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Développeur C++\Delphi Inscription : juillet 2006 Messages : 9 195 ![]() |
Citation:
Framework cible : aucun Ajout Plateforme : OS X OK ! Je n'avais jamais essayé en passant par une appli console (j'en fait jamais) Après comment gères-tu les Forms ? installes-tu tes composants comme Package de Conception et tu utilises le RAD pour construire une TCrossForm avec je suppose des TCrossEdit, TCrossButton ... ? Le système par interface à l'avantage d'être souple, évite un maximum de directive mais je préfère un système de classe abstraite avec une Registry\Factory (comme le TJPEGImage par exemple) Il n'y au final que l'appel aux Registry qui est soumis au directive, à l'exécution c'est plus rapide, il n'a que la VMT à gérer sans passer par les QueryInterface de MS ou système équivalent pour Mac Je suis convaincu que d'autres seraient intéressé par ta nouvelle LightVCL car un peu rebuté par la lourdeur apparente de FMX ! Moi, c'est plus la partie développement sur laquelle je suis curieux mais j'ai pas le temps (et pas de Mac
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y ! Attention Troll Méchant ! ![]() "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer ! L'ignorance n'excuse pas la médiocrité ! L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde) Il faut avoir le courage de se tromper et d'apprendre de ses erreurs Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié ! |
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
pour l'instant pas de conception visuel...mais pour l'instant j'ai pas grand chose de toute façon
l'idée serait d'utiliser RegisterCustomModule pour créer un éditeur de fiche spécifique...ou de trouver un moyen pour limité TForm aux seuls propriétés de CrossControls. L'autre solution est d'avoir des propriétés bidons dans CrossControls.TForm qui permettent de partir du TForm de la Vcl (et donc de recompiler directement un project VCL comme avec LighVCL) Dans l'exemple j'exploite la capacité de Delphi à compiler un DFM texte que je tape à la main et je charge les propriétés avec InitInheritedComponent. Le but serait d'avoir comme avec LightVCL de quoi faire un écran avec TButton, TListBox, TEdit, TPanel, TImage histoire de faire une fenêtre de paramétrage, saisie de mot de passe etc...puis la possibilité d'avoir un contexte OpenGL qui soit le même dans les 2 OS.
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
|
|
#6 | |||||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
c'est quoi bazar ?!
Code :
0,0,0,0 => 0,0,0,0 1,0,0,0 => 0,1,0,0 0,1,0,0 => 0,0,0,1 0,0,1,0 => 0,0,0,0 du coup on pourrait penser qu'il y a un décalage...mais 0.25,0,0,0, => 0,1,0,0 !!! je n'y comprend rien EDIT: j'ai trouvé, mais je ne comprend pas la logique, il faut appeler objc_msgSend_fpret pour créer le NSColor ?! c'est supposé être utilisé pour retourner des floats, pas des objets... EDIT: PAS DU TOUT ! c'est un des tests que j'avais fait mais non, en fait le problème doit venir du "varargs" ... si je surcharge la déclaration de la fonction ça fonctionne: Code :
Citation:
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|||||
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
pfiou ! pas simple de faire une VCL pour Mac, là j'ai des problèmes de position du texte dans les contrôles...
crossdemo.jpg
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
|
|
#8 |
![]() ![]() Yves LemaireBiologiste ; Progr(amateur) Inscription : mars 2005 Messages : 1 684 ![]() |
Si c'est bien pour le même challenge, pas simples non plus les designers de fiches ?
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits |
|
|
00
|
|
|
#9 | |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
Citation:
pour l'instant je laisse tomber le designer, il n'y a pas assez d'information sur le sujet pour s'en sortir...et c'est bien dommage car ils ont forcément prévu le cas pour Firemonkey, l'IDE est donc prêt à gérer des custom designer, il ne manque que l'information ou - à minima - les sources de ce qui a éta fait pour les FMX.
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 420 ![]() |
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
Copyright © 2000-2013 - www.developpez.com