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 84023 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #150 - 19 July 2007, 03:16:04
YES !!! :flower:
Mon premier Memory Leak !!! :flower:




Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #151 - 19 July 2007, 03:17:51
Quote
picto a écrit:
YES !!! :flower:
Mon premier Memory Leak !!! :flower:

Joli bug mais c'est PAS un memory leak, la c'est juste un prob de coordonnées
du oapiBlt la bitmap est décallée, ou tu t'est planté avec la surface ?

sinon ca a l'air de marcher a part cette erreur... ? t'est pas loin en tout cas.

Dan



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


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #152 - 19 July 2007, 03:20:51

Ben, je pensais au memory leak parce que ça garde une trace du dernier écran visité.
Soit par F8 ou changement de focus vessel.


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #153 - 19 July 2007, 03:24:19
mhhh teste voir avec:

oapiRegisterPanelArea 1170, 209, 1267, 334

Car 1266-1170= 66 alors que ta bitmap fait 67... même chose pour la hauteur

Ca a toujours été la merde ces coordonnées

Dan



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


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #154 - 19 July 2007, 03:28:25
Notez que tout ca c'est du boulot de singe, on delcare ici, faut les coordonnée
la, la mouse de l'autre coté et patati et patata.
Si je devais me refaire  un panel DGIV depuit le début, j'utiliserais le
C++ à fond pour automatiser la declaration, positionnement affichage,
detection mouse etc etc...

La c'est très marrant avec dix boutons, avec plus de 70 ca devient
completement con.

Je pensais faire un truc avec une fonction "addBouton" les coordo et hop baché..
mais comme je ferais ca avec une classe des new/delete constructeur
etc etc ce serait indigeste pour vous. Le but n'est pas de vous donner
du code compliqueé tout fait mais que vous puissiez comprendre le bidule
et devenir autonome.

Sinon pas de panique, ca marche très bien la methode de base, le panel du
DGIV est programmé comme ca ;)

Dan



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


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #155 - 19 July 2007, 03:30:41
Ah voui :sad:
T'as raison :sad:
C'est pas un memory leak :sad:


Ca marche !!!! YES !!!  :wor: Merci pour le coup de main !
Ca fait plaisir ! J'en ai bien bavé quand même pour ce truc !

Quand je clique j'ai bien Click ! qui apparait et Debout les gars qui joue !

C'est vachard ces trucs de coordonnées.

Juste un petit truc mais je crois deviner, j'ai n'importe quoi à l'affichage avant de clicker,
je pense qu'il suffit de modifier background



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

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #156 - 19 July 2007, 03:37:42
Pour ta remarque, juste au dessus, c'est ce que j'étais en train de me dire.
Au fond, c'est une sorte de fichier config amélioré.
Pour faire N boutons, une fois qu'on a compris le premier
ce n'est plus que du copié collé finalement.

J'ai bien envie d'essayer de faire le truc comme tu dis. :badsmile:



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

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #157 - 19 July 2007, 03:43:58
Quote
picto a écrit:
Juste un petit truc mais je crois deviner, j'ai n'importe quoi à l'affichage avant de clicker,
je pense qu'il suffit de modifier background

Ca dépend du dernier parametre de oapiRegisterPanelArea  "PANEL_MAP_BACKGROUND"
et consort, un param va sauver le fond et le réafficher par defaut, l'autre faudra stocker
toi même les deux etat des boutons (methode DGIV) faut regarder la doc

C'est nébuleux pour moi je l'ai pas fait depuis longtemps (DGIV j'ai rajouté trois boutons
copier/coller j'ai pas regardé aux détails c'est du boulot de c... comme j'ai dis)

Je crois que le stockage ne marche que pour "PANEL_REDRAW_ALWAYS" comme tu redessine
a chaque image tu a besoin d'un fond "frais" à chaque image.

Donc tu est obligé de stocker les deux etats du bouton et de les blitter suivant
la valeur désirée. regarde les bouton DGIV sur le tuto tu a les trois états eteint,
rouge et vert.

Note que ca m'arrange, comme les bitmap sont en 256 couleur j'en ai profité pour masquer de noir
les boutons dans le fond, ca sauve des couleurs... on peut le faire en 24 bit mais la ta DLL
triple de volume (BMP non compressé) et ca faisait des bug sur les petits ordi...

Si c'est pas clair: le bitmap du panel DGIV dans le projet, comme tu vois y a pas de fond par defaut:



Et la bitmap des boutons:



Dan



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


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #158 - 19 July 2007, 03:47:28
Quote
picto a écrit:
J'ai bien envie d'essayer de faire le truc comme tu dis. :badsmile:

Sans vouloir etre présomptueux il te manque beaucoup de connaissances
pour faire un truc carré, pratique et pas buggé, mais après tout c'est de vouloir gravir des sommets
impossible qui conduit au depassement de l'homme sur la nature hostile (musique symphonique) :badsmile:

Note qu'on peut aussi chuter lourdement avec le sommet hostile ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #159 - 19 July 2007, 03:49:14
Nan, je déconnais pour la prog des boutons.
Tu te rend pas compte comme je suis content déjà !
Je vois déjà ce qu'il y a à faire derrière pour que ça fasse quelque chose d'intéressant.


Merci pour la combine des bitmaps.
Je vois bien le truc.



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

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #160 - 19 July 2007, 03:58:40
Ce que je trouve le plus étonnant là dedans
c'est qu'Orbiter prémâche autant le boulot.
Je ne m'attendais pas à ça.

En fait, j'ai galéré parce que je n'ai pas copié collé le paquet
au départ puis modifié les coordonnées ensuite.
L'avantage d'avoir fait comme je l'ai fait, c'est que n'y connaissant
rien en C++, ça m'a obligé à apprendre certaines tournures.

Bien comprendre fonctions, variables etc ...
Plus quelques trucs dans le genre des accollades pour if
comprendre ce qu'est un handle etc ...  ;)



Message modifié ( 19-07-2007 04:00 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #161 - 19 July 2007, 04:20:30
Premaché premaché, si on veux...

Il est clair que pour garder toute la souplesse d'un systeme on ne peut pas simplifier
à outrance, un systeme "addBouton" DetectBouton" ca limiterais de beaucoup
toutes les possibilité genre "lapin malin"

Reste qu'avec quelques petites modif ca pourrais etre moins quand même moins
casse tete. Mais plus on facilite pour l'utilisateur (addon maker) plus l'auteur
de la SDK s'emm...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #162 - 19 July 2007, 04:40:06
Bon, ben, c'est reparti pour un tour. :badsmile:

Je croyais avoir déclenché l'affichage de la bitmap par bBoutonPresse.
Donc, dans consumebufferedkey pour la touche B je rajoute un bBoutonPresse = TRUE;
en me disant si je frappe B ça va faire apparaitre le nouvel état du bouton ....
Et ben nib .... c'est pas comme ça que ça marche.

La question c'est :

Comment ça marche ?  :lol:

Nannnn j'déconne, ça m'amuse de chercher ;)
Je crois deviner que c'est un return du MousePanelEvent qui déclenche le RedrawEvent



Message modifié ( 19-07-2007 04:40 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #163 - 19 July 2007, 04:50:47
Ben comme t'a mis un PANEL_REDRAW_MOUSE le rafraichissement de ne fait
qu'avec un clique mouse ;)

Essaie un  oapiTriggerPanelRedrawArea après ton bBoutonPresse = TRUE;
sinon faudra la delcarer en manuel REDRAW_USER et declencher dans le mouse detect
et dans le keyboard avec un triggerpanel..

Dan


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #164 - 19 July 2007, 10:08:06
Quote
DanSteph a écrit:
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

Oui, ça fonctionne, ça ma pris la tête un bon moment mais c'est ok.



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #165 - 19 July 2007, 13:46:32
Chouette combine, les couleurs sur MSVC, merci :wor:
Ca permet d'aller plus vite regarder ou il faut sur une ligne !



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

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #166 - 19 July 2007, 15:51:01
YES !
Ca y est, j'ai enfin réussi à intégrer Horizon.cpp dans le panel et dans le VC !
Ce ne sont que quelques copiés collés pris sur le Deltaglider .
C'est simple une fois que le système est compris.

Par contre, j'ai un chtit bug sur les couleurs.
Le sol est parfois beige et parfois noir.


Mon premier display dans un VC :lol:





Message modifié ( 19-07-2007 19:28 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #167 - 19 July 2007, 22:34:34
Ptit problème avec le GDI, c'est bizarre.
Le bleu et le beige ne sont jamais affichés ensemble.
Et la couleur apparait côté ciel ou côté Terre dès que le vaisseau passe 45°
Et c'est pareil sur le panel 2D
Je n'ai rien tripoté sur Horizon.cpp.
L'est ou Watson ?





Message modifié ( 19-07-2007 22:36 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #168 - 20 July 2007, 00:48:43
Si t'a rien touché dans le code horizon regarde peut etre des données exterieurs fournie a cette fonction ?
mais c'est dur à dire en fait...
Faudrais comprendre comment le horizon marche plus ou moins, voir ou les couleurs sont appliquée
et faire tourner en debug ou avec quelques oapiDebugString pour voir les valeurs....

Je l'ai integré il y a des années donc je me souviens pas bien...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #169 - 20 July 2007, 01:46:34
Oki, je suis en train d'étudier Horizon ... gloups :siffle:
Après je vais tester le debugstring, je ne suis pas super à l'aise avec ça pour l'instant ;)

J'ai une chtite question sur les flags.
Je traduirais ça par balise.

   bool bMWSActive, bMWSOn;

Puis je tombe sur ce genre d'utilisation. L'écriture me parait bizarre.

   bMWSActive = bMWSOn = false;

Puis un peu plus loin sur ça, si mwson est différent de bMWSOn alors ils deviennent égaux et pouf ça déclencle le redraw

      if (mwson != bMWSOn) {
         bMWSOn = mwson;
         oapiTriggerRedrawArea (0, 0, AID_MWS);

J'en conclue qu'un flag est une balise qui permet de déclencher des trucs quand on le décide.
J'ai lu ça aussi sur la doc,

 if (button_pressed)
oapiBlt (surf, buttonSurf, 0, 0, 0, 0, 20, 10);
else
...

Ou le flag button_pressed aurait par exemple pu être défini dans le mouse event handler.
Donc naîvement, j'ai joué avec une simple variable que je transformais dans le mouse event handler
puis que je testais avec le if ( bBoutonPresse == TRUE) dans le redraw event handler
tout en mettant le registerpanel en REDRAW_USER.

Evidemment ça ne déclenche rien, je ne comprend pas cette écriture : if (button_pressed)
retourne t'elle implicitement quelque chose ?
Ca ressemble aux tests de sécurité sur un handle ....

Enfin bref, c'est tout embrouillé quoi et évidemment ça ne déclenche rien :badsmile:



Message modifié ( 20-07-2007 01:57 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #170 - 20 July 2007, 02:08:50
if() teste si un truc est vrai ou faux, accessoirement il considere une valeur
n'importe laquel comme vraie et une valeur de zéro comme fausse...

En fait if(bBoutonPresse) est strictement equivalent a "if(bBoutonPresse==TRUE)"
ou if(bBoutonPresse!=0)"  ("!=" veut dire "non egal")

En bref a part si bBoutonPresse est egal a zéro le code en dessous du if sera executé.

Un flag est une variable ni plus ni moins, on l'appele "flag" (drapeau) car on considere qu'elle ne prend que deux
valeurs, vraie (1 ou TRUE) ou fausse (0 ou FALSE) un flag est donc une variable bolean le plus souvent.
Ton boutonPress est un flag aussi.

bMWSActive = bMWSOn = false;

Ca c'est un raccourci d'ecriture equivalent de ca:

bMWSActive = false;
bMWSOn = false;


if (mwson != bMWSOn) {
bMWSOn = mwson;
oapiTriggerRedrawArea (0, 0, AID_MWS);

Assure probablement que trigerarea ne soit pas executé plusieurs fois pour faire inutilement la meme chose.
Lis le code comme un ordi... quelques part une des deux valeurs doit etre calculée et donc peut changer, l'autre
n'est la que pour conserver la mémoire de l'autre valeurs la derniere fois que le triggerarea a été executé.

Pas clair ? mhhh voyons:

Code: [Select]
// Assure que picto n'ecrit qu'une fois par jour:

si( JourActuel != DernierJourOuIlAPoste)
{
   DernierJourOuIlAPoste=JourActuel;
   PictoPostDansLeForum();
}

Plus clair ? :badsmile:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #171 - 20 July 2007, 02:32:32
Pffff :sad: Oui c'est clair.
A demain ....



Message modifié ( 20-07-2007 02:41 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #172 - 20 July 2007, 13:04:01
Petite question optimisation pour ne pas se lancer dans un truc en impasse.

clbkDrawHUD permet de remplacer tout ce qui apparait par défaut sur Orbiter
dans le HUD. IL est utilisable aussi bien en mode panel qu'en mode VC.
Le mode VC est un bouffeur de FPS, avec le peu d'expériences que je viens de faire, trois fois
moins rapide avec moins de prog. Je me dis qu'il est préférable d'utiliser le mode panel.
Pour les suicidaires, il sera toujours possible d'ajouter une option en mode VC :lol:

Peut on bloquer les MFDs d'ailleurs :wonder: pour avoir un écran bien à nous ?
Et faire en sorte que tout ce qui est affiché par défaut par Orbiter en mode panel soit zappé.

Ensuite, questions optimisation.

Avec du blanc je peux "découper" le panel. Est ce un phénomène genre alpha ?
Par exemple pour afficher un truc comme ça en permanence au milieu de l'écran,
est il préférable d'utiliser une bitmap avec du blanc ou un pen du GDI ?


Idem pour le radar, le cercle qui définit la zone de redessinnage doit elle être une
fonction cercle du gdi ou cette utilisation un peu spéciale d'une bitmap de background panel.

Pour passer de ça ( à gauche ) à ça ( à droite ) .... vite fait pour les besoins du post ;)





Message modifié ( 20-07-2007 13:24 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #173 - 20 July 2007, 13:29:13
Oui on peut tout virer mais ca demande quelques modif pas super catholique (voir Prelude et Mmu)
pour le HUD le callback clbkdrawhud permet effectivement de rajouter des trucs sur le hud.

moi je dirais pen et GDI. Le defaut avec l'alpha c'est l'aliasing, comme ce n'est pas possible
tes lignes de travers ca risque d'etre un peu escalier moche. Ca dépend de la pente et de la couleur
de la ligne en fait. Attention aussi a la résolution, il faudra corriger pour pas voir le superbe radar
du millieu en 640 devenir un superbe radar de coté en 1280 ;)

Dan



Message modifié ( 20-07-2007 13:37 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #174 - 20 July 2007, 13:35:20
En parlant du VC: comme c'est un bouffe framerate et que la prog des instruments promet de loooong
moi de dev (t'a aimé programmer les boutons du panel ? , tu va adorer les instru en 3d) c'est une solution
qui ne permet pas des panels complexe. La question est: veut ton un "wow" avec peu de possibilités (VC)
ou un panel moins wow mais bourré de systeme ?

Choix... tout est choix (a celui qui le mérite) ;)  (ah ah dur celle la :) )

Dan