SFCDELPHILITE(AVEC CETTE LIBRAIRIE VOUS POUVEZ CRÉER UNE APPLICATION WINDOWS AVE

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 1 mai 2006 à 23:09
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012 - 7 mars 2012 à 17:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37354-sfcdelphilite-avec-cette-librairie-vous-pouvez-creer-une-application-windows-avec-seulement-quelques-kilo-octets

cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
7 mars 2012 à 17:10
Salut,
mdr oui effectivement ce projet a pris de la poussière !!!
il faut dire que partant de cette base je me suis dit pourquoi pas se lancer dans un compilateur pascal objet(en cours),
sinon je vais quand même publié l'ancienne mise à jour pour ceux qui sont curieux de voir comment marche le Schmilblick, euhh de tête il est possible de lire directement le flux depuis le ressource de l'exécutable, autrement dit plus besoin de faire des créations dynamiques des objets, de plus la fiche est personnalisée, en peut créé une application DelphiLite depuis l'onglet "nouveau", enfin bref je poste ça dès que possible
et encore pardon pour le retard(collossal).
@+
maxgwen Messages postés 6 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 29 février 2008
10 avril 2010 à 03:14
Bonjour je revient sur un vieux sujet mais ou est passé la dernière mise a jour du 06/12/2006 avec FormDesigner etc....

Merci pour toute réponse
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
6 déc. 2006 à 13:06
Salut et merci RT15 pour ces précisions,

En effet mettre le Callback de windows dans une classe de type Object ce n'est pas chose aisé, parfois on est obliger de passer par l'assembleur !!!, bon effectivement j'ai choisis une méthode à la Conan le Barbare lol, mais c'était où ça ou 50 lignes de code asm pour ce qui revient presque à la même chose !!!, sauf que l'options lourde en asm va légèrement faire perdre du temps car n'oublions pas que à chaque fois qu'un événement aura lieu windows va passer par cette étape afin de rediriger les messages hors il se passe des milliers de messages à la seconde !!!, mais en passant par la méthode lourde en asm on aura l'avantage de créer une seule instance d'un objet et que ce soit avec ma méthode barbare ou la méthode du GWL_USERDATA celà ne résoud hélas en rien ce petit désagrément !!!

pour le moment ce projet est mis de côté par manque de temps mais entre temps une nouvelle mise à jour vient d'être effectuée.
dont voici les caractéristiques:

- Désormais on pourra se servir du FormDesigner de l'IDE pour la mise en forme de notre projet, donc bien plus pratique que de faire soi-même le calcul des coordonnées de tel ou tel objet !!!.

- Un Expert se charge de definir une nouvelle fiche pour le FormDesigner, la nouvelle fiche aura la classe TLForm.

- Un Expert se charge de la création d'un nouveau projet DelphiLite, pour ce faire il suffit de cliquer
sur la barre outils de l'IDE "Nouveau" puis de choisir l'onglet "DELPHI LITE", puis "Application", il en est de même pour l'ajout d'une nouvelle fiche !!!, c'est tout aussi simple que celà

- Un Expert se charge de la reception des événements "Before Compile" et "After Compile", pratique dès que l'on compile un projet, avant même la compilation du projet, l'IDE va lire quelques informations qui seront inscritent dans un fichier portant le même nom que le projet avec une extension différente, en faite des options du projet seront paramètrable depuis l'IDE de delphi au travers du menu Projet->Options avancées, par exemple si le projet qui va être compilé est un projet DelphiLite, il suffit de cocher la case adéquate, on peut aussi ensivager que dans ces options dès la reception de l'événement "After Compile" de détruire les fichiers dcu's du projet, où bien avant la compilation que l'on puisse integré de nouvelles resources, car il est prevu d'ajouter un gestionnaire de resources via un Expert intégré à l'IDE !!!.

Ensuite la partie initialisation des objets sera créer automatiquement par l'Expert, avec la position de l'objet sur la fiche ainsi que toutes les données disponible depuis l'inspecteur d'objet. (hauteur, longueur, couleur ect..)

ça c'était pour les avantages

*** les inconveniants maintenant ***
- Création des objets en dynamique ce qui n'affecte en rien la vitesse d'execution du code mais alourdit un peut plus le poids de l'executable, mais comme il n'ya pas de gestion de mémoire pour le moment(Stream, MemoryStream), donc impossible de créer un gestionnaire de type TReader/TWriter, le compilateur integre les données de la fiche dans l'executable dans la section RC_DATA hors on en a pas besoin pour le moment !!!

- on voulant à tout prix garder une hierarchie des classes semblable à delphi le poids atteint desormais les 44 kilos ce qui reste déja largemement supérieur aux compresseurs d'exe mais avec néamoins le début de la gestion des menus

Bref j'espère avoir été un peu clair(j'ai un doute lol)
la prochaine version sera dispo quand dès que j'aurais le temps de m'y plonger dans le code !!!

@+
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
29 nov. 2006 à 13:37
Salut,

Tout d'abord, bravo pour ce source qui permet des gains en taille impréssionnants.

Je vais juste revenir sur le bricolage des lignes 123 et suivantes de sfcDL_Forms, et proposer une solution (Pas parfaite certe mais, pas nulle non plus je pense).

Déjà, je vais essayer d'expliquer ta solution, pour ceux qui n'auraient pas fait assez d'assembleur pour la saisir.

Windows a besoin d'une CallBack. Autrement dit, de l'adresse d'une fonction à appeler, auquel il donnerat des arguments précis (Des information sur le
message).

Cette fonction serat appelé à chaque clique de bouton nottement.

Côté applicatif, tu dispose d'une instance de bouton par bouton, et dans chacune de ces instances, tu as un pointeur sur la fonction qui doit être executée en
cas de clique sur cette instance de bouton.

Il faut donc que tu fasse le lien entre le message envoyé par windows, et la bonne instance de bouton.

Un autre problème est que ton code est tout en objet, et que tu n'as donc que des méthodes.

Une méthode diffère d'une instance classique (A prototype équivalent) par l'ajout d'un argument implicite tout a fait caché : l'adresse de la structure
(Stockant les attibuts nottement) de l'instance.

En gros :

a.Msg(b);

est compilé

Msg(a, b);

De là, tu sautes sur l'occasion, tu vas ajouter l'adresse de la structure à la volée.

Le code d'ajout de l'adresse, ne peut par définition se trouver que dans la structure de l'objet lui même, du fait qu'il y a une adresse d'instance par
instance.

Ensuite, il suffit de donner l'adresse de cette attribut, contenant le code d'ajout de l'adresse, à windows (Qui l'appelerat sans se poser de question)

Cette attribut appellerat ensuite une méthode prenant les paramètre envoyés par windows, en plus de l'adresse caché.

Le code de l'attribut revient donc à :

1 pop ebx
2 push adresse strucuture
3 push ebx
4 jmp méthode

1 On récupère en fait l'adresse de retour qui serat executé quand la callback aurat fait son taffe.
2 Puis on pousse l'adresse de la structure de l'instance. (Les arguments sont empilé de droite à gauche, l'argument caché etant situé à gauche).
3 On remet en place l'adresse de retour.
4 On se déroute sur la méthode.

Ce code serat executé dans le tas (Dans les structures des différentes instances) à chaque fois que windows enverrat un message.


Cette astuce est manifique, diaboliquement efficace, et vachement bien trouvé.

Néanmoins, elle est pas franchement lisible, et l'execution de code dans le tas est pas super propre.
Sans compter que des protection empèchant l'execution de code dans le tas existent.

Ma proposition de solution, c'est d'utiliser une valeur sur 32 bits laissé au bon vouloir de l'utilisateur dans les données de la fenêtre gérée par windows.
(Je ne parle pas des données supplémentaire, qui seraient chiante à mettre en place car il faudrait recoder les classes BUTTON et companie).
Mais d'utiliser l'attribut GWL_USERDATA.

Il est affectable via SetWindowLong, et récupérable via GetWindowLong.

L'inconvénient est que l'overhead est plus important qu'avec ta méthode. Mais il n'est pas non plus monstrueux.
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
5 mai 2006 à 23:35
voilà une réponse pleine de sagesse et de bon sens ;), en fait une chose assez curieuse..., Je me suis posé la question suivante:
comment la Team de lazarus project ont-ils fait pour faire un clone de Delphi sans le code Source hum ??!!???, je crois avoir la réponse, en faisant la comparaison entre le TList de Delphi et le TList de Lazarus j'ai vu qu'il y avait de très grande similitudes !!!, c'est pratiquement la même chose avec cependant une variante dans l'algo, mais les noms des varriables ect.. c'est identique, donc ce projet est basé sur le code source ça ne fait aucun doute !!!, pour ma part j'ai fait en sorte que la hiérarchie des classes soit identique, pour que plus tard l'on puisse rendre compatible le projet avec les vcl à environt 80%, donc pour le moment on laisse tomber la compatibilité, j'ai ajouter AfterConstructor pour pouvoir initialisé les composants avant la création de la fenêtre, de plus mon projet respect un peu près la même technique d'initialisation des fenêtre c'est à dire

CreateWnd fait appel à CreateParams et ensuite CreateWindowHandle
celà permet la surcharge de CreateParams pour une eventuelle modification de style de la fenêtre(voir l'aide de Delphi), par ailleurs toutes les fenêtres TButton, TEdit ect.. doivent surcharger cette fonction avant la création de la fenêtre donc très pratique pour une customisation !!!, la mise à jour sera prochainement disponible patience ...

bon on a quand même le droit de reprendre les constantes ? TColor , TAlignement ect.. ? je suppose que voui lol

@+
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
4 mai 2006 à 23:25
Shining a écrit : "peut-on mettre du code de Delphi dans un projet OpenSource, j'entends par bout de code delphi, un bout du code source, exemple classes.pas ect.. qui n'est publique que pour les versions entreprise !!!"

Tu es libre de diffuser les applications réalisées et compilées avec Delphi. En revanche, tu n'as pas le droit de diffuser les codes sources qui restent la propriété de Borland. Evidemment, si tu ne diffuses que les .DCU, c'est différent. Mais là, tu vas te heurter à l'incompatibilité avec les compilateurs des versions précédentes.
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
4 mai 2006 à 20:34
Salut et merci pour l'intérêt que vous porter à ce projet !!!,

"Quand la bibliotheque des composant seras aussi fournies
que celle de Delphi , l'application finale ne risque pas
d'etre aussi volumineuse ?" <=== non car le but c'est de ne pas reprendre toutes les fonctions mais seulement celles dont on a le plus besoin !!! un programme Delphi de 1.50Mo fera au alentour de 150kilos en DelphiLite sans compression !!! et sans resources supplémentaires !!! c'est à dire si jamais on rajoute un fichier bitmap de 1Mo dans l'exécutable il est alors évident que l'exe fera 1Mo + xxkilos Octets donc autant prendre la VCL standard,
maintenant il n'ya aucune guarantie quant-à une eventuelle compatibilité avec les VCL's car ceraines VCL font appel à des routines, autre fichiers ect... qui peuvent alourdir le projet, néanmoins avec la nouvelle structure il était possible d'avoir une compatibilité de l'ordre des 40%, et en effet après avoir vu le code source il en resulte que je n'était pas vraiment très loin de la hiérarchisation des classes , cependant les codes sont différents !!!, donc là avec beaucoup de tasses de cafés et en jettant un coup d'oeil de tant en tant sur le code source je vais essayé, je dit bien essayé de mettre en place une compatiblité avec les VCL's standard, mais la publication de bout de codes de Delphi me pose un certain cas de conscience !!!, DelphiProg tu en penses quoi ?? peut-on mettre du code de Delphi dans un projet OpenSource, j'entends par bout de code delphi, un bout du code source, exemple classes.pas ect.. qui n'est publique que pour les versions entreprise !!!
en tout cas à suivre !!!
cs_Idefix57 Messages postés 43 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 25 février 2013
3 mai 2006 à 15:49
ReBonjour , J'ai une question a poser ...

Quand la bibliotheque des composant seras aussi fournies
que celle de Delphi , l'application finale ne risque pas
d'etre aussi volumineuse ?
Deuxiemme Question ...
pourrais t-on inclure comme dans Delphi des biblitheques venant
d'ailleurs ? au format Delphi ou autres languages ?

ps: J'ai fait tourner ton code sous Delphi 2005 , supert :-)
cs_Idefix57 Messages postés 43 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 25 février 2013
3 mai 2006 à 15:12
Bravo pour ce code ,

en effet si y avais plus d'aide j'arriverais peut-etre a comprendre un petit peu :-)

Merci pour tout ce que vous faite et de donner la connaissance ,
qui me permetras surement d'avancer plus loin ...

@+ Idefix
poulinr Messages postés 32 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 6 mai 2006
3 mai 2006 à 07:44
KOl est un ensemble de composants qui remplacent ceux existants de Delphi. Dans la fiche on n'utilise que les classes non graphiques de delphi (classes, windows, shellapi), le reste étant les composants kol. C'est devenu assez évolué, très pratique pour faire des applications très capables mais petite de taille. Mais la présente approche me plait davantage car c'est une naissance :)
Utilisateur anonyme
3 mai 2006 à 03:37
C'est vraiment génial,
comme le dit Francky ça fait beaucoup de code intéressant à étudier en peut de temps.
Mais quel plaisir à découvrir.

En tous cas je prédis que les mises à jours de cette librairie vont être attendues.

Très bien 10/10
Bon courage pour la suite
@+
Cirec
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
2 mai 2006 à 22:19
Excellente source, on ce moment, on est gâté !

Je connaissais pas non plus la lib KOL.
A ce sujet, ça marche comment ?
C'est une librairie qu'on inclue dans les uses, ou c'est un compo special ?

Merci à vous dans tous les cas :)
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
2 mai 2006 à 21:20
- Delphiprog : c'est une très bonne idée, j'ai essayé mais ça coince quelque part...

- poulinr : oui je connais mais le but c'est de ne pas copier sur les autres ...

- Francky23012301: oio effectivement c'et à la suite de ce post.. que je fût inspiré lol, pour la doc il faudra patienter encore un moment car là tout à été refait, la nouvelle structure ressemble au fonctionnement générale de Delphi, ça evite le dépaysement !!!

merci pour votre encouragement et pour les eventuelles suggestions futures

pour ceux qui voudrait apportés leurs contributions, il ne faut surtout pas inclure d'autres unités Delphi dans le projet, telles que SysUtils, Classes, ect.. qui pourrait alourdir l'exe, pour le moment avec Windows & Messages on a déja presque tout ce qu'il faut !!!

@+
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
2 mai 2006 à 09:43
Quel festival en ce moment entre toi et Delphiprog !!!!

Effectivement j'ai posé récemment une question sur le forum car j'étais surpris de la taille d'une application console (je ne suis pas un habitué de ce mode). Cela provenait de l'ajout de composants non visuels. Ta source est géniale dans la mesure ou elle permet de faire des appli windows de petites tailles. A lire absolument car c'est un régal. Cependant un petit PDF pour bien expliqué ferait plaisir si ce n'est pas trop demandé.

Du reste je vais m'y replonger a tete reposée car c'est quand meme hardus. Continu ce projet car le jeu en vaut la chandelle.

Dis donc va falloir s'arreter là Messieurs (3 codes experts) : ca en fait du travail toutes ses lectures. On va plus pouvoir coder si ca continue : LOL.

Je te félicite
poulinr Messages postés 32 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 6 mai 2006
2 mai 2006 à 03:19
C'est bien ! Et pour t'inspirer davantage dans ce projet et ses suites possibles il y a la librairie KOL, tu connais peut-être? La 'Key Objects Library' sur http://bonanzas.rinet.ru/ déjà très évoluée. On arrive à faire très petit: 1,7M avec Delphi seul se résume à tout juste environ 100ko avec Delphi + KOL.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 mai 2006 à 23:09
Trés intéressant tout cela.
Tu aurais quand même pu implémenter le pattern singleton au minimum car rien n'empêche de créer plusieurs objets TApplication. Imagine la suite !...

Voila un projet à suivre de très près.
Félicitations.
Rejoignez-nous