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: [tutorial] Posez vos question sur les DLL C++  (Read 84026 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #125 - 16 July 2007, 22:57:49
Tiens un truc qui pose problème aux quiches.
Pourquoi as tu mis le PROPELLANT_HANDLE dans clbkSetClassCap.cpp
alors que souvent il se trouve sur les Headers dans les ezamps ?

Du coup, je suis un peu perdu au sujet du SURFHANDLE srf[nsurf];
qui se trouve souvent dans les headers à côté du PROPELLANT_HANDLE.

Si je le met dans Panel.cpp il ne sera vu que là. :wonder:


Autre exemple qui montre bien la difficulté de se référer à
différents projets qui ne sont pas construits de la même façon.


Définition de classe dans le header
Code: [Select]
class ShuttleA: public VESSEL2 {
public:
ShuttleA (OBJHANDLE hObj, int fmodel);
~ShuttleA ();
Et le constructeur dans ShuttleA.cpp
juste après GDIParams g_Param;

Code: [Select]
// ==============================================================
// Specialised vessel class ShuttleA
// ==============================================================


// --------------------------------------------------------------
// Constructor
// --------------------------------------------------------------
ShuttleA::ShuttleA (OBJHANDLE hObj, int fmodel)
: VESSEL2 (hObj, fmodel)
{
int i;
dock_proc = 0.0;
dock_status = DOOR_CLOSED;
lock_proc = 0.0;
lock_status = DOOR_CLOSED;
DefineAnimations ();
for (i = 0; i < nsurf; i++)
srf[i] = 0;
for (i = 0; i < 2; i++) {
pod_angle[i] = pod_angle_request[i] = 0.0;
}
}

La définition de classe du template
Code: [Select]
class Irridium: public VESSEL2 {
public:
Irridium (OBJHANDLE hVessel, int flightmodel): VESSEL2 (hVessel, flightmodel) {}


Et le constructeur dans Panel.cpp
juste après GDIParams g_Param;

Code: [Select]
// --------------------------------------------------------------
// Constructor
// --------------------------------------------------------------


Irridium::Irridium (OBJHANDLE hVessel, int flightmodel)
: VESSEL2 (hVessel, flightmodel)
{
int i;
for (i = 0; i < nsurf; i++)
srf[i] = 0;

}
}

A la compile j'ai cette erreur sur le constructeur.
Panel.cpp(20) : error C2084: la fonction 'Irridium::Irridium(OBJHANDLE,int)' a déjà un corps.
Après une recherche sur Google je trouve cette réponse.
On ne peut pas accèder à Irridium::Irridium (OBJHANDLE hVessel, int flightmodel)
: VESSEL2 (hVessel, flightmodel)  car cela doit être une méthode déclarée en private d'une
classe donc inaccessible.

Deux questions du coup :badsmile:

A quoi correspondent ces différences de syntaxe entre les deux définitions de classe ?

Pourquoi ça veux bien compiler sur ShuttleA et pas sur le template ?



Message modifié ( 17-07-2007 00:10 )

Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #126 - 17 July 2007, 14:44:21
Help me !!!!

Dan, j'ai fait un nouveau module sur la base d'Esalab donc j'ai repris mon cpp de base que j'ai transféré dans ton template
et je doit reconnaitre que l'on fini par si retrouvé, le seul problème que je rencontre concerne mes animations, aucune ne
fonctionnent, j'ai chercher jusqu'à trois heures du matin mes rien à faire, je pense que mon problème viens de :

Quote
void MonAddon::DefineAnimations (void)
{
   ant_proc = 0.0;
   ant_status = ant_CLOSED;
   DefineAnimations ();

                     

    static UINT antGrp[2] = {4,8};
   static MGROUP_ROTATE ant (0, antGrp, 2, _V(0,1.784,3.82), _V(-1,0,0), (float)(90*RAD));
   
    anim_ant= CreateAnimation (0);
    AddAnimationComponent (anim_ant, 0, 1, &ant);

Quote
warning C4717: 'MonAddon::DefineAnimations' : récurrent sur tous les chemins d'accès de contrôle, la fonction
entraînera un dépassement de capacité de la pile d'exécution

Pour le reste c'est ok, sons, rcs, docks...



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #127 - 17 July 2007, 15:27:35
Dans ta classe ( MonAddon.h )
Code: [Select]
void DefineAnimations (void);
Dans les initialisations de classe ( clbkSetClassCap.cpp )
Je l'ai mise avec les variables, je pense que ce n'est pas forcément une bonne idée, mais ça fonctionne.
Tonton Dan en aura certainement une meilleure ;) Normalement c'est dans la partie Constructeur mais je ne comprend rien à ce système ( voir post plus haut ;) )
Code: [Select]
void Irridium::clbkSetClassCaps (FILEHANDLE cfg)
{
dAnimationAiles_proc = 0.0;
dAnimationAiles_status = dAnimationAiles_CLOSED;
DefineAnimations ();
Dans MesFonctions.cpp
Code: [Select]
void Irridium::DefineAnimations (void)
{

// animation antenne

    static UINT dAnimationAilesGrp[2] = {GRP_Navette_Aile_Droite,GRP_Navette_Aile_Gauche};
static MGROUP_ROTATE dAnimationAiles (0, dAnimationAilesGrp, 2, _V(0,1.71,1.11), _V(-1,0,0), (float)
(110*RAD));
   
    anim_dAnimationAiles= CreateAnimation (0);
    AddAnimationComponent (anim_dAnimationAiles, 0, 1, &dAnimationAiles);
}

Et je la déclenche par Shift1 du pavé numérique ( T'es têtu toi ! :badsmile: ) dans clbkConsumeBufferedKey.cpp
C'est fait à partir de tes anims et collé sur le template et ça fonctionne.
Il reste même certains de tes commentaires qui n'ont rien à voir avec
la choucroute que je tambouille d'ailleurs.



Message modifié ( 17-07-2007 20:04 )

Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #128 - 17 July 2007, 16:07:50
Je vais faire un essai ;)

Quote
picto a écrit:
( T'es têtu toi ! :badsmile: )

Ma copine est d'accord avec toi :ptdr:

Edit:

Ca fonctionne :applause:



Message modifié ( 17-07-2007 16:09 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #129 - 17 July 2007, 19:01:02
Quote
siriusfett a écrit:
void MonAddon::DefineAnimations (void)
{
   ant_proc = 0.0;
   ant_status = ant_CLOSED;
   DefineAnimations ();
}                     

Deja la a premiere vu tu appelle la fonction depuis la fonction, jolie boucle sans fin...
pour le reste je regarde dans un chti moment...

Dan



Message modifié ( 17-07-2007 19:01 )


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #130 - 18 July 2007, 01:02:15
Oui Picto à était plus malin que moi sur ce coup.  :sad:
Sinon génial le template :top: je commence à être à l'aise dans la navigation.



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #131 - 18 July 2007, 14:36:03
J'ai besoin d'un peu d'aide sur les notions Constucteur Destructeur.
J'ai pas mal cherché déjà et je sais quelques trucs à ce sujet mais
je ne trouve aucun exemple cohérent avec le template.

Ca se joue sur des détails mais je ne vois pas lesquels.
C'est surtout sur la syntaxe que je suis paumé.

Voilà le topo, c'est un peu long mais simple.


//================================================================================
//    
//  Constructeur    Destructeur
//
//================================================================================

//================================================================================
//
//   La premiere chose a faire donc c'est de dériver une classe a nous
//   de la classe "VESSEL2"d'orbiter ce qui est fais dans ShuttlA.h ici:
//   class ShuttleA: public VESSEL2 {
//
//   On pourrait aussi bien marquer :
//
//   class MonAddon: public VESSEL2 {
//
//   Dedans tu a au moins un constructeur et un destructeur et des fonctions
//   dérivées de fonctions virtuelles d'orbiter (appellées par Orbiter) et des
//   fonctions à nous, c'est notre classe. On est libres d'y travailler comme on veut.
//
//   Le constructeur et le destructeur serviront seulement a créer des ressources
//   GDI pour les affichages sur les panels, font, pen etc etc. et le destructeur
//   à les detruire proprement.
//
//
//
//  toto(OBJHANDLE hObj, int fmodel);
//
//  constructeur. doit etre obligatoirement ajoutée. Cette
//  méthode est appelée automatiquement quand l'objet est créé.
//
//  ~toto();
//
//  destructeur. pas obligatoire mais fortement conseillé de
//  déclarer surtout si tu fais des allocations de mémoire.
//
//
//================================================================================


Exemple ShuttleA
Code: [Select]
// ==========================================================
// Interface for derived vessel class: ShuttleA
// ==========================================================

class ShuttleA: public VESSEL2 {
public:
ShuttleA (OBJHANDLE hObj, int fmodel);
~ShuttleA ();


// --------------------------------------------------------------
// Constructor
// --------------------------------------------------------------

ShuttleA::ShuttleA (OBJHANDLE hObj, int fmodel)
: VESSEL2 (hObj, fmodel)
{
int i;
dock_proc = 0.0;
dock_status = DOOR_CLOSED;
lock_proc = 0.0;
lock_status = DOOR_CLOSED;
DefineAnimations ();
for (i = 0; i < nsurf; i++)
srf[i] = 0;
for (i = 0; i < 2; i++) {
pod_angle[i] = pod_angle_request[i] = 0.0;
}
}

// --------------------------------------------------------------
// Destructor
// --------------------------------------------------------------

ShuttleA::~ShuttleA ()
{
ReleaseSurfaces();
}
Exemple LTV

Code: [Select]
// ==========================================================
// Interface for derived vessel class: LTV
// ==========================================================

  class LTV: public VESSEL2 {
  public:
  LTV (OBJHANDLE hVessel, int flightmodel);

//======================================================
// LTV constructeur
//======================================================

LTV::LTV (OBJHANDLE hVessel, int flightmodel)
: VESSEL2 (hVessel, flightmodel)
{
SetHudColor(1);
FlightComp = OFF;
Cam = 1;
gear_status = GEAR_CLOSED;
gear_state = 0.0000;
}

// Je n'ai pas trouvé de Destructeur, peut être sur Vessel Cleanup ?


Mon cas

Code: [Select]
// ==========================================================
// InterfaceMaMienne for derived vessel class: Irridium
// ==========================================================

class Irridium: public VESSEL2 {
public:
Irridium (OBJHANDLE hVessel, int flightmodel): VESSEL2 (hVessel, flightmodel) {}


// --------------------------------------------------------------
// Constructor
// --------------------------------------------------------------

Irridium::Irridium (OBJHANDLE hVessel, int flightmodel)
: VESSEL2 (hVessel, flightmodel) {}
{
int i;
for (i = 0; i < nsurf; i++)
srf[i] = 0;

}
}

// --------------------------------------------------------------
// Destructor
// --------------------------------------------------------------

Irridium::~Irridium ()
{
ReleaseSurfaces();
}

[/i]
Voilà.

Plusieurs questions :

Trois définitions de classe, trois écritures différentes
A quoi servent les {} du template ? Quand je les vire, ça plante
De temps en temps du constructeur mais pas de destructeur.
Normalement, Constructeur et Destructeur sont utilisés pour le GDI et là ils
servent aussi à plein de trucs différents, animations, caméras etc ...
Et enfin, mon exemple ( Irridium ) qui ne veut pas, mais absolument pas compiler.
Si je dois ajouter :~Irridium () sur la définition de classe, quelle syntaxe doit prendre cet ensemble ?

class Irridium: public VESSEL2 {
public:
   Irridium (OBJHANDLE hVessel, int flightmodel): VESSEL2 (hVessel, flightmodel) {}
~Irridium ()

Existe t'il une autre méthode pour Destructeur qui permette d'éviter l'utilisation de  ~Irridium () ?


La difficulté que je rencontre est que j'essaye de prendre exemple sur le shuttleA pour la création d'un bouton mais que la déclaration de classe du template ne correspond absolument pas à la méthode utilisée sur le ShuttleA, ce qui n'est pas fait pour simplifier les choses. Tout ce que j'ai pu essayer pour le moment à planté lamentablement :sick:



Message modifié ( 18-07-2007 15:45 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #132 - 18 July 2007, 15:22:46
Gros sac de noeud plus pas mal d'erreur de syntaxe, essaie ca:

Code: [Select]
// ==========================================================
// InterfaceMaMienne for derived vessel class: Irridium
// ==========================================================

class Irridium: public VESSEL2 {
public:
Irridium (OBJHANDLE hVessel, int flightmodel);
~Irridium ();

...


// --------------------------------------------------------------
// Constructor
// --------------------------------------------------------------
Irridium::Irridium(OBJHANDLE hObj, int fmodel): VESSEL2 (hObj, fmodel)
{
int i;
for (i = 0; i< nsurf; i++)
{
srf[ i] = 0;
}
}

// --------------------------------------------------------------
// Destructor
// --------------------------------------------------------------
Irridium::~Irridium ()
{
ReleaseSurfaces();
}

Pour le reste c'est pratiquement impossible (extrement chiant) à lire dans le post pour voir si tout est juste...
essaie deja de corriger destructeur constructeur et regarde comment ca compile.

Dan



Message modifié ( 18-07-2007 16:05 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #133 - 18 July 2007, 15:44:33

Merci pour le coup de main.
J'essaye ça .... pour le reste, je vire du post,
j'ai hésité et je me rend compte que c'est indigeste.


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #134 - 18 July 2007, 17:17:54
Ca compile

YES ! Merci Dan, c'est sur la bonne voie.
La zone est active pour la détection d'un click de souris.

Par contre pour le redessinage c'est pas encore ça :sad:
Je vais trouver !



Message modifié ( 18-07-2007 17:26 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #135 - 18 July 2007, 17:29:14
Quote
picto a écrit:
if (bBoutonPresse = true);              
}

Bravo deux syntaxe error sur une ligne :badsmile:

avec un seul "=" tu ne compare pas tu **assigne**

Après ca:
bBoutonPresse = true

bBoutonPresse aura la valeur true tout simplement.

Ca c'est juste pour un if:

bBoutonPresse == true

Ensuite comme le ";" compte comme une instruction quand tu en mets un juste après le if
tu dis

"si condition machin"
"alors point virgule"

Donc "alors rien"

la c'est juste:

Code: [Select]
if (bBoutonPresse == true)
        oapiBlt (surf, srf[0], 0, 0, 0, 0, 20, 10); //prend un morceau de la bitmap

Dan



Message modifié ( 18-07-2007 18:41 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #136 - 18 July 2007, 17:53:23
Pffff .... t'es méchant :sad:
C'est pas gentil de se moquer des débutants :sad:

J'rigole.....

Merci pour la correction.
J'ai comme l'impression que ça va  fonctionner avec ça.

Mais pour le ;
j'avais trouvé sur google .... un avertissement à la compile du genre action non contrôlée.
Suffisait de le virer, mais c'est bien de savoir pourquoi ;)



Message modifié ( 18-07-2007 17:55 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #137 - 18 July 2007, 17:57:04
Quote
picto a écrit:
Pffff .... t'es méchant :sad:
C'est pas gentil de se moquer des débutants :sad:

Pfff t'est plus un grand débutant mon gars, tu aide même les autres maintenant.. ;)
ceci dis un point virgule ou un "=" dans un if ca nous arrive à tous de temps en temps.

Bienvenu dans le monde impitoyaaaable de la programation

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #138 - 18 July 2007, 19:04:10
Ouais, j'aide pour faire du classement.
C'est comme le gars qu'on embauche pour faire le café au début de sa carrière.

Dernière question sur Constructeur, à moins que ça ne concerne le Handle.
Handle est une notion que je ne comprend pas bien encore.
J'ai l'impression que la boucle Constructeur et la fonction ReleaseSurfaces
font exactement la même chose.

C'est à dire "vider" les handles.
Que vide oapiDestroySurface ?

J'ai tripoté la Constante nsurf juste pour voir.
En mettant un chiffre plus élevé que le nombre ( 1 :badsmile: ) de handles que j'utilise.
CTD direct au lancement d'Orbiter.
Le problème, c'est que maintenant, même en remettant 1 ma DLL ne marche plus du tout ...  CTD :sick:



Code: [Select]
// --------------------------------------------------------------
// Constructor
// --------------------------------------------------------------

Irridium::Irridium (OBJHANDLE hObj, int fmodel)
: VESSEL2 (hObj, fmodel)
{
int i;
for (i = 0; i < nsurf; i++)
{
srf[I] = 0;
}
}

void Irridium::ReleaseSurfaces ()
{
for (int i = 0; i < nsurf; i++)
if (srf[I]) {
oapiDestroySurface (srf[i]);
srf[I] = 0;
}
}

Le I majuscule veut dire i à cause du TAG [i ] du forum. :badsmile:
Pour le post du dessous, il NE FAUT PAS lire en dessous de :

"Pour le code plus haut il est bourrée d'erreur et il appelle une explication sur les tableaux
avec un exemple pratique.
les tableaux de variables"


Parce que ce n'est pas vrai !
....

sauf si on est une quiche :)



Message modifié ( 18-07-2007 21:27 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #139 - 18 July 2007, 20:50:04
Bon alors...

Les handles :badsmile:

Il faut voir la mémoire comme des tiroires contenant des valeurs, si la variable est le tiroir
qui contient effectivement les valeurs le handle c'est la "poignée", l'adresse du tiroir
ou d'une zone de tiroirs.

Quand on crée un ressource en mémoire si on avait pas le handle (c'est a dire l'adresse
de la zone ou a été crée cette mémoire) il serait impossible d'y acceder.

oapiDestroySurface lui libère la mémoire allouée et remplie par oapiCreateSurface mais ca ne
change rien pour la handle, il reste pareil sauf que l'adresse ou il pointe est maintenant invalide,
elle ne contient plus rien. Un acces a cette mémoire ferait un joli CTD. C'est pour cette raison
qu'on initialise à zéro les handles quand il ne referent plus une zone valide. Par habitude
un handle qui ne referre plus une zone valide doit TOUJOURS avoir une valleur null, ca nous permet
de tester tout accès avec

Code: [Select]
if(MonHandle)  // implicitement vrai si la valeurs n'est PAS a zéro
{
    // la zone mémoire pointée par MonHandle est ok on travail avec... (si le type a pas oublier de la mettre a zéro)
}

Ce qui evite nombre de CTD, l'accès a des handles invalide étant une source majeur de bug.



Pour le code plus haut il est bourrée d'erreur et il appelle une explication sur les tableaux
avec un exemple pratique.

Les tableaux de variables

Admettont que tu a 4 bitmaps, tu va avoir besoin de 4 handle différents, on va donc les appeller

Surf1;
Surf2;
Surf3;
Surf4;

Pas pratique dans le code, une mise à zéro ce ferait comme ca:

Surf1=0;
Surf2=0;
Surf3=0;
Surf4=0;

Imagine que tu aie DIX bitmaps, tu voit dans ton code a chaque manipulation des surface 10 lignes de code ???
pour ca on déclare 10 variables d'un coup.

SURFACE Surf[10];

maintenant tu a 10 variable SURFACE tu a donc:

Surf[0];
Surf[1];
Surf[2];
Surf[3];
Surf[4];
Surf[5];
Surf[6];
Surf[7];
Surf[8];
Surf[9];

comme on met le chiffre que l'on veut entre [] on peut donc faire l'initialisation à zéro comme ceci:

Code: [Select]
for(I=0;I<10;I++)
{
   Surf[I]=0;
}

Comme "I" passe de 0 a 9 on a donc bien traité nos dix variables.
Atteeention: Surf[10]=0; et c'est le CTD avec "violation erreur" le tableau Surf ne contient PAS 11 variables.

Quand meme plus pratique et plus lisible que

Code: [Select]
Surf0=0;
Surf1=0;
Surf2=0;
Surf3=0;
Surf4=0;
Surf5=0;
Surf6=0;
Surf7=0;
Surf8=0;
Surf9=0;


Dans le code plus haut tu a completement viré le tableau de variable surf[] pour n'en gardée qu'une visiblement...

Avec ca tu initialise 10 fois la même variable "srf" a zéro:

Code: [Select]
for (i = 0; i < nsurf; i++)
{
srf = 0;
}

Et la tu detruirais 10 fois la même surface (CTD) si elle n'était pas protegée par un if(srf)

Code: [Select]
for (int i = 0; i < nsurf; i++)
if (srf) {
oapiDestroySurface (srf);
srf = 0;
}

Comme ca ne ressemble plus a rien sans le tableau (toute les surface utilisent le même handle même adresse)
tu a des CTD (Exception, violation d'accès blabla)


Pour faire court: tu a *un peu* trop tripoté sur ce coup la ;)

A++

Dan



Message modifié ( 18-07-2007 21:04 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #140 - 18 July 2007, 21:03:37
Meuh non ! :rant:

Fais un citer le message.
C'est ton code du forum qui déconne !

Quand il voit i entre crochets il croit que l'on met le TAG pour écrire en italique.

C'est ailleurs que j'ai un problème, mais quand même le coup de la boucle :sad:
Tu vas m'éditer ton post plus vite que ça et arrêter de me prendre pour une quiche ! :)

Merci quand même pour l'explication sur les Handles.
J'avais fait la traduction mais je ne trouvais pas ce terme très évocateur.
Je voyais bien l'idée de porter quelque chose .... mais quoi ?
Maintenant, c'est beaucoup plus clair.



Message modifié ( 18-07-2007 21:08 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #141 - 18 July 2007, 21:09:17
Ben faut savoir, tantot tu te refugie derriere ton status de quiche, la minute
d'après t'est super codeur je sais plus moi...

n'est méchant  :sad:

Utilise des I majuscules pour tes tableaux ;)

Pour ton prob post plus d'info je regarde après... tu accede a un truc pas alloué, deja releasé
ou non existant... verifie tes creation/destruction de surface etc etc

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #142 - 18 July 2007, 21:59:07
J'en ai plein la tête. Chuis fatigué :sad: Voici le paquet.  J'éditerais ensuite pour ne pas encombrer.



Message modifié ( 18-07-2007 22:42 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #143 - 18 July 2007, 22:07:23
pfouiaaaa  tu veux pas m'envoyer le projet plutot ? pas d'intentation, pas de couleurs,
code pas complet c'est illisible...

Au lieu de corriger je te dirais ou est la couille avec l'explication.

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #144 - 18 July 2007, 22:09:37
pfouiaaaa...

deja tu peut pas creer la surface juste avant le la blitter...

bool Irridium::clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf)
{
switch (id) {
// panel 0 events:
case AID_MONBOUTON:
if (bBoutonPresse == true)
srf[0] = oapiCreateSurface (LOADBMP (IDB_BOUTON1));
oapiBlt (surf, srf[0], 1170, 209, 0, 0, 97, 125); //prend un morceau de la bitmap
return true;
}
return false;
}


La creation ce fait dans une fonction qui est appellée a la fin de clbkLoadPanel
Relis le tuto a la "preparation des bitmaps"

Je pens que je vais completer mon "template" avec un exemple simple de panel.
Je le ferais séparé de l'autre pour ceussent qui veulent un panel.

Dan



Message modifié ( 18-07-2007 22:11 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #145 - 18 July 2007, 22:22:52
pfouiaaaa .... :lol:
ppppfffffff .... :sad:


Je fais ça .... un chti Zip.



Message modifié ( 18-07-2007 22:43 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #146 - 19 July 2007, 01:28:41
:put: :wall:
J'ai trouvé ...


J'avais effacé le Module initialisation par mégarde du Panel.cpp
Je n'ai plus de CTD, le bouton ne s'affiche toujours pas, mais c'est sur la bonne voie.
J'ai enfin compris initpanel en relisant le tuto tout en regardant le source du shuttleA.

C'est bien car ça permet de faire porter l'attention sur ce qui est important.
Je vais y arriver nom de la sainte méthode :)

Oublie le zip, je préfère chercher ;)



Message modifié ( 19-07-2007 01:29 )

Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #147 - 19 July 2007, 02:24:48
Je me pose une question Dan, pour mon nouveau module, j'ai plusieurs anim et jusque-là aucun problème, je décide d'en rajouté
une nouvelle, je compile en Debug (aucune erreur) et la impossible de lancer orbiter, retour direct sur le bureau, après
avoir vérifier et revérifier mes lignes de codes je décide de compilé en Release et la ça fonctionne...

J'ai réglé mon problème en passant par "Générer/Nettoyer" :???:  à quoi cela peut-il être du ???



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #148 - 19 July 2007, 02:53:05
Quote
siriusfett a écrit:
J'ai réglé mon problème en passant par "Générer/Nettoyer" :???:  à quoi cela peut-il être du ???

Aucune idée ! :badsmile:

Ca peut etre du a pleins de choses, regenerer (cleaner) ca peut etre utile
pour éviter des différences de version entre les obj compilé.

Mais du coup ca marche aussi en debug ou pas ?

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #149 - 19 July 2007, 03:13:24
Quote
picto a écrit:
J'avais effacé le Module initialisation par mégarde du Panel.cpp
Je n'ai plus de CTD, le bouton ne s'affiche toujours pas, mais c'est sur la bonne voie.
J'ai enfin compris initpanel en relisant le tuto tout en regardant le source du shuttleA.

C'est bien car ça permet de faire porter l'attention sur ce qui est important.
Je vais y arriver nom de la sainte méthode :)

Oublie le zip, je préfère chercher ;)

Oki, juste une remarque si ca peut t'aider:

si tu met pas des accolades seul la ligne qui suis un if est prise en compte

Avec ca:
Code: [Select]
if (bBoutonPresse == true)
      srf[0] = oapiCreateSurface (LOADBMP (IDB_BOUTON1));
      oapiBlt (surf, srf[0], 1170, 209, 0, 0, 97, 125); //prend un morceau de la bitmap

Seul la ligne en bleu est conditionnée au "if" il faut faire ca:

Code: [Select]
if (bBoutonPresse == true)
{
      srf[0] = oapiCreateSurface (LOADBMP (IDB_BOUTON1));
      oapiBlt (surf, srf[0], 1170, 209, 0, 0, 97, 125); //prend un morceau de la bitmap
}

Erreur bête mais qui est fréquente au début.

Ensuite mais deja mentionné le create surface ce fait dans initpanel à la fin surtout pas dans "draw"...

Dan



Message modifié ( 19-07-2007 03:15 )