IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

équivalent d'un TEdit (Delphi) en C ?


Sujet :

C

  1. #21
    Invité
    Invité(e)
    Par défaut
    je n'ai pas très bien cerné quelque chose à propos de la fonction GetDlgItemInt()

    en fait j'aimerais que le nombre que je tape dans l'editbox soit stocké dynamiquement :

    en d'autres termes : dans l'editbox je tape au clavier un premier chiffre '1' il affiche '1'............... ensuite je tape le 2ème chiffre '5' et il affiche '15'

    et ce sans taper 'entrée' ni cliquer sur 1 bouton

    est-ce que programmer une telle chose n'est pas un peu trop HD pour un débutant comme moi ?

  2. #22
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    en d'autres termes : dans l'editbox je tape au clavier un premier chiffre '1' il affiche '1'............... ensuite je tape le 2ème chiffre '5' et il affiche '15'
    Euh... L'EditBox marche déja comme ça, non?

    Enfin, je t'ai déjà dit comment réagir immédiatement à une modification de l'EditBox: Elle envoie une notification WM_COMMAND(EN_CHANGE) à la fenêtre parente...

  3. #23
    Invité
    Invité(e)
    Par défaut
    désolé je me suis encore mal exprimé

    je ne sais vraiment pas comment expliquer ça

    mon exemple voulait simplement dire je tape '1' dans l'editbox il affiche '1' (normal c'est une editbox)

    donc je tape au clavier '1' (sans taper 'entrée' ni cliquer sur un bouton) et il stocke '1' dans une variable (disons un entier int) ensuite je tape '5' : la même variable change et devient '15'. sur le clavier je tape sur 'retour arrière' et la variable redevient '1'

    tout ça en live juste après avoir tapé juste le chiffre ou le nombre au clavier

    juste pour être sûr qu'on se comprend bien

    c'est vrai que c'est pas facile d'expliquer les choses des fois

    prenez un bon café... et relisez mon post plusieurs fois au besoin

  4. #24
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Mais c'est déjà ce qui arrive si tu lis l'entier au moment du EN_CHANGE avec GetDlgItemInt()...

  5. #25
    Invité
    Invité(e)
    Par défaut
    donc j'inclus le paramètre EN_CHANGE dans GetDlgItemInt() ?

    ça donnerait qqch comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getb=GetDlgItemInt(fenetrePrincipale, (HMENU)ID_EDITBOX_1, EN_CHANGE, FALSE);
    ??

    je vais tester...

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    MAIS NON!

  7. #27
    Invité
    Invité(e)
    Par défaut
    comment ça "mais non" ?! c'est fini oui ?! (je plaisante)

    1er essai raté : j'ai encore droit à 2 mdr...

    j'ai relu un de vos posts : vous dites d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WM_COMMAND(idEdit, EN_CHANGE)
    donc 2ème essai mdr (ne sautez pas au plafond merci... j'ai encore besoin de vous lol )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getb=GetDlgItemInt(fenetrePrincipale, (HMENU)ID_EDITBOX_1, WM_COMMAND, FALSE);
    et puis non ça me paraît bizarre : une fonction ne peut pas être un paramètre...

    disons qu'après le troisième essai je suis viré du forum pour harcèlement moral abusif sur personne majeure consentante après 22h

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Je dit de TRAITER le message WM_COMMAND que l'Editbox envoie à ta fenêtre.

    En clair:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    case WM_COMMAND:
    	switch(LOWORD(wParam))
    	{
    	case ID_EDITBOX_1:
    		if(HIWORD(wParam)==EN_CHANGE)
    		{
    			...
    		}
    		break;
    	}
    	break;

  9. #29
    Invité
    Invité(e)
    Par défaut
    ok je n'y étais pas du tout

    de plus je ne savais pas qu'on pouvait inclure un switch à l'intérieur d'un case

    comme quoi on en apprend tous les jours

    il ne faut pas m'en vouloir : je débute

    et j'ai encore tant à apprendre

    mais j'avoue que ça n'a rien à voir avec la programmation console : en plus de ça il y a des handlers et des commandes que la progra console n'a pas

    ça n'est pas du tout évident au premier abord

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    ok je n'y étais pas du tout

    de plus je ne savais pas qu'on pouvait inclure un switch à l'intérieur d'un case

    comme quoi on en apprend tous les jours
    Tu peux mettre n'importe quoi à l'intérieur de n'importe quoi.
    Mais il est généralement plus prudent de faire des fonctions:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    /*Retourne TRUE si le message a été traité (parce que le contrôle est reconnu) */
    BOOL HandleWmCommand(HWND hWnd, WORD ctlId, WORD notifCode, HWND hCtl, LRESULT *pRet)
    {
    	BOOL ret = TRUE;
     
    	switch(ctlId)
    	{
    	case ID_EDITBOX_1:
    		if(notifCode==EN_CHANGE)
    		{
    			...
    		}
    		else
    			ret = FALSE;
    		break;
    	default:
    		ret = FALSE;
    	}
    	return ret;
    }
     
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	LRESULT ret = 0;
    	switch(uMsg)
    	{
    		...
     
    	case WM_COMMAND:
    		/* Si la fonction ne traite pas le message,
    		   on appelle DefWindowProc */
    		if(!HandleWmCommand(hWnd, LOWORD(wParam), HIWORD(wParam), (HWND)lParam, &ret))
    			ret = DefWindowProc(hWnd, WM_COMMAND, wParam, lParam);
    		break;
     
    	default:
    		ret = DefWindowProc(hWnd, uMsg, wParam, lParam);
    	}
    }

  11. #31
    Invité
    Invité(e)
    Par défaut
    en tout cas merci à vous pour le tuyau

    c'est sympa

    ah si seulement on pouvait apprendre la programmation en quelques secondes, comme dans Matrix...

  12. #32
    Invité
    Invité(e)
    Par défaut
    re

    donc j'ai testé le code

    grosso modo ça donne ça : j'ai donc repris la déclaration de BOOL en y ajoutant GetDlgItemInt()
    ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    BOOL HandleWmCommand(HWND fenetrePrincipale, WORD iId, WORD notifCode, HWND hCtl, LRESULT *pret)
    {
    	BOOL ret = TRUE;
     
    	switch(iId)
    	{
    	case ID_EDITBOX_1:
    		if(notifCode==EN_CHANGE)
    		{
    	    bitrate=GetDlgItemInt(fenetrePrincipale, (HMENU)ID_EDITBOX_1, NULL, FALSE);
    		}
    		else
    			ret=FALSE;
    		break;
    	default:
    		ret=FALSE;
    	}
    	return ret;
    }
    ensuite j'ai fait le LRESULT CALLBACK comme vous avez écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HWND boutons[2] = {NULL};
        LRESULT ret=0;
     
        switch (message)
        {
            case WM_CREATE:
                RemplieFenetrePrincipale(fenetrePrincipale);
                return 0;
            case WM_COMMAND:
                NotificationControle(fenetrePrincipale,message,wParam,lParam);
    			if(!HandleWmCommand(fenetrePrincipale, LOWORD(wParam), HIWORD(wParam), (HWND)lParam, &ret))
    			return DefWindowProc(fenetrePrincipale, WM_COMMAND, wParam, lParam);
    			return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
    	    default:
                return DefWindowProc(fenetrePrincipale,message,wParam,lParam);
        }
    }
    mais j'ai trouvé qu'il y avait qqch qui clochait

    BOOL est déclarée : je suppose que ça marche comme les fonctions : tant qu'on ne l'a pas appelée ça ne fonctionne pas ?

    j'ai donc appelé cette fonction là-dedans (voir dernier case) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    VOID NotificationControle(HWND fenetrePrincipale,UINT message, WPARAM wParam, LPARAM lParam)
    {
        UINT iId=LOWORD(wParam);
        HWND hCtl=(HWND)lParam;
    	CHAR lpMessage[128];	
     
        switch(iId)
        {
            case ID_PUSHBUTTON_1:
                MessageBox(fenetrePrincipale,"Vous avez appuyé sur le premier bouton","",MB_OK);			
                break;
            case ID_PUSHBUTTON_2:
                exit(0);
                break;        
            case ID_CHECKBOX_1:        
                AfficheActionCheckBox(iId-ID_CHECKBOX_1,hCtl,fenetrePrincipale);			
                break;
            case ID_EDITBOX_1:
    	    HandleWmCommand(fenetrePrincipale, iId, notifCode, hCtl, *pret);
    	    break;	
        }	
    }
    quand je compile ça marque : " 'notifCode' et 'pret' non-déclarés"
    je ne comprend pas pourquoi...

  13. #33
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    BOOL n'est pas une fonction, c'est le type de retour de la fonction HandleWmCommand.
    De plus, tu mélanges NotificationControle() et HandleWmCommand()! Tu aurais du les fusionner à la place:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    BOOL HandleWmCommand(HWND fenetrePrincipale, WORD iId, WORD notifCode, HWND hCtl, LRESULT *pret)
    {
    	BOOL ret = TRUE;
     
    	(void)pret; /*Pour ne pas avoir de warning
    	             si on ne modifie pas
    	             la valeur pointee par pret.*/
     
    	switch(iId)
    	{
    	case ID_EDITBOX_1:
    		if(notifCode==EN_CHANGE)
    		{
    			bitrate=GetDlgItemInt(fenetrePrincipale, (HMENU)ID_EDITBOX_1, NULL, FALSE);
    		}
    		else
    			ret=FALSE;
    		break;
     
    	case ID_PUSHBUTTON_1:
    		MessageBox(fenetrePrincipale, "Vous avez appuyé sur le premier bouton", "", MB_OK);			
    		break;
     
    	case ID_PUSHBUTTON_2:
    		/*exit(0); beurk! */
    		DestroyWindow(fenetrePrincipale);
    		break;        
     
            case ID_CHECKBOX_1:        
    		AfficheActionCheckBox(iId-ID_CHECKBOX_1, hCtl, fenetrePrincipale);			
                break;
     
    	default:
    		ret=FALSE;
    	}
    	return ret;
    }
     
    LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	static HWND boutons[2] = {NULL};
    	LRESULT ret=0;
     
    	switch (message)
    	{
    	case WM_CREATE:
    		RemplieFenetrePrincipale(fenetrePrincipale);
    		break;
     
    	case WM_COMMAND:
    		if(!HandleWmCommand(fenetrePrincipale, LOWORD(wParam), HIWORD(wParam), (HWND)lParam, &ret))
    			ret = DefWindowProc(fenetrePrincipale, WM_COMMAND, wParam, lParam);
    		break;
     
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
     
    	default:
    		ret = DefWindowProc(fenetrePrincipale, message, wParam, lParam);
    	}
    	return ret;
    }

  14. #34
    Invité
    Invité(e)
    Par défaut
    bonjour

    je me posais la question aujourd'hui : quelle fonction utiliser pour que dans l'editbox : on ne puisse taper que des chiffres de 0 à 9 et la touche du point '.' ?
    les lettres étant interdites

    c'est de l'ASCII ça non ?

  15. #35
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    L'ASCII, c'est tous les caractères de 32 à 127: Espace, lettres sans accents, chiffres...

    Tu peux essayer le style ES_NUMBER, s'il te faut un filtrage plus précis il me semble que tu devras subclasser le contrôle, et c'est déjà de la prog avancée...

  16. #36
    Invité
    Invité(e)
    Par défaut
    si c'est de la progra avancée alors je laisse tomber

    ceci étant mon premier programme, je cherche avant tout à faire simple

Discussions similaires

  1. Équivalent du "with" de delphi en C#
    Par jimbolelephan dans le forum C#
    Réponses: 4
    Dernier message: 29/06/2008, 10h26
  2. Équivalent de UserControl sous Delphi Win32
    Par Erakis dans le forum Composants VCL
    Réponses: 7
    Dernier message: 13/01/2008, 19h41
  3. [C#] Existe-t-il un équivalent au StringGrid de Delphi ?
    Par KibitO dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/05/2006, 11h08
  4. Réponses: 3
    Dernier message: 18/12/2005, 18h49
  5. Quel est l'équivalent de UBound de VB en delphi
    Par Isa31 dans le forum Langage
    Réponses: 2
    Dernier message: 03/02/2005, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo