See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++] Fonctions à N arguments  (Read 39428 times)

0 Members and 2 Guests are viewing this topic.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #125 - 17 August 2007, 02:01:35
EDIT: VOIR PLUS BAS POUR LE CODE:



Le truc sympa avec un typedef c'est que maintenant ta fonction n'acceptera QUE les mots clé
de type IMAGESEL et aucune autre valeur, impossible de ce gourrer.

Code: [Select]
InitSelecteur(,...,....,1);                        ERREUR DE TYPE
InitSelecteur(,...,....,ZEROIMAGE360°);          OK

.....


Tu peut me filer le code qui affiche le selecteur STP avec le oapiBlt que je te rajoute le bon code dedans ?
RedrawPanel_Bouton_Selecteur ???

En passant file moi aussi InitSelecteur et ta structure et mot clé selecteur on pourrais rendre la detection de la "mouse" automatique aussi Du coup pour un selecteur tu fais juste L'initSelecteur et après c'est tout auto.
Affichage, rotation etc etc.

Thanks ;)

Dan



Message modifié ( 17-08-2007 04:04 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #126 - 17 August 2007, 02:14:38
En passant file moi aussi InitSelecteur et ta structure et mot clé selecteur on pourrais rendre la detection de
la "mouse" automatique aussi Du coup pour un selecteur tu fais juste L'initSelecteur et après c'est tout auto.
Affichage, rotation etc etc.

Thanks ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #127 - 17 August 2007, 02:15:03
Code: [Select]
void Irridium::RedrawPanel_Bouton_Selecteur (SURFHANDLE surf,int id)
{
if(!surf)
return;
id = id-AID_BOUTON_SELECTEUR;
if(Selecteur[id].Etat==Ant125Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY, 30, 30);
}
if(Selecteur[id].Etat==Ant90Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+30, 30, 30);
}
if(Selecteur[id].Etat==Ant45Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+60, 30, 30);
}
if(Selecteur[id].Etat==ZeroDeg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+90, 30, 30);
}
if(Selecteur[id].Etat==Hor45Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+120, 30, 30);
}
if(Selecteur[id].Etat==Hor90Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+150, 30, 30);
}
if(Selecteur[id].Etat==Hor125Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+180, 30, 30);
}
if(Selecteur[id].Etat==Cent80Deg)
{
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+210, 30, 30);
}
}


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #128 - 17 August 2007, 02:18:06
Code: [Select]
void Irridium::InitialiseSelecteur(int MotCle,int PositionPanelX,int PositionPanelY,int SourceBitmapX,int
SourceBitmapY,BOOL EtatInitial,int Panelo)
{
if
(MotCle<MECHANICAL_OPEN_DOCK||MotCle>=FIN_BOUTON_SELECTEUR||PositionPanelX<0||PositionPanelX>1280||Po
sitionPanelY<0||PositionPanelY>1024||SourceBitmapX<0||SourceBitmapX<0||Panelo<0||Panelo>1)
{
// LogError(" Erreur dans InitialiseSelecteur");
return;  //fait rien
}
Selecteur[MotCle].Etat=EtatInitial;
Selecteur[MotCle].iBmpPosX=SourceBitmapX;
Selecteur[MotCle].iBmpPosY=SourceBitmapY;
Selecteur[MotCle].AidPosZoneX=PositionPanelX;
Selecteur[MotCle].AidPosZoneY=PositionPanelY;
Selecteur[MotCle].Panel=Panelo;
}


typedef struct{
int Etat;
int iBmpPosX;
int iBmpPosY;
int AidPosZoneX;
int AidPosZoneY;
int Panel;
BOOL bAction;
}BOUTON;


BOUTON Selecteur[FIN_BOUTON_SELECTEUR];



Message modifié ( 17-08-2007 02:18 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #129 - 17 August 2007, 02:47:03

DEBUT CODE A MODIFIER


Code: [Select]
/////////////////////////////////////
// Rajouter dans header en dehors de la classe:
/////////////////////////////////////

typedef enum
{
   ZEROIMAGE0°=3,
   ZEROIMAGE45°=4,
   ZEROIMAGE90°=5,
   ZEROIMAGE135°=6,
   ZEROIMAGE180°=7,
   ZEROIMAGE225°=0,
   ZEROIMAGE270°=1,
   ZEROIMAGE315°=2,
   ZEROIMAGE360°=3,
}IMAGESEL;
/////////////////////////////////////
// A changer:
/////////////////////////////////////

typedef struct{
int Etat;
int iBmpPosX;
int iBmpPosY;
int AidPosZoneX;
int AidPosZoneY;
int Panel;
BOOL bAction;
int OffsetImageSelecteur;
int NbrPositionSelecteur;
}BOUTON;

/////////////////////////////////////
// InitialiseSelecteur a changer
/////////////////////////////////////

void Irridium::InitialiseSelecteur(int MotCle,int PositionPanelX,int PositionPanelY,int SourceBitmapX,int
SourceBitmapY,BOOL EtatInitial,int Panelo,IMAGESEL OffsetImage,int NbrPos)
{
if(MotCle<MECHANICAL_OPEN_DOCK||MotCle>=FIN_BOUTON_SELECTEUR||PositionPanelX<0||
PositionPanelX>1280||PositionPanelY<0||PositionPanelY>1024||SourceBitmapX<0||
SourceBitmapX<0||Panelo<0||Panelo>1||NbrPos > 8 )
{
// LogError(" Erreur dans InitialiseSelecteur");
return;  //fait rien
}
Selecteur[MotCle].Etat=EtatInitial;
Selecteur[MotCle].iBmpPosX=SourceBitmapX;
Selecteur[MotCle].iBmpPosY=SourceBitmapY;
Selecteur[MotCle].AidPosZoneX=PositionPanelX;
Selecteur[MotCle].AidPosZoneY=PositionPanelY;
Selecteur[MotCle].Panel=Panelo;
Selecteur[MotCle].OffsetImageSelecteur=OffsetImage;
Selecteur[MotCle].NbrPositionSelecteur=NbrPos;
}
/////////////////////////////////////
// RedrawPanel_Bouton_Selecteur a changer
/////////////////////////////////////

void Irridium::RedrawPanel_Bouton_Selecteur (SURFHANDLE surf,int id)
{
if(!surf)
return;
id = id-AID_BOUTON_SELECTEUR;
int OffsetY=(Selecteur[id].Etat+Selecteur[id].OffsetImageSelecteur)*30;
if(OffsetY>210)
OffsetY-=240;
oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+Offsety, 30, 30);
}



ton code va planter car il manque maintenant deux parametres dans tes initSelecteur:

L'avant dernier c'est la position la plus à gauche que peut prendre ton bouton (anti-horaire)
Le dernier c'est le nombre de position totale que prend ton bouton

Une init ce fera comme cela par exemple pour le dernier bouton de ton post:



InitSelecteur(...,...,...,ZEROIMAGE270°,6);

Car il commence a 270° (à gauche) et a six positions en tout...

C'est ok ?

Je continue, avec le code suivant tu pourra virer tout les case du clbkMouseDetectbidule
Le switch en fonction de la mouse pour un selecteur sera aussi automatique....

Avant de gueuler que tu a pleins de params dans initSelecteur imagine, tu n'a plus qu'a

1-declarer un nouveau mot clé
2-appeller InitSelecteur,

tout le reste est automatique, le bouton apparait et bouge tout seul... :badsmile:

Dan



Message modifié ( 17-08-2007 03:43 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #130 - 17 August 2007, 03:09:40
A rajouter en dernier:

Code: [Select]
/////////////////////////////////////////
// A rajouter au début de clbkPanelMouseEvent
/////////////////////////////////////////

//-----------------------------------
// RAJOUTER ***AVANT*** LE SWITCH(id)
//-----------------------------------
// detection et interception des click pour selecteur

if(id>=AID_BOUTON_SELECTEUR&&id<AID_BOUTON_SELECTEUR+FIN_BOUTON_SELECTEUR)
{
int Bt=id-AID_BOUTON_SELECTEUR;
if (event & PANEL_MOUSE_LBDOWN && Selecteur[Bt].Etat>0 )  
{
Selecteur[Bt].Etat--;
SetEtatSelecteur(Bt,Selecteur[Bt].Etat);
}
if (event & PANEL_MOUSE_RBDOWN && Selecteur[Bt].Etat<Selecteur[Bt].NbrPositionSelecteur-1)  
{
Selecteur[Bt].Etat++;
SetEtatSelecteur(Bt,Selecteur[Bt].Etat);
}
return 1;
}


Tu peux  virer tout tes "case AID_BOUTON_SELECTEUR+MONSELECTEUR" de clbkPanelMouseEvent ils ne servent plus à rien


FIN CODE A MODIFIER




Message modifié ( 17-08-2007 03:21 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #131 - 17 August 2007, 03:16:00
Voila, j'ai pas pu debugger ni tester c'est ecrit à la main il peut y avoir des erreurs
mais le principe est bon... Avec ca tes boutons sont completement automatique:
Affichage+mouvement en fonction des click souris.

Tu va devoir modifier l'initSelecteur selon le principe suivant:



InitSelecteur(...,...,...,ZEROIMAGE135°,3);     // anti-horaire max=135°, 3 positions




InitSelecteur(...,...,...,ZEROIMAGE315°,3);     // anti-horaire max=315°, 3 positions




InitSelecteur(...,...,...,ZEROIMAGE270°,6);     // anti-horaire max=270°, 6 positions




Et si par hazard les degrés te posent des probleme j'ai meme fais une rose des vents: :)




Voila, ca te plait comme ca ? ca marche ?

Dan



Message modifié ( 17-08-2007 03:42 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #132 - 17 August 2007, 09:36:22
C'est dément la prog ....

Comment veux tu que de pauvres hères comme moi qui débutent puissent même imaginer
que c'est possible . Imaginer si en fait . Mais de là à en avoir  les moyens et intellectuels et
techniques,  c'est autre chose  Là tu  remplaces 250 lignes de code " Groin Groin " pas facile
à relire par 40 lignes démentes ...
Je vais regarder ça de près ...


Je comprend maintenant que l'on puisse comparer çà à de l'art ...
T'as les besogneux qui toute leur vie vont marner sur les mêmes trucs ... sans talent !
Les groins groins de l'art et de la prog quoi ...
Et les autres, ceux qui ont du talent ! Je ne sais même pas si un enseignement peut pallier ceci, un peu sans doute,
mais pas complétement.... Petit scarabée va essayer de comprendre :wor: Mais c'est pas gagné :sick:

Je suis plus que bluffé, c'est incroyable ... Bon, je fais des efforts hein ...
J'attend pas que ça tombe tout cuit , J'avais quand même réussi à programmer les
35 poussoirs dans le mouse event en 10 lignes de code (plus facile quand même : 0, 1, 2 :) )
Et l'état correspondait tout de suite à queque chose de clair ... Eteint Rouge Vert Blanc ....
Code: [Select]
if(id >=AID_BOUTON_POUSSOIR  && id <AID_BOUTON_POUSSOIR + FIN_BOUTON_POUSSOIR)
{
if (event & PANEL_MOUSE_LBDOWN)
{
Action_Panel_Bouton_Poussoir(id);
return 1;  
}
}
Code: [Select]
void Irridium::Action_Panel_Bouton_Poussoir(int id)
{
id = id-AID_BOUTON_POUSSOIR;
if (Poussoir[id].Etat == Vert||Poussoir[id].Etat == Eteint)
SetEtatPoussoir(id,Rouge);
else if (Poussoir[id].Etat == Rouge)
SetEtatPoussoir(id,Vert);
}
Et ajouté la variable action pour pouvoir passer des infos aux systèmes plus tard ...

Mais ce genre de coup de pouce est incroyable ! Il ne sera pas gaspillé !!!
Tu sais que ça vaudrait le coup de nettoyer ce fil, ou alors de rassembler
tes posts et de faire un addendum aux tutos. Je m'en occuperais si tu veux  
Pour le tri et la mise en forme ... T'auras plus qu'à le poster ;)

J'espère seulement que ce ne va pas rester totalement hermétique
comme le coup du test sur les deux morceaux de codes qui écrivent 15
avec les pointeurs sur adresse ...
Bravo encore ! Quel talent !



Message modifié ( 17-08-2007 10:31 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #133 - 17 August 2007, 09:50:40
Bon, à vue de groin, un Typedef enum est un tableau de constantes !

L'intérêt : pouvoir lier la variable Offset à des trucs fixes ...
Si 50 sélecteurs, grâce à init pouf 450 constantes avec chacune une valeur bien définie
MAIS SURTOUT avec une convention de forme et d'écriture ( grâce au tableau ) qui permet
des traitements en rafale !

C'est simple en fait, mais c'est comme l'oeuf de Colomb: Il fallait être capable d'y penser :sick:



Message modifié ( 17-08-2007 09:53 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #134 - 17 August 2007, 10:24:13
Jolie le rose des vents ! :)
Je viens de me rendre compte que j'avais même fait une erreur 125° .... pour 135° .... :badsmile:
Ben ouis quoi, tout le monde sait ça ... 90 + 45 = 125 :badsmile:
Par contre, ça a un peu dévié du sujet initial de ce thread, à savoir, les fonctions à N arguments :badsmile:



Message modifié ( 17-08-2007 10:37 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #135 - 17 August 2007, 11:33:07
Code: [Select]
//-----------------------------------
// RAJOUTER ***AVANT*** LE SWITCH(id)
//-----------------------------------

Ca c'est pas gentil :sad:
De toutes façons, l'est nul ton code ...
J'ai eu UNE erreur à la compile ...
      OffsetY-=240;
   oapiBlt (surf, srf[1], 0, 0,Selecteur[id].iBmpPosX,Selecteur[id].iBmpPosY+Offsety, 30, 30);

OffsetY .... Offsety :siffle:

Nan, j'rigole ! C'est dingue, du premier coup à part ce petit truc pour un truc fait sans essayer BRAVO !
Quelques bizarreries à l'initialisation mais ce ne doit pas être grand chose ...
La course et le nombre de positions sont bien là, mais pour les sélecteurs tournés vers
le bas la position initiale ne correspond pas ... Je fais les petites modifs nécessaires ....




T'as qu'à les mettre à la poubelle toi même :lol:

case AID_BOUTON_SELECTEUR + MECHANICAL_SELECT_DOCK:
   if (event & PANEL_MOUSE_LBDOWN && Selecte ( ............................. )=Ant90Deg;
      SetEtatSelecteur(ELECTRICAL_SELECT_POWER,Selecteur[ELECTRICAL_SELECT_POWER].Etat);
   }
   return true;



Message modifié ( 17-08-2007 12:30 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #136 - 17 August 2007, 11:50:28
Pour le code groin groin j'en ai fais plus que ma part, c'est normal au début,comme on ne connait pas tout les trucs on
trouve des solutions pour contourner le probleme. Des fois c'est pas... toujours très élégant. ;)

J'ai ainsi remplacé dans le DGIV pas mal de code groin groin qui datait de 4 ans par des trucs court, sécurisé.

C'est du l'art môssieu la programation, pas étonnant que ca te plaise ;)

Enfin tu me dira si ca marche.. "tel quel"

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #137 - 17 August 2007, 11:52:48

C'est NICKEL !!!  :beer:
Du premier coup !!!
 BRAVO !
Juste les quelques bizarreries à l'initialisation mais ce ne doit pas être grand chose ...comme je disais plus haut !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #138 - 17 August 2007, 12:01:43
Quote
picto wrote:
Bon, à vue de groin, un Typedef enum est un tableau de constantes !

enum en particulier oui mais oublie pas que typedef merite bien son nom, tu defini un nouveau type

ainsi ca est valide:

typedef const int   PICTO;
PICTO UneConstanteInt=1;

Tu à defini un nouveau type: PICTO qui s'utilise exactement comme "int" "float" ou un autre type.

Pour l'anecdote ca va beaucoup plus loins on peut definir un prototype pour un pointeur de fonction:

Code: [Select]
typedef DWORD (CALLBACK* MYFUNC)(void);
MYFUNC MyFunctionOrdinal9=NULL;
MyFunctionOrdinal9 = (MYFUNC)GetProcAddress(hSim1DllModuleHandle,(LPCSTR)9);

Les applications sont nombreuse, une de celle ci c'est que comme le C++ est typé (n'accepte que le bon type) tu peux
obliger ta fonction a n'utiliser que ton type particulier. Ainsi aucun risque d'erreur avec le nouveau type IMAGESEL

InitSelecteur(,...,....,1);                        ERREUR DE TYPE NE COMPILE PAS
InitSelecteur(,...,....,ZEROIMAGE360°);          OK

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #139 - 17 August 2007, 12:29:36
NE COMPILE PAS

InitSelecteur(,...,....,1); ERREUR DE TYPE NE COMPILE PAS
InitSelecteur(,...,....,ZEROIMAGE360°); OK

Ca c'est bien je trouve !
Il y a tellement de risques d'erreurs que c'est pas mal de protéger un maximum !
Je trouve plus difficile  de régler des trucs vicieux après une compile qui s'est bien passée que l'inverse.

Sur IMAGESEL, j'étais surpris de ne rien avoir à faire DANS la classe, mais je comprend bien pourquoi maintenant.
En fait, les nouveaux types créés hors de la classe fonctionnent exactement comme ceux fournis par l'OAPI.
Tant qu'on renvoie pas dans les fonctions de Martin ce qu'il attend comme type, ça compile pas !
Je pense aux registers quand je dis ça ;)  .... entre autres sans doutes ....

Par exemple, pour les meshes, je suppose qu'il a défini des structures du type
MATERIAL
GRP
Etc ...
Et si ça viens pas comme ça, il prend pas ce que lui donne à manger le fichier .msh








Pour la petite erreur d'initialisation, c'est bizarre mais je vais trouver ...
Par exemple, celui ci démarre là, puis part vers la gauche par leftclick ... click droit fait rien ...
Puis il rentre dans la zone prédifinie dans class cap puis ensuite tout fonctionne nickel.
Ce doit pas être grand chose, je vais trouver ;)





Message modifié ( 17-08-2007 12:34 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #140 - 17 August 2007, 12:44:39
Le code Affiche était le plus délicat, j'ai du le faire tourner virtuellement dans ma tete en prenant quelques valeurs de
variables, comme je suis pas un ordi j'ai pas pu testé tout les cas... ;)

Si tu trouve pas poste moi deux trois exemple faux et comment il réagissent exactement symptome=probleme

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #141 - 17 August 2007, 12:49:39
bizarre... si on fait tourner le code "dans la tete"






   int OffsetY=(Selecteur[id].Etat+Selecteur[id].OffsetImageSelecteur)*30;

Selecteur[id].Etat=0;
Selecteur[id].OffsetImageSelecteur=ZEROIMAGE135°=6

Donc (0+6)*30=180

Hors a 180 pixel on a bien le bouton 135°: (avant dernier)



Elle est comment la ligne initSelecteur  ?

Dan



Post Edited ( 08-17-07 12:51 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #142 - 17 August 2007, 12:54:12
SI ... je pense que tu es un ordi :badsmile:

C'est IMPEC !!!!
C'est de ma faute, j'avais conservé mon système d'initialisation ... :sick:
En mettant une initialisation entre 0 et le maximum tout va beaucoup mieux ;)



Message modifié ( 17-08-2007 13:02 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #143 - 17 August 2007, 12:57:49
Quote
picto wrote:
C'est de ma faute, j'avais conservé mon système d'initialisation ... :sick:

Ah comment, lequel  ?

Tout marche nickel ? ;)

Dan



Post Edited ( 08-17-07 12:58 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #144 - 17 August 2007, 13:02:03
Ben, mes constantes Ant135Deg, Cent80deg, dont les valeurs étaient un peu aléatoires en les plaquant sur ton
système :badsmile:

Juste pour le plaisir des yeux

Code: [Select]
(MECHANICAL_OPEN_DOCK ,1089, 431, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE135°,3);
(MECHANICAL_SELECT_DOCK ,1144, 431, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE315°,3);
(MECHANICAL_SPEED_ROTATION_ARM ,979, 431, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE135°,3);
(MECHANICAL_GEAR ,759, 431, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE270°,3);
(ELECTRICAL_SELECT_POWER ,456, 279, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE135°,4);
(XFEED ,164, 169, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE315°,3);
(SELECTTANKOUTPUT ,239, 169, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE315°,3);
(SELECTPROBE ,368, 169, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE270°,6);
(LIFE_SUPPORT_SELECT_WATER_TANK ,437, 586, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE135°,3);
(ENGINE_SEL ,217, 431, XSelecteurBmp, YSelecteurBmp,0, Panel1,ZEROIMAGE135°,3);



Message modifié ( 17-08-2007 13:16 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #145 - 17 August 2007, 13:07:55
quand j'ai des grand listing pareil moi j'aime bien les aligner avec des tab et espaces, toujours la lisibilité,
X et Y ne sont la que pour raccourcir les lignes:


plus lisible:




C'est pas degueu tout ca hein ?, des boutons full automatique avec une chite ligne :love:

Dan



Post Edited ( 08-17-07 13:09 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #146 - 17 August 2007, 13:24:05
Mais j'y pense.... pour InitSelecteur vu que la bitmap est fixe plus besoin de taille ?

Code: [Select]
InitSelecteur(MECHANICAL_OPEN_DOCK ,1089, 431,0, Panel1,ZEROIMAGE135°,3);


Faut juste rajouter l'initialisation de XSelecteurBmp et YSelecteurBmp DANs la fonction InitSelecteur directement
vu qu'il ont tous les meme...

Dan



Post Edited ( 08-17-07 13:24 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #147 - 17 August 2007, 13:24:51
Quote
des boutons full automatique avec une chite ligne

Ouais !!! Encore bravo ! :beer:
Mais c'est pas une, c'est deux !
Y'a les enum quand même :lol:
Je crois que ça vaut bien une classe non ?

Les TAB, je fais aussi, mais là ça a déconné parce que la ligne était trop longue et j'ai pas corrigé sur le forum.

Pour faire honneur à ce système, je vais rajouter quelques paramètres pour le son, et la vitesse d'action des diodes ;)
Et faire un nouveau bouton avec un comportement complètement différent ...
Puis réorganiser tous tes posts, pour que tu puisses les poster proprement dans le tuto sur les panels ...
Parce que ce fil est, comment dire, un peu confus !:badsmile: pour quelqu'un qui s'y mettrait par hasard !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #148 - 17 August 2007, 14:02:28
Quote
picto wrote:
Puis réorganiser tous tes posts, pour que tu puisses les poster proprement dans le tuto sur les panels ...
Parce que ce fil est, comment dire, un peu confus !:badsmile: pour quelqu'un qui s'y mettrait par hasard !

Organise le en nouveau tuto...

"Des boutons automatique en quelques lignes"

et je mettrais le lien dans les post tuto...

Mais le top serait: Ta premiere SDK :love:

Tout ce qui est spécifique au boutons enum, typedef fonction tu les bouges dans un headers et un cpp séparé.

Le cpp devra contenir trois "callback" qui seront en charge de faire les choses automatiquement dans les trois
callback d'orbiter "InitPanel" "Redrawpanel" et "PanelMouseEvent"

Appellée de cette maniere au début des fonctions mentionnée:

Code: [Select]
bool ShuttleA::clbkPanelMouseEvent (int id, int event, int mx, int my)
{
       if(BoutonSDK_ProcessMousePanel(id,event)==TRUE)
       {
            return true;
       }
}

En bref si la fonction intercepte un "AID" pour lui il la traite et sort de la fonction orbiter (TRUE). Sinon il passe la main
au code en dessous. (FALSE= pas pour moi, suivant)

Du coup le gars:
1-include cpp et header dans son projet
2-declare les variables indispensable dans sa classe (Boutton[] Selecteur[])
3-Rajoute les fonctions "process" dans les trois callback Orbiter.

4-C'est pret !!!!  reste les noms dans les enum et les init à rajouter.


Probleme:
Pour bien faire ca va prendre énormément de temps, il faut que ce soit "bug et conneries du user proof"
Il faudra une doc aussi, en plus je pense que peu de gens vont l'utiliser il faudrais un truc beaucoup plus
polyvalent et pratique (avec une classe)


Ouais, laisse tomber en fait c'est pas une bonne idée, t'a un premier addon a finir si tu te disperse dans des truc
annexe tout ton boulot sera gaché car jamais releasé :sad:

Mais si j'avais rien a faire j'adorerais... j'aime bien faire les SDK :love:

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 266
  • Hein, quoi !?
    • FsPassengers
Reply #149 - 17 August 2007, 14:08:14
Quote
picto wrote:
Quote
des boutons full automatique avec une chite ligne
Mais c'est pas une, c'est deux !
Y'a les enum quand même :lol:


On peut les supprimer et rendre la declaration automatique avec le init stuveux ;)

Nan je déconne, l'enum est "compilé" en dur, ca le rend très rapide, si on fait une declaration
dynamique ca prendra quelques cycle en plus, juste pour éviter de taper une ligne c'est pas
bon...

Dan