Page 2 sur 3
Publié : sam. 14/août/2004 19:48
par Flype
@pierre

Publié : dim. 15/août/2004 10:40
par Le Soldat Inconnu
c'est ce que je voulais faire Flype
bon, tu veux faire un dégradé entre 2 couleurs, facile.
pour chacune des composante, il faut faire ceci :
Rouge_Final = (Rouge_Couleur1 * Degradé + Rouge_Couleur2 * (100 - Degradé)) / 100
en clair, Dégradé varie de 0 (0%) à 100 (100%) et représente le pourcentage de couleur 1.
ça donne ça sous forme de code :
Code : Tout sélectionner
OpenWindow(0, 0, 0, 200, 200, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Dégradé de couleur")
CreateGadgetList(WindowID())
; On choisi les couleurs du dégradé
Couleur1 = RGB(24, 184, 24)
couleur2 = RGB(255, 155, 0)
#MaxDegrade = 199
CreateImage(0, 200, 200)
StartDrawing(ImageOutput())
For n = 0 To #MaxDegrade
; On calcule la couleur du dégradé de valeur n
; n varie de 0 à #MaxDegrade et correspond au niveau du dégradé
; si n = 0, on a 0% de Couleur1 et 100% de couleur 2
; si n = #MaxDegrade, on a 100% de Couleur1 et 0% de couleur 2
Rouge = (Red(Couleur1) * n + Red(couleur2) * (#MaxDegrade - n)) / #MaxDegrade
Vert = (Green(Couleur1) * n + Green(couleur2) * (#MaxDegrade - n)) / #MaxDegrade
Bleu = (Blue(Couleur1) * n + Blue(couleur2) * (#MaxDegrade - n)) / #MaxDegrade
; On dessine la ligne
Line(0, n, 200, 0, RGB(Rouge, Vert, Bleu))
Next
StopDrawing()
ImageGadget(0, 0, 0, 0, 0, UseImage(0))
Repeat
Event = WaitWindowEvent()
Until Event = #WM_CLOSE
comme tu le vois, c'est super simple, juste une histoire de pourcentage (pour le rapport couleur1 couleur 2) et de moyenne (pour faire le mélange de couleur)

Publié : lun. 23/août/2004 16:33
par Flype
merci regis, je regarderais plus en detail au retour d'espagne...
Publié : lun. 23/août/2004 22:27
par Le Soldat Inconnu
Tu t'es connecté en espagne ??? c'est pas des vacances

Publié : ven. 27/août/2004 10:19
par gansta93
Bonjour tout le monde,
En fait aucun des deux programmes ne marchent avec mon bon vieu Windows 98. Le premier me fait un "opération non conforme", et le deuxième me dit qu'il est lié à une exportation manquante... voilà et sinon le code du Soldat inconu marche sauf quand je lui demande defragmenter il me mait dans le debuger Specified address is nul.
Pk?
Publié : ven. 27/août/2004 11:10
par Chris
J'ai testé ton prog pour libérer la mémoire sur XP.
Ca marche, mais j'ai l'impression que ça libère trop de mémoire. (Je peux me tromper!)
Après l'utilisation, j'ai du mal à bouger les fenêtres qui étaient ouvertes, ou à lancer les progs comme l'explorateur, le gestionnaire de tâches, etc...
Tu devrais peut-être limiter l'optimisation à une certaine quantité de mémoire, en fonction de la mémoire totale. C'est ce que font tous les autres logiciels de ce type, il y a certainement une bonne raison
Sinon, bravo, ça marche bien.
Publié : ven. 27/août/2004 11:38
par Le Soldat Inconnu
gansta93 > aucune idée, quelle ligne du code qui plante ?
Publié : ven. 27/août/2004 12:18
par gansta93
Re,
Si je me souvien bien, c'est la ligne 22 ou il me dit un truc comme Destination memory pointer is nul.
C'est quand même assez rageant... depuis le temps que je cherchait comment défragmenter la ram, j'étais dans le bon principe... et j'avais jamais réussi c pour ça que je veux le voir marcher avec moi

bravo... dès qu'il marchera

Publié : ven. 27/août/2004 12:46
par Le Soldat Inconnu
c'est le copymemory qui plante ?
pas normal, essai en mettant des * mais je pense pas que ce soit ça
Code : Tout sélectionner
Procedure Optimisation(Total.l)
#TailleMem = 16 * 1024 * 1024 ; 16 Mb
NewList Memoire.l()
; On crée un échantillon destinée à remplir la mémoire
*MemOrigine = AllocateMemory(#TailleMem)
For n = 0 To Total / 16 ; On rempli la mémoire avec des connerires
AddElement(Memoire())
*Memoire() = AllocateMemory(#TailleMem)
CopyMemory(*MemOrigine, *Memoire(), #TailleMem) ; On utilise la mémoire sinon, ça ne marche pas
Next
; On supprime les blocs mémoire
ResetList(Memoire())
While NextElement(Memoire())
FreeMemory(*Memoire())
Wend
FreeMemory(*MemOrigine)
ClearList(Memoire())
SetGadgetText(#Etat, "")
DisableGadget(#Optimiser, 0)
EndProcedure
sinon regarde au niveau des allocatememory si il marche bien avec un coup de debug, il parvient peut-être pas à crée la zone mémoire ?
Publié : ven. 27/août/2004 13:19
par gansta93
Le Soldat Inconnu a écrit :sinon regarde au niveau des allocatememory si il marche bien avec un coup de debug, il parvient peut-être pas à crée la zone mémoire ?
Oui c'est ça... il ne veut pas créer la zone mémoire Memoire() (j'ai vu ça avec debug) en vérifiant si Memoire() existait bien
Code : Tout sélectionner
If Memoire()
; la procedure de copie
Else
Debug "Problème lors de la création de la zone mémoire."
Break ; Pour quitter la boucle... jj'suis pas sure de mon truc là
EndIf
Et oui c ça d'avoir un vieux système

. domage que ça ne marche pas.
Si tu a une solution je la prand tout dessuite... parce que le programme une fois compilé fait une erreur je sais plus trop quoi dans MSVCRT.dll je croi.
Publié : ven. 27/août/2004 14:04
par Le Soldat Inconnu
non pas de solution, je vais demandé à Denis de tester sur 98 pour voir

Publié : ven. 27/août/2004 14:13
par gansta93
OK. Peut-être qu'encore une foie, mon PC ne fait rien comme les autres

Publié : sam. 04/sept./2004 14:40
par Flype
merci regis pour ta réponse concernant le dégradé c exactement c que je voulais... je vais m'en servir tout de suite pour le soft de defrag...
toujours pas de solution pour win98 ?
Publié : sam. 04/sept./2004 14:44
par gansta93
Oui c'est vrai ça... j'avais presque oublié...

.
Vous pensez que ça serait possible un défragmenteur de cerveau en PureBasic? c'est pas pour moi (on peut plus rien faire de toute façon

).
Publié : lun. 06/sept./2004 15:08
par Le Soldat Inconnu
pour 98, j'ai demandé à denis de tester mais il a pas trop le temps en ce moment (mais ça doit marcher, y'a pas de raison)