begin process at 2010 03 20 16:49:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > SFCDELPHILITE(AVEC CETTE LIBRAIRIE VOUS POUVEZ CRÉER UNE APPLICATION WINDOWS AVEC SEULEMENT QUELQUES KILO OCTETS !!!)

SFCDELPHILITE(AVEC CETTE LIBRAIRIE VOUS POUVEZ CRÉER UNE APPLICATION WINDOWS AVEC SEULEMENT QUELQUES KILO OCTETS !!!)


 Information sur la source

Note :
9,5 / 10 - par 4 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :smallexe, apiwindows Niveau :Expert Date de création :01/05/2006 Date de mise à jour :02/05/2006 21:10:13 Vu / téléchargé :4 012 / 997

Auteur : shining

Ecrire un message privé
Site perso
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
ce fût une idée que j'avais il ya bien longtemps !!, qui était de créer une Application sans tous ces artifices qui font qu'à la fin on a un exe très volumineux de l'ordre des mega octets !!!, et à la suite d'un sujet du forum la tentation était trop forte lol, donc voici le début d'une librairie qui je l'espère avec votre aide rendra bien des services à sa version finale !!!, regardez plutôt par vous même dans cette exemple on a un exécutable avec un bouton + un edit + TMemo et le tout avec theme XP pour seulement 20 Ko

je me suis un peu inspiré du fonctionnement de delphi , à savoir TApplication (voir le fichier *dpr), mais la comparaison s'arrête là !!! car Delphi fonctionne un peu différemment !!!






 Conclusion

pour le moment bien qu'on peut compiler un projet sous Delphi, il est fortement déconseiller d'ajouter un Edit avec le Designer ;) sous risque d'un poids volumineux !!!, en fait il est prévu plus tard d'un soft qui aura un Form Designer + Inspecteur d'objet !!! où pour les plus courageux de faire un expert qui se chargera d'afficher un FormDesigner ect.. mais je n'ai rien vu de semblable jusqu'à maintenant !!! c'est surement possible !!!

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

02 mai 2006 21:10:13 :
le projet à été complétement restructuré !!!, de nouveaux composants sont disponible tels que les TMemo, TRichEdit, on peut également changer la taille, Position ect..

 Sources du même auteur

Source avec Zip Source avec une capture SHININGDATABASE & VIRTUALDATABASE DEUX COMPOSANTS ORIENTÉS D...
Source avec Zip Source avec une capture FASTGRADIENT (METTEZ DES DÉGRADÉS DE COULEURS DANS VOS APPLI...
Source avec Zip COMPOSANT HASHPROTECTOR (PROTÉGEZ VOS APPLICATIONS CONTRE L...
Source avec Zip Source avec une capture COMPOSANT EMOTICONMANAGER (DONNEZ DE L'EMOTION À VOS APPLICA...
Source avec Zip Source avec une capture COMPOSANT WEBMEMO

 Sources de la même categorie

Source avec Zip NEXTGENS -> UNITÉS DE TYPES ÉVOLUÉS NOUVELLE GÉNÉRATION (DE... par f0xi
Source avec Zip Source avec une capture AUTO-COMPLÉTION D'UN CONTRÔLE DE SAISIE par Bacterius
Source avec Zip CARDS GAME SDK 1.0.0.0 par f0xi
Source avec Zip Source avec une capture TRAYICON - VOTRE ICONE DANS LA BARRE DES TACHES par Bacterius
Source avec Zip Source avec une capture WINHIDER _ CACHER UN PROGRAMME DE L'ÉCRAN ET DE LA BARRE DE ... par soldier8514

Commentaires et avis

Commentaire de Delphiprog le 01/05/2006 23:09:56 administrateur CS

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.

Commentaire de poulinr le 02/05/2006 03:19:41

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.

Commentaire de Francky23012301 le 02/05/2006 09:43:25

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

Commentaire de shining le 02/05/2006 21:20:15

- 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 !!!

@+

Commentaire de John Dogget le 02/05/2006 22:19:06

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 :)

Commentaire de cirec le 03/05/2006 03:37:21 administrateur CS

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

Commentaire de poulinr le 03/05/2006 07:44:51

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 :)  

Commentaire de Idefix57 le 03/05/2006 15:12:09

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

Commentaire de Idefix57 le 03/05/2006 15:49:13

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 :-)

Commentaire de shining le 04/05/2006 20:34:02

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 !!!

Commentaire de Delphiprog le 04/05/2006 23:25:02 administrateur CS

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.

Commentaire de shining le 05/05/2006 23:35:39

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

@+

Commentaire de rt15 le 29/11/2006 13:37:45 administrateur CS

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.

Commentaire de shining le 06/12/2006 13:06:07


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 !!!

@+

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,451 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales