IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Recompiler Graphics.pas (ou nimporte quelle unite "lib")


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Par défaut Recompiler Graphics.pas (ou nimporte quelle unite "lib")
    Bonjour a tous,
    j ai du apporter quelques modifications a graphics.pas pour resoudre des bugs gdi avec les tbitmap. bref.

    je ne sais pas comment recompiler simplement l unite pour avoir un Graphics.dcu a jour.

    merci mercii

  2. #2
    Membre éclairé Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Par défaut
    Essaie de reconstruire l'unité ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Par défaut
    je suis peut etre un peu a la masse, mais je sais construire un projet. pas une unite toute seule.

    sinon je copie mon .pas dans un nouveau projet, je compile et puis je remet le dcu avec les dcu delphis, mais j aurais aime faire ca "proprement" pour une fois.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Par défaut
    ah aussi, j aimerai pouvoir debugger, mettre des points d arret...
    j ai trouve des corrections a faire sur le site de borland, mais j aimerais bien faire du pas a pas pour comprendre ce qui se passe exactement. cest impossible quand on utilise que le dcu...

    une idee ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Par défaut
    bon c bien... j ai eu ma reponse, alors je la poste.
    on sait jamais peut etre que qqn va se poser la meme question un jour...

    il suffisait d ajouter $(DELPHI)\sources\vcl dans le chemin de bibliotheque des options d environnement.

    bon ca ne cree pas les dcu au bon endroit, mais c mieux que rien.

    ciaociao

  6. #6
    Membre éclairé Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Par défaut
    Normalement, quand tu enregistre ton unité, une .dcu ( unité compilée ) est créé. Copie-le dans le répertoire où tu a trouver Graphics.pas, et les modifs que tu as apportés seront prises en compte ...


    Edit: J'ai poster mon msg en même temps que Copeau ...

  7. #7
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut Modification d'unité
    Salut.

    Pourrais tu indiquer les bugs en question ?
    Ca m'interesse vivement.

    Merci.

    A+

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Par défaut
    moi j ai un bug carrement violent, quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mavar := TBitmap.create;
    mavar.width := xxxxxxx;
    mavar.height := xxxxxxxxx;
    le redimmensionnement explose avec une erreur genre 'not enough memory to perfomr this action' (pour xxxxxxx vaut une certaine valeur, variable selon les machines apparemment)

    apres enquete, je me suis rendu compte que ce sont les gdi handles qui viennent a manquer.
    j avais deja poste ce probleme il y a 2 mois

    je ne sais pas quoi dire de plus..
    tu trouveras peut etre ce que tu cherches avec ce lien
    http://qc.borland.com/wc/qcmain.aspx...Bitmap&plat=10

    bonne chance

  9. #9
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut BitMap
    Ce que j'ai constaté depuis longtemps, c'est que l'utilisation de très grands bitmap peut planter la machine (mémoire insuffisante... ou la mémoire de la carte graphique ???)
    Je doute que cela soit du à un Bog de l'unité graphics. Ce que j'ai constaté aussi, c'est que cela dépend souvent de la machine.
    Il y a aussi certaines APIs windows qui ne supporte pas les très grand bitmap ou les redimensionnements. StretchDBIBits en particulier.
    Cela m'a conduit à faire des redimensionnements en deux fois pour éviter le plantage.

    Peux tu m'expliquer d'avantage :
    apres enquete, je me suis rendu compte que ce sont les gdi handles qui viennent a manquer.
    Merci.

    A+

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Par défaut
    eh bien, depuis le temps ce n est plus tres clair, mais bon voila :
    l erreur "pas assez de memoire pour effectuer cette action" (texte approximatif) est levee quand une appli cherche a allouer de nouveaux handle et qu il n y a plus de hndl disponibles. Rien a voir avec la memoire.
    Les bitmaps et leurs fonctions utilisent un certain nombre de handle. Avec les TBitmap, apparemment, dans certains cas, beaucoup plus que necessaire.

    certaines fonctions, (Assign() et d autres) ne nettoient pas tout ca proprement.

    ajouter FreeContext; dans cette methode assign resoud ce bug pour cette methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TBitmap.Assign(Source: TPersistent);
    var
      DIB: TDIBSection;
    begin
      if (Source = nil) or (Source is TBitmap) then
      begin
        FreeContext;   // ADD THIS LINE
        EnterCriticalSection(BitmapImageLock);
        try
    ...
    j ai fait un test sur les tbitmap: une simple boucle for qui augmente la taille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i .... do
      bmp.width := i;
      bmp.hiehgt := i;
    end;
    comme ca je plante pour i = 3557

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i .... do
      bmp.assign(nil);
      bmp.width := i;
      bmp.hiehgt := i;
    end;
    comme ca je plante pour i = 6107

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i .... do
      bmp.pixelformat := pf24bit;
      bmp.width := i;
      bmp.hiehgt := i;
    end;
    comme ca j ai [as assez de RAM pour le faire planter (plus de 8000pix ok)


    bon, c juste des infos....
    y avait pas mal d info dans le lien qu j ai mis plus haut, dans les topics avec resource leak ou gdi leak

    vala vala.

  11. #11
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut
    Merci pour le tuyaut. Je vais étudier la methode Assign.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TSHFileInfo : dans quelle unitée?
    Par bob1980 dans le forum Delphi
    Réponses: 2
    Dernier message: 22/05/2007, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo