Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2342 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Raw coding

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Raw coding

n°964812
Inekman
Posté le 28-01-2005 à 16:54:14  profilanswer
 

Salut les amis,
 
voilà quelques semaines maintenant que j'essaye de faire des tout petits programme avec Delphi. A part virer les fichiers requis inclue dans l'exécutable je n'avais trouvé aucun moyen de réduire considérablement la taille des exe généré en Delphi. Par contre c'est relou parce qu'à l'exécution il demande tout plein de fichier et ça le fait pas.
 
J'ai trouvé quelques programmes fait en Delphi uniquement à l'aide de l'API Win32 et on appelle ça "Raw coding" ou "Non-VCL" :p...mais bon, pour moi qui ai fait du Delphi depuis bientôt 3 ans c'est inbuvable :'(
 
Connaissez-vous des sites (FR ou UK) où je peux apprendre "facilement" à coder à l'aide de l'api Win32 exclusivement, sans la VCL :hello:  
 
Merki :jap:

mood
Publicité
Posté le 28-01-2005 à 16:54:14  profilanswer
 

n°964966
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-01-2005 à 20:13:01  profilanswer
 

[:msdn]


---------------
J'ai un string dans l'array (Paris Hilton)
n°964985
Inekman
Posté le 28-01-2005 à 20:52:49  profilanswer
 

Tout à fait. D'où l'intérêt de demander de l'aide sur un forum :p

n°965003
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-01-2005 à 21:16:29  profilanswer
 

bon je voulais pas, mais je te sors ce site :
http://win32assembly.online.fr/
c'est un site qui traite de la programmation Win32 en assembleur. meme si le langage est différent, les fonctions et la méthodologie sont les mêmes
 
edit: c'est de mieux en mieux les liens [:heink]


Message édité par Harkonnen le 28-01-2005 à 21:16:57

---------------
J'ai un string dans l'array (Paris Hilton)
n°965267
Inekman
Posté le 29-01-2005 à 02:30:02  profilanswer
 

Merci beaucoup Harkonnen de proposer ce lien. Si tu as déjà pratiqué ce genre de truc, j'aimerai te montrer le petit bout de code que j'ai fait pour récupérer du texte dans une zone de texte sur un clique de bouton. Tu me dira si je procède bien comme il faut ;-)
 
En tout cas, merci beaucoup pour tes réponses même si j'aurai pu me démerder d'une simple recherche googlé :p mais je persiste à croire que l'entraide sur des forums reste l'idéal ;-)
 
bonui.


Message édité par Inekman le 29-01-2005 à 02:30:40
n°965337
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-01-2005 à 12:13:42  profilanswer
 

C'est si grave que l'exe fasse 400 Ko ?
 
Tu peux jeter un coup d'œil à ceci : http://bonanzas.rinet.ru/


Message édité par antp le 29-01-2005 à 12:13:52

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°965344
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-01-2005 à 12:51:40  profilanswer
 

inekman a écrit :

Merci beaucoup Harkonnen de proposer ce lien. Si tu as déjà pratiqué ce genre de truc, j'aimerai te montrer le petit bout de code que j'ai fait pour récupérer du texte dans une zone de texte sur un clique de bouton. Tu me dira si je procède bien comme il faut ;-)


fais péter le code :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°965354
Inekman
Posté le 29-01-2005 à 13:23:24  profilanswer
 

Non non antp, c'est pas si grave, mais j'ai envi d'apprendre de nouveaux trucs, changer complètement le paysage de Delphi en découvrant une autre approche de la programmation ;-)
 
 
Harko, voilà ce que j'ai réussi à faire seul :) Mais y'a un truc qui me plait pas, c'est le tableau de char. On peut pas utiliser simplement un string ?
 

Code :
  1. program Test2;
  2. uses windows, messages;
  3. {$R main.res}
  4. const
  5.     ednom = 100;
  6.     btOK = 101;
  7. var
  8.     hdlg: DWORD = 0;
  9. function dlgfunc(hwnd: hwnd; umsg: dword; wparam: wparam; lparam: lparam): bool; stdcall;
  10. var
  11.     s: array[0..MAX_PATH] of char;
  12. begin
  13.     result := true;
  14.     case umsg of
  15.         WM_CLOSE:
  16.             EndDialog(hWnd, 0);
  17.         WM_DESTROY:
  18.             PostQuitMessage(0);
  19.         WM_COMMAND:
  20.             if hiword(wparam) = BN_CLICKED then
  21.                 begin
  22.                     case loword(wparam) of
  23.                         btOK:
  24.                             begin
  25.                                 GetDlgItemText(hwnd, ednom, s, sizeof(s));
  26.                                 MessageBox(hwnd, s, 'yop', MB_ICONINFORMATION);
  27.                                 sendmessage(hwnd, WM_CLOSE, 0, 0);
  28.                             end;
  29.                     end;
  30.                 end;
  31.         WM_LBUTTONDOWN:
  32.             begin
  33.                 ReleaseCapture();
  34.                 SendMessage(hwnd, $A1, 2, 0);
  35.             end;
  36.         else
  37.             result := false;
  38.     end;
  39. end;
  40. begin
  41.     hdlg := DialogBoxParam(HInstance, 'XTM', 0, @DlgFunc, 0);
  42. end.


Message édité par Inekman le 29-01-2005 à 13:24:16
n°965432
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-01-2005 à 16:52:48  profilanswer
 

inekman a écrit :

Non non antp, c'est pas si grave, mais j'ai envi d'apprendre de nouveaux trucs, changer complètement le paysage de Delphi en découvrant une autre approche de la programmation ;-)
 
 
Harko, voilà ce que j'ai réussi à faire seul :) Mais y'a un truc qui me plait pas, c'est le tableau de char. On peut pas utiliser simplement un string ?


ça a pas l'air mal, juste un petit mot sur la différence entre SendMessage() et PostMessage() :
- SendMessage() est bloquant, c'est à dire qu'il agit comme un appel de fonction. en d'autres termes, l'exécution de ton programme se bloque, et ne reprend qu'une fois le message envoyé traité par la pompe à message.
- PostMessage() est non bloquant. Il poste le message dans la file d'attente, et se termine aussitot, sans attendre le traitement du message. A noter que l'emploi de cette fonction ne garantit pas le traitement du message par la pompe à messages


---------------
J'ai un string dans l'array (Paris Hilton)
n°965453
Inekman
Posté le 29-01-2005 à 17:35:42  profilanswer
 

Yes merci pour l'info Harkonnen ;-)
 
Je viens de réussir à écrire le contenu de 2 zones de texte similaires dans une structure que j'ai ensuite enregistré dans un fichier grâce à CreateFile. J'ai même réussi à ouvrir le fichier créé et charger le contenu dans la structure et le réafficher à l'écran ! Chui trop content, ça pète :p
 
J'ai fait d'autre test tout à l'heure à propos de charger un bitmap en ressource sur la surface de la fenêtre, mais y'a un truc pas po du tout c'est que les label sont dans un cadre gris tout pourri. Dans Delphi on peut cocher la case "Transparent" pour que le fond du label soit transparent mais avec les api je sais pas quoi utiliser, t'as une idée ?
 
Merci pour tout Harko et Antp, ça me fait plaisir ;)

mood
Publicité
Posté le 29-01-2005 à 17:35:42  profilanswer
 

n°965499
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-01-2005 à 18:59:13  profilanswer
 

inekman a écrit :


J'ai fait d'autre test tout à l'heure à propos de charger un bitmap en ressource sur la surface de la fenêtre, mais y'a un truc pas po du tout c'est que les label sont dans un cadre gris tout pourri. Dans Delphi on peut cocher la case "Transparent" pour que le fond du label soit transparent mais avec les api je sais pas quoi utiliser, t'as une idée ?


C'est un peu plus complexe.... Je sais pas si ce que je vais t'expliquer marchera dans Delphi, vu que le controle utilisé est un TLabel, et non un Static, mais bon...
 
En Win32, un label est appelé un "Static". En fait, le TLabel de Delphi encapsule le controle "static" de Win32.
 
Lorsqu'un static est sur le point d'être dessiné par sa fenêtre mère (celle qui contient le static), il envoie un message WM_CTLCOLORSTATIC à ladite fenêtre. Pour spécifier le texte et la couleur de fond du static, la fenêtre doit répondre à ce message. Elle pourra ainsi utiliser le device context du static pour modifier le texte ou la couleur de fond.
 
Ce message contient dans ses paramètres wParam et lParam, respectivement le handle du device context du static, et le handle du static lui même.
 
Ce qu'il faut donc faire : dans la pompe à messages de la fenêtre mère, réagir au message WM_CTLCOLORSTATIC, récupérer le device context via wParam, puis utiliser les fonctions de GDI pour modifier l'apparence du static.
En l'occurence ici, on utilisera la fonction SetBkMode() pour indiquer que le static doit être transparent (en C) :  
 

Code :
  1. case WM_CTLCOLORSTATIC:
  2.    SetBkMode(wparam,TRANSPARENT);
  3.    return (LRESULT)GetStockObject(NULL_BRUSH); // pour rétablir une brosse par défaut (modifiée par le SetBkMode();


               


---------------
J'ai un string dans l'array (Paris Hilton)
n°965540
Inekman
Posté le 29-01-2005 à 19:48:38  profilanswer
 

ah ben j'avais trouvé cet api dans MSDN juste après avoir posté mon message mais j'ai pas réussi à l'utiliser. Je l'avais placé dans WM_PAINT :-)
 
D'ailleurs, j'utilise pas un TLabel pour mon étiquette car je créé la fiche par DialogBoxParam directement depuis un fichier de ressource que voici :
 

Code :
  1. XTM DIALOGEX 0, 0, 193, 186
  2. STYLE DS_SETFOREGROUND | DS_CENTER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU
  3. EXSTYLE WS_EX_WINDOWEDGE | WS_EX_APPWINDOW
  4. CAPTION "X-EXE"
  5. LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
  6. FONT 8, "VERDANA"
  7. {
  8.    CONTROL "Nom :", 0, STATIC, SS_SIMPLE , 5, 7, 20, 10
  9.    CONTROL "", 101, EDIT, ES_LEFT 43, 6, 82, 12 , 0x00020000
  10.    CONTROL "Prénom :", 0, STATIC, SS_SIMPLE, 5, 28, 33, 10
  11.    CONTROL "", 102, EDIT, ES_LEFT, 43, 26, 82, 12 , 0x00020000
  12.    CONTROL "AFFICHER", 100, BUTTON, BS_PUSHBUTTON, 131, 8, 48, 25 , 0x00020200
  13.    CONTROL "ECRIRE", 103, BUTTON, BS_PUSHBUTTON, 42, 50, 40, 17 , 0x00020200
  14.    CONTROL "LIRE", 104, BUTTON, BS_PUSHBUTTON, 87, 50, 39, 17 , 0x00020200
  15.    CONTROL "Taille :", 106, STATIC,5, 96, 183, 10
  16.    CONTROL "Lire XTM", 105, BUTTON, BS_PUSHBUTTON, 5, 135, 60, 15 , 0x00020200
  17. }


 
C'est un peu le bazar là dedans mais bon, je tatonne encore :-p
 
Merci pour l'astuce Harko, je prend note.


Message édité par Inekman le 13-02-2005 à 15:20:44
n°965564
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-01-2005 à 20:25:23  profilanswer
 

Harkonnen a écrit :

En fait, le TLabel de Delphi encapsule le controle "static" de Win32.


Non, le TLabel est juste peint sur son parent (il n'a pas de handle)
C'est le TStaticLabel (si ma mémoire est bonne) qui encapsule le Static de Win32.


Message édité par antp le 29-01-2005 à 20:25:39

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°965668
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-01-2005 à 22:45:29  profilanswer
 

antp a écrit :

Non, le TLabel est juste peint sur son parent (il n'a pas de handle)
C'est le TStaticLabel (si ma mémoire est bonne) qui encapsule le Static de Win32.


ok, au temps pour moi :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°965670
Inekman
Posté le 29-01-2005 à 22:48:36  profilanswer
 

Tant qu'on est dans une phase de correction, on dit "autant pour moi"
 
voilou, et au fait Harko, Big merci pour le bidule de transparence des Static, cha marche :-D Inek is happy

n°965671
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-01-2005 à 22:51:29  profilanswer
 

inekman a écrit :

Tant qu'on est dans une phase de correction, on dit "autant pour moi"


euh non... moi aussi je pensais ça, mais on m'a prouvé par a+b que j'avais tort :whistle:
http://www.academie-francaise.fr/l [...] l#au_temps
 

inekman a écrit :


voilou, et au fait Harko, Big merci pour le bidule de transparence des Static, cha marche :-D Inek is happy


:jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°965685
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-01-2005 à 23:30:30  profilanswer
 

inekman a écrit :

Tant qu'on est dans une phase de correction, on dit "autant pour moi"


 
Pas dans le même contexte :o
 
- je veux 2 BigMac et 3 grandes frites
- autant pour moi, j'ai aussi très faim
 
[:dawa]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°965689
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-01-2005 à 23:33:06  profilanswer
 

antp a écrit :

Pas dans le même contexte :o
 
- je veux 2 BigMac et 3 grandes frites
- autant pour moi, j'ai aussi très faim
 
[:dawa]


t'as pas les boules ? je viens de résoudre un topic Delphi :o
ton hégémonie sur cette cat touche à sa fin, la relève est là [:volta]


---------------
J'ai un string dans l'array (Paris Hilton)
n°965764
Inekman
Posté le 30-01-2005 à 09:27:37  profilanswer
 

Harkonnen a écrit :

euh non... moi aussi je pensais ça, mais on m'a prouvé par a+b que j'avais tort :whistle:
http://www.academie-francaise.fr/l [...] l#au_temps
 
:jap:


 
Le délire :??: j'ai appris un autre truc didon là :)  
 
Et tu viens de me donner envie de te (ou antp :hello:) poser une nouvelle question :p  
 
Dans Delphi, quand on code avec la VCL, on peut changer la police (famille, couleur, taille) de n'importe quelle composant mais là une fois que j'ai défini "FONT 8 VERDANA", tous les compo ont la même tête et je me demande c'est où qu'on peut changer individuellement la police des compo [:airforceone]  
 
je me demande si je dois pas regarder du côté de CreateFont mais bon, c'est très hasardeux comme recherche :)


Message édité par Inekman le 30-01-2005 à 09:28:04

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Raw coding

 

Sujets relatifs
Socket RAW (C aussi !)pb d'arg avec ioctl pour une rs232 en mode RAW
[Python] charset, coding, accents et page htmlinscription de la coding party pour tout le monde
-->> Coding pour half-life -->> on a besoin de vous <<--*-Coding pour half-life-*
Plus de sujets relatifs à : Raw coding


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)