Raw coding

Raw coding - Delphi/Pascal - Programmation

Marsh Posté le 28-01-2005 à 16:54:14    

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:

Reply

Marsh Posté le 28-01-2005 à 16:54:14   

Reply

Marsh Posté le 28-01-2005 à 20:13:01    

[:msdn]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 28-01-2005 à 20:52:49    

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

Reply

Marsh Posté le 28-01-2005 à 21:16:29    

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

Marsh Posté le 29-01-2005 à 02:30:02    

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
Reply

Marsh Posté le 29-01-2005 à 12:13:42    

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
Reply

Marsh Posté le 29-01-2005 à 12:51:40    

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

Marsh Posté le 29-01-2005 à 13:23:24    

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
Reply

Marsh Posté le 29-01-2005 à 16:52:48    

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

Marsh Posté le 29-01-2005 à 17:35:42    

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

Reply

Marsh Posté le 29-01-2005 à 17:35:42   

Reply

Marsh Posté le 29-01-2005 à 18:59:13    

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

Marsh Posté le 29-01-2005 à 19:48:38    

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
Reply

Marsh Posté le 29-01-2005 à 20:25:23    

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
Reply

Marsh Posté le 29-01-2005 à 22:45:29    

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

Marsh Posté le 29-01-2005 à 22:48:36    

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

Reply

Marsh Posté le 29-01-2005 à 22:51:29    

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

Marsh Posté le 29-01-2005 à 23:30:30    

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
Reply

Marsh Posté le 29-01-2005 à 23:33:06    

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

Marsh Posté le 30-01-2005 à 09:27:37    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed