yoann a écrit:
mais si ont veux ajouter 2 3 truc en plus, que faire ???
Le bon programmeur est un détective confirmé.
Tu peut lire tout les tuto du monde, toutes les doc tu restera une brêle si t'est pas
un bon detective. Pour ca il faut acquerir la méthode "agent X"
-Savoir ou Dénicher l'information.
-Avoir le nez pour reperer un petit élément qui est en rapport avec ce qu'on veux faire et dérouler la pelote.
-Savoir fouiller dans les bureau de tatiana la blonde espionne russe.
Le meilleur copain du programmeur c'est d'abord le bouton "recherche", soit sur le net, soit dans les codes
exemple, soit dans la doc.
Est ce noble de regarder comment les autres on fait ? n'est on pas un minable copieur ?
Non, pourquoi réinventer ce qui a deja été fais ? a ce tarif on pourrait reinventer un language
comme ca on est sur de partir de zéro. en plus on ne peut pas bien copier sans comprendre
et copier nous fais apprendre a vitesse grand V, bien plus que n'importe quel cour. En plus
les exemple de Martin sont la pour ca.
Bon... tu veux rajouter une bouton sur le panel... tu va apprendre ca dans un cour de C++ ?
dans un tuto de C++ ? non, c'est totalement spécifique à Orbiter. Le gars qu'a 10 ans de C++
est au même point que toi la dessus.
Of course tu peu poser la question ici mais si tu bosse 6 mois dessus et qu'a chaque fois
tu pose la question au lieu de chercher tu va mériter le nom de boulet.
Donc premiere solution lire la doc, en général je n'attend pas énormement d'une doc donc moi
je fouille d'abord dans le code existant. L'enorme avantage c'est que a contrario de la doc
tu ne cherche
que dans le domaine qui t'interesse et
que dans du pratique, du qui marche,
pas du théorique... Les réponses sont donc beaucoup plus adéquates.
Vous me suivez agent Z ? Ouvrons donc le bureau de tatiana (le projet exemple ShuttleA qui a un panel)
Voyons voir, bouton, tableau de bord, tout est en anglais donc cherchons d'abord "button" et ensuite "panel"
Button:Find all "button", Subfolders, Find Results 1, "Current Project"
define IDB_BUTTON1 106
srf[2] = oapiCreateSurface (LOADBMP (IDB_BUTTON1));
void ShuttleA::RedrawPanel_MFDButton (SURFHANDLE surf, int mfd, int side)
if (label = oapiMFDButtonLabel (mfd, bt+side*6))
oapiTriggerPanelRedrawArea (0, AID_MFD1_LBUTTONS);
oapiTriggerPanelRedrawArea (0, AID_MFD1_RBUTTONS);
oapiTriggerPanelRedrawArea (0, AID_MFD2_LBUTTONS);
oapiRegisterPanelArea (AID_PODANGLESWITCH, _R( 521, 263, 571);
[Snip]
Matching lines: 40 Matching files: 4 Total files searched: 4Bingo...
Tient voila qui est intteressant... "RedrawPanel_MFDButton" On a "panel" et "button" la dedans en plus de "redraw"
qui veut dire "re-afficher"
dans le C++ il suffit de cliquer sur une ligne de resultat de recherche pour arriver sur la ligne trouvée. Cliquons donc:
Houlalalala... aucuns commentaires... c'est un peu nébuleux ca... visiblement ca affiche un texte
"SetTextColor" mais c'est pas super satisfaisant... cliquons donc sur une autre ligne... tient "oapiRegisterPanelArea"
m'a l'air pas mal... "Register" "Panel" "Area" enregistrer une zone de panel ? Double Cliquons:
Bingo ! "Load a 2d instrument panel"
On est dans la zone point "Z" visiblement, on tourne autour comme un tigre assoiffé, on a le DEBUT DE LA PELOTE
c'est le moment de tirer sur le fil. La, le gars qui connait un peu le C++ a un avantage, il voit tout de suite quel
fonctions sont spécifique a Orbiter (oapiRegisterPanelArea) et lequel sont du pur C (LoadBitmap) Pas grave, le
detective fait feu de tout bois et utilise sa tête.
Visiblement ce "oapiRegisterPanelArea" enregistre des zones avec des coordonées en rapport avec les boutons et
c'est la fonction qui ce repete le plus... c'est le moment de regarder dans la doc. D'abord pour voir si c'est bien un fil
de la pelote, et ensuite pour comprendre un peu comment ca s'utilise ca. On aurait pu commencer par
chercher "panel" dans la doc c'est vrai mais grand auraient été les chances de tomber sur 12'000 fonction rare
et la on a un exemple pratique et on sait ou chercher dans la doc pour comprendre cet exemple.
Ouvrons donc
API_Reference.pdf qui est LA bible. (y en a pas d'autre) et cherchons "oapiRegisterPanelArea"
Ok, ca defini des zones pour cliquer... c'est un peu nébuleux pour le noobs, lire une doc ca s'apprend aussi
et ca illustre ce que je disais: si on avais regardé la dedans en premier on ne serait strictement pas plus avancé.
Bon, rien de mieux que la pratique... on veux rajouter un bouton ? ben quesqu'on attend ? on va mettre la mains a la pâte, on va ce rajouter une petit bouton tout de go et on verra bien.
On copie une ligne qui fait ce genre de truc visiblement on la colle en dessous et on compile "pour voir"
Copions /collons en dessous:
oapiRegisterPanelArea (AID_PODANGLESWITCH, _R( 521, 263, 571, 307), PANEL_REDRAW_MOUSE, [SNIP]"PODANGLESWITCH" ca a une bonne gueule ca surtout qu'on vois dans le SHuttla ou est ce bouton:
On change un peut les coordonnée vu qu'on veut mettre un bouton a coté et pas sur l'autre :
oapiRegisterPanelArea (AID_PODANGLESWITCH, _R( 421, 163, 471, 207), PANEL_REDRAW_MOUSE, [SNIP](j'ai simplement soustrait 100 a chaque valeur)
Et on COMPIIIIILE l'exemple ! a dieux Va ! avec un peut de chance il va tout faire automatiquement ce que je veux !
WHOLOOOO La compilation a marché, note qu'une erreur de compile aurait été informative aussi ! ca aurait
été un file de la pelote... On oublie pas de copier le Shuttla.dll crée dans Orbiter ou mieux, on dis au compilateur
de le mettre directement dans
C:\Orbiter2006\Modules\Shuttlea.dll (mais ca c'est du setting de compile, c'est
pas le but de ce post)
Lancons donc orbiter pour voir notre modif... (a ce stade j'ai pas testé je decouvre avec vous
)
Mhhhh rien ! désesperant.... on clique un peut sur tout les boutons... on flaire, on reflechi... voyons voir...
on a soustrait 100 a toutes les coordonnées... notre bouton ce trouve donc 100 pixel plus haut a gauche...
Tient y a un truc bizarre le en haut:
Comme un bout de truc superposé ou mal affiché... ce serait t'y pas notre bouton ?
Pour confirmer vu qu'on a une place libre un peut a droite on va changer les coordoonées, ce coup ci
on le pousse de 50 pixel a droite simplement:
oapiRegisterPanelArea (AID_PODANGLESWITCH, _R( 571, 263, 621, 307), PANEL_REDRAW_MOUSE, [SNIP]On compile et on lance Orbiter...
OOOOOOOOHHHH Notre premier bouton dans Orbiter
Et en plus ca marche quand on clique dessus.... mignon comme tout.
Bon c'est bien joli tout ca... mais on veux NOTRE bouton a nous et pas une copie... quel est la caracteristique ?
ben le nom "AID_PODANGLESWITCH" donc on mets a la place "MONBOUTON_NA"
oapiRegisterPanelArea (MONBOUTON_NA, _R( 571, 263, 621, 307), PANEL_REDRAW_MOUSE, [SNIP]Et on compile...
Ooooohhh
error C2065: 'MONBOUTON_NA' : undeclared identifier"undeclarer identifier" identifiant pas declaré... c'est donc que ces nom sont declarer quelque part ?
Ici une fonction chouette du VC avec un clique droit on peut chercher ou sont declaré nos "tiroirs", variables,
identifiant, voir on sont appellée nos fonctions etc etc... on clique droit sur "AID_PODANGLESWITCH"
Et on tombe dessus... A rome faisont comme les romains... on va declarer notre truc a nous en dessous...
poussez vous les gars:
Youpiiiie ca compile .... !!!! Et on LAAANCE Orbiter....
...
Les gars...
le bouton a disparu
... passez moi la corde...
Et oui... c'est comme ca la vie.... Bon on desespere pas c'est exactement comme avant...
C'est quoi la caracteristique UNIQUE des ces zones ? elle on toutes un NOM... "AID_BIDULE" "AID_MACHIN"
c'est bien qu'il y a des choses en rapport avec ce nom quelque part dans le code !!?.... donc on recherche
notre nom "AID_PODANGLESWITCH" soit par bouton droit "find all references" soit par recherche normale...
Et ben voilaaa ! pas de quoi ce pendre hein ? la dedans la premiere et la derniere ligne on connais
un c'est la ligne "registerpanel" et l'autre la definition ou on a rajouté notre "MONBOUTON_NA"
L'en reste deux...
On clique dessus, on tombe sur deux fonctions ou zone de code, un c'est pour changer les valeurs
quand on clique l'autre c'est pour afficher le bouton, le code ets pas super clair pour un noobs
mais c'est exactement comme avant, on fouine, on recherche on utilise le bouton droit pour voir
ou vont nos variable etc etc... on duplique, on colle... et on finira bien par y arriver....
OH punaise tout ca pour un boutons ? C'est la merde ton systeme Dan !!!
Ben non.... dans l'intervalle vous avez pris un cours accelléré de C++ et appris le plus important:
Un programmeur
c'est un detective, la logique, la deduction, le flair, savoir
comment chercher,
comment devider une pelote VOILA LE PLUS IMPORTANT !!!!!!!!!Personne ne peut apprendre entierement le C++, personne ne le connait entierement avec toute les API
existante c'est IMPOSSIBLE !
A force d'experience j'ai un flair exceptionnellement aiguisé et je sais ou chercher, voila la différence !!!!
Voila pourquoi que ce soit du PHP du C du Banana ou du Z++ je me demmerde partout et je les apprends tous
en meme temps que je crée des trucs avec...
Et voila
ce que vous devez apprendre de plus important !Apres... vous pouvez lire des cours... ca fait pas de mal... Il faut quand même quelques bases
Mais tout le monde comprend ca quand même ?
if(Detective==0||Feignant==1)
RetourneDansTonCoin();
else
FaisAddonOrbiter();Message modifié ( 20-12-2006 17:14 )