> Tous les forumsAutres langages

 Bouton Incliquable !!
Statut du sujet : NON RESOLU Imprimer
 MMO
  Posté le 05/12/2005 @ 01:13  
 Petit astucien

567 Messages
Salut a toutes et a tous je souhaiterais faire un petit quiz avec certains boutons de réponses incliquable [bigsmile] explication : Je sais plus si ca se fait en c++ ou delphi ou autre mais ce que j'essai de réaliser c'est au mement du OnMouseOver sur un petit bouton, ce dernier se deplace en sorte que le curseur ne puisse jamais le cliquer. Esperant avoir été claire sinon n'hésitez pas à me demander plus d'info [clindoeil].. Je pense que c'est just un petit evenement qui ne doit pas vraiment contenir beacoup de code en fin je pense !! ps: j'ai testé sous borland c++, delphi (pascal) javascript sans réussir ce que je voudrais faire .. merci d'avance de votre aide a++
 Afficher le profil de MMOEnvoyer un message privé à MMO
 
 
Publicité
 AlexPrince  Posté le 05/12/2005 à 05:34  
Petit astucien

398 Messages
Pour C++, cherche SetWindowPos() et WM_MOUSEHOVER. Sinon cherche EnableWindow(). PS: MSDN est ton ami.
Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 MMO  Posté le 06/12/2005 à 18:26  
Petit astucien

567 Messages
oki merci c'est cool je vais voir ca en attendant toutes autres suggestion sont les bienvenue merci [smile]
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 koala01  Posté le 09/12/2005 à 12:51  
Astucien

4715 Messages
Salut, Si tu disposes d'une EDI pour la création d'applicaion avec ton langage, tu peut déjà chercher la proriété "enabled" de ton bouton… Si la valeur est à true (vrai), le bouton est cliquable et, si la valeur est à false (faux) le bouton est grisé, et non réactif
Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
 MMO  Posté le 10/12/2005 à 15:01  
Petit astucien

567 Messages
Re ( comment ca va Koala ;)) Je continue mes recherches mes je n'arrive tjr pas à avoir ce que je veux. En fait, je voudrais qu'on ne puissent pas cliquer sur le boutton et que celui ci se deplace à l'approche du curseur, de manière à jamais laisser le curseur le survoler ou le cliquer. PS: Koala merci, je viens de tester avec la propriété "enabled" sur =false effectivement cela rend le bouton grisé mais ce n'est pas ce que je desire faire, merc quand ememe ;) je suis preneur de tout autres avis A+
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 breizhbugs  Posté le 10/12/2005 à 17:36  
Astucien

3001 Messages
SAlut Avec quoi programmes tu? C++, MFC, api de base? Mets ton code s'il est pas trop long ca me donnera un point de depart.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 MMO  Posté le 10/12/2005 à 18:11  
Petit astucien

567 Messages
J'utilise (enfin j'apprend à utiliser) Borland C++, j'ai également du delphi 6 (Pascal)et Dev C++ [langue] !! Merci d'avance

Modifié par MMO le 10/12/2005 18:13
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 breizhbugs  Posté le 11/12/2005 à 18:21  
Astucien

3001 Messages
[code] #include <windows.h> #include <winuser.h> #include <shellapi.h> int x, y, cx, cy; HWND hWnd, hwndButton; LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsgId, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, int nCmdShow) { static char szAppName[] = "First Program"; MSG msg; WNDCLASS wndClass; wndClass.style = 0; wndClass.lpfnWndProc = WindowProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = szAppName; if(RegisterClass(&wndClass) == 0) return 0; // hWnd = CreateWindowEx(WS_EX_TRANSPARENT, hWnd = CreateWindow( szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if(hWnd == 0) return 0; x=100; y=20; cx=50; cy=20; hwndButton = CreateWindow( "BUTTON", /* predefined class */ "OK", /* button text */ WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, /* styles */ /* * Size and position values are given explicitly, because * the CW_USEDEFAULT constant gives zero values for buttons. */ 100, /* starting x position */ 20, /* starting y position */ 50, /* button width */ 20, /* button height */ hWnd, /* parent window */ NULL, /* No menu */ (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), NULL); /* pointer not needed */ ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsgId, WPARAM wParam, LPARAM lParam) { static char *pszHello = "Hello, world!"; char texte[100]; int xPos=0, yPos=0; HDC hDC; PAINTSTRUCT paintStruct; int i; switch(uMsgId) { case WM_CREATE: return 0; case WM_MOUSEMOVE: xPos = LOWORD(lParam); yPos = HIWORD(lParam); //wsprintf(texte, "mouse move at (%d, %d)", xPos, yPos); //MessageBox(hWnd, texte, "info", MB_OK); if (xPos > (x-5) && xPos < (x+cx+5)) { if (yPos > (y-5) && yPos < (y+cy+5)) { x = x + 50; if (x > 500) x = x - 400; y = y + 60; if (y > 500) y = y - 400; SetWindowPos(hwndButton, hWnd, x, y, cx, cy, SWP_NOZORDER); UpdateWindow(hWnd); } } return 0; case WM_PAINT: hDC = BeginPaint(hWnd, &paintStruct); TextOut(hDC, 0, 0, pszHello, lstrlen(pszHello)); for (i = 0; i < 100; i++) { SetPixel(hDC, i, i, 0xFF00FF); } EndPaint(hWnd, &paintStruct); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) MessageBox(hWnd, "click", "WM_COMMAND", MB_OK); return 0; default: return DefWindowProc(hWnd, uMsgId, wParam, lParam); } } [/code] Bon voila un exemple. J'utilise WM_MOUSEMOVE. Le probleme c'est que c'est la fenetre qui recoit le message et pas le bouton ce qui veut dire que si on est rapide et que la souris arrive sur le bouton, WM_MOUSEMOVE n'est plus envoyé et il est alors possible de cliquer sur le bouton. exlication: (xPos > (x-5) && xPos < (x+cx+5)) xPos,yPos est la position de la souris x,y la position du bouton et cx, sa largeur, cy sa hauteur 5 est la fenetre que je regarde, c'est a dire si la souris approche a moins de 5 pixel du bouton, alors on le bouge.

Modifié par breizhbugs le 11/12/2005 18:23
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 AlexPrince  Posté le 12/12/2005 à 06:31  
Petit astucien

398 Messages
Ça devrait faire la job et c'est beaucoup plus élégant.[code]case WM_CREATE: srand(GetTickCount()); break; case WM_COMMAND: if(wprm == WM_MOUSEHOVER && (hwnd)lprm == hbutton) SetWindowPos(hbutton, 0, srand()%width, srand()%height, 0, 0, SWP_NOZORDER | SWP_NOSIZE); break;[/code]

Modifié par AlexPrince le 12/12/2005 06:35
Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 breizhbugs  Posté le 12/12/2005 à 11:48  
Astucien

3001 Messages
AlexPrince a écrit :
Ça devrait faire la job et c'est beaucoup plus élégant.[code]case WM_CREATE: srand(GetTickCount()); break; case WM_COMMAND: if(wprm == WM_MOUSEHOVER && (hwnd)lprm == hbutton) SetWindowPos(hbutton, 0, srand()%width, srand()%height, 0, 0, SWP_NOZORDER | SWP_NOSIZE); break;[/code]
C'a a l'air plus elegant mais WM_MOUSEHOVER n'est pas un WM_COMMAND. Et puis il faut activer TrackMouseEvent(...). Je n'avais pas reussi avec cette methode mais si tu as qqch de fonctionel (et de testé!) je suis prenant aussi.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 AlexPrince  Posté le 12/12/2005 à 22:29  
Petit astucien

398 Messages
Ça devrait fonctionner. Je n'ai pas vraiment le temps de tester le tout parce que j'écris ça entre 2 exercices de physique pour mon examen final alors essayer de compiler tout ça n'est pas réellement dans mes priorités mais ça devrait fonctionner[code]IsPtInRect(LPARAM lprm, RECT rc) { int x = (LOWORD(lprm)); int y = (HIWORD(lprm)); return (x >= rc.left && x <= rc.right && y >= rc.top && y <= rc.bottom); } case WM_CREATE: { GetWindowRect(hbutton, &rcButton); srand(GetTickCount()); TRACKMOUSEEVENT tme; tme.cbSize = sizeof(TRACKMOUSEEVENT); tme.dwFlags = TME_HOVER; tme.hwndTrack = hbutton; tme.dwHoverTime = HOVER_DEFAULT; TrackMouseEvent(&tme); break; } case WM_MOUSEHOVER: if(IsPtInRect(lprm, rcButton)) SetWindowPos(hbutton, 0, rand()%width, rand()%height, 0, 0, SWP_NOZORDER | SWP_NOSIZE); break;[/code]
Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 MMO  Posté le 13/12/2005 à 10:22  
Petit astucien

567 Messages
Re salut à tous..[smile] Je vous remercie enormémentles gas [clindoeil] désolé de pas avoir répondu rapidement, c'est ma connexion qui m'en a decouragé (56 K[boom] ) bref je vais tester tout ca de suite. Merci encore !!
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 MMO  Posté le 13/12/2005 à 11:05  
Petit astucien

567 Messages
Donc je vien d'essayer ce code, je voudrais savoir sur quel EDI l'avez vous fait car sous Dev c++ ca ne marche pas, je suis enrain d'réinstaller borland C++ (suite à un [feroce]formatage ). Ou bien j'ai autre question , il faudrais mettre en place graphiquement les objet (bouton ..ect) pour que cela fonctionne car j'ai les messages suivant quand j'essai de compiler avec dev c++ (dsl je debute [rougir]) : 1 - [Linker error] undefined reference to `GetStockObject@4'. 2 - [Linker error] undefined reference to `TextOutA@20'. 3 - [Linker error] undefined reference to `SetPixel@16' 4 - ld returned 1 exit status Meric de votre aide à +
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 breizhbugs  Posté le 13/12/2005 à 11:36  
Astucien

3001 Messages
Salut, il faut que tu "lie" la librairie gdi32.lib, option du linker Le textout et le setpixel ne sont pas utiles au programme, le premier dessine un message dans la fenetre tandis que le second dessine une ligne. Si tu tapes "msdn textout", google te renvoie ce lien : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_5yd0.asp en bas de la page est indiqué la librairie et le header necessaire pour utiliser la fonction.

Modifié par breizhbugs le 13/12/2005 11:40
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 MMO  Posté le 13/12/2005 à 13:27  
Petit astucien

567 Messages
Merci J'ai trouvé ca http://centrewd.free.fr/?page=ficheapi&t=f&n=TextOut en Fr [bigsmile] c'est pas que je suis null en anglais ( [rougir] un peu quand meme )! Bon je continue de voir ca même. Jusqu'à présent je m'en sort moyen [triste]. Sinon pour l'histoire de placer les objet ou pas qu'en pensez vous ? Pour tester le code que tu a proposé je me suis contenté de le copier et de le compiler !! Merci pour tou

Modifié par MMO le 13/12/2005 13:32
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 breizhbugs  Posté le 13/12/2005 à 14:28  
Astucien

3001 Messages
SAlut, En ce qui concerne mon code, il est compilable tel que mais moi j'utilise visual studio .net 2002 donc il se demerde tout seul pour trouver quel librairie il doit utiliser je crois. En ce qui concerne l'anglais il est quasi imperatif que tu t'y mettes, le site que je t'ai donné est de microsoft et constitue la doc officiel de windows. Pour ton histoire de placer les objets je comprends pas trop ce que tu veux dire mais si c'est un quizz le plus marrant c'est de changer l'intituler du bouton quand la souris s'approche de trop, comme ca on n'a pas a se preoccuper du placement des objets puisqu'il reste au meme endroit!
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 MMO  Posté le 13/12/2005 à 14:50  
Petit astucien

