|
| 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++
|
| |
| |
| 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. |
| |
|
| 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] |
| |
|
| 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 |
| |
|
| 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+ |
| |
|
| 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. |
| |
|
| 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 |
| |
|
| 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 |
| |
|
| 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 |
| |
|
| 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. |
| |
|
| 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] |
| |
|
| 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 !! |
| |
|
| 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 à + |
| |
|
| 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 |
| |
|
| 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 |
| |
|
| 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! |
| |
|
| 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 |
| |
|
| 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. |
| |
|
| 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 |
| |
|
| 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++ |
| |
|
| 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 |
| |
|
| 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. |
| |
|
| 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 ++ |
| |
|
|
| Haut de la page |