567 Messages
Yes sir !! Je reprend brievement, Je voudrais par exemple : Poser une question, et proposer 2 choix de réponses possibles (qui sont 2 bouton, le premier est la réponse "OUI" par exemple et le deusieme c'est la réponse "NON"). Quand la personne essai de cliquer sur la réponse "OUI" c'est à dire le bouton "OUI", celui ci se deplace à l'approche du curseur et donc il est impossible de le cliquer. Pour le bouton NON je me debrouillerais!! Voilà j'espere avoir été claire sinon n'hésitez pas à me le signaler ! - Pour l'histoire du placement des boutons c'est simple, en fait je me suis dit , si je compile et que j'ai des erreur c'est peut être qu'il y a des éléments (boutons...ect) qui sont appelés par le code, mais qui sont pas trouvés puisque je ne les ai pas mis graphiquement. Merci d'avance a bientot
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 breizhbugs  Posté le 13/12/2005 à 18:15  
Astucien

3001 Messages
MMO a écrit :
Yes sir !! Je reprend brievement, Je voudrais par exemple : Poser une question, et proposer 2 choix de réponses possibles (qui sont 2 bouton, le premier est la réponse "OUI" par exemple et le deusieme c'est la réponse "NON"). Quand la personne essai de cliquer sur la réponse "OUI" c'est à dire le bouton "OUI", celui ci se deplace à l'approche du curseur et donc il est impossible de le cliquer. Pour le bouton NON je me debrouillerais!!
Oui, le probleme c'est que si on balade aleatoirement le bouton "oui" il va se mettre a chevaucher d'autre bouton/texte!
- Pour l'histoire du placement des boutons c'est simple, en fait je me suis dit , si je compile et que j'ai des erreur c'est peut être qu'il y a des éléments (boutons...ect) qui sont appelés par le code, mais qui sont pas trouvés puisque je ne les ai pas mis graphiquement.
En fait je n'ai rien utiliser de 'visuel', j'ai creer un projet windows vide et j'y ai coller le code que j'ai modifier ensuite (c'est pour ca que il y a un 'textout' qui affiche un 'hello world' dans la fenetre). Maintenant si on n'utilise pas les memes outils ils y a peut etre des manipulation supplementaire a faire. Mon programme creer la fenetre et le bouton par le code en utilisant l'API windows. Avec borland c++ (builder je suppose) tu creer la fenetre et le bouton graphiquement et ensuite tu modifie les proprietes par le code. Dans le cas la, tu cherche l'evenement 'OnMouseOver' (ou un truc dans le genre) de la fenetre et tu colle mon code qui se trouve dans WM_MOUSEMOVE en l'y adaptant forcement.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 MMO  Posté le 14/12/2005 à 00:24  
Petit astucien

567 Messages
Ok merci je testerais ca demain sans faute ! Par contre j'ai vu un petit progs justement avec des boutton qui se baladent sans qu'aucun touche l'autre, et pourtant c'étais pas un Pro qu'il la fait !! Plus sérieusement ca serais cool si on m'aide pour parvenir a faire ce que je souhaite réaliser ^^^.. Bonne nuit A ++ et merci encore

Modifié par MMO le 14/12/2005 00:25
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 MMO  Posté le 16/12/2005 à 19:48  
Petit astucien

567 Messages
Re .. Bon je continue toujour mes recherche mais sans arriver a faire grand chose de ce que je voudrais faire.. [triste].. en attendant d'autre avis je continue à chercher merci d'avance et A++
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 MMO  Posté le 09/01/2006 à 15:17  
Petit astucien

567 Messages
Re salut a tous et bonne année ;) Sincérement j'ai envie de réaliser ce boutton inclicable, mais je n'ai vraiment aucun idée, :S je débute en c++ , et je ne demande pas que vous le fassiez a ma place , mais de m'aider à le réaliser please!! J'avoue que je n'arrive pas a bien assimiler comment marchent les les fonctions que vous m'aviez cité précédemment.. mais j'ai avancé la dessus grace a gogle ;) Bref merci a tous d'avance si vous pourriez m'aider un peu plus ca serait vraiment simpa :) A bientot et merci d'avannce
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
 AlexPrince  Posté le 10/01/2006 à 01:08  
Petit astucien

398 Messages
Meh... j't'ai presque donné le code complet... Sinon la plus grande source d'information reste toujours www.msdn.microsoft.com etoui je sais que c'est en anglais mais faut s'y faire quand on veut être en informatique.
Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 MMO  Posté le 10/01/2006 à 22:22  
Petit astucien

567 Messages
Oooook merci Alex et les autres aussi ^^ très simpa, je pense être sur la bonne voie grace a vous ntous :) quand j'aurais fini, j'hésiterais pas de vous tenir au courant de mon merveilleux programme , voire même vous le proposer à un bon tarrif si vous restez cool !!! [bigsmile] à la prochaine ++
Afficher le profil de MMOEnvoyer un message privé à MMO
  Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte




Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page