Archive

Archives pour 03/2002

La gestion des images Bitmap

  1. Les informations génerales
  2. Les informations d’en-tête
  3. La palette
  4. Les données
  5. Exemple en QBasic

Bitmap, ça veut plus ou moins dire littéralement carte à points, ou carte à bit.
Et c’est bien ce genre d’informations que contient un fichier de ce type. Chaque pixel est enregistré dans
le bitmap. Aucune compression, que ce soit du type LZW ou par perte de données, n’est utilisée dans ce format.
C’est pourquoi la lecture et l’interprétation de ce genre de fichier reste relativement simple.
Un fichier bitmap est composé de 4 choses : les informations génerales, les informations d’en-tête,
la palette et les données.
Pour illustrer ceci, nous allons créér un lecteur d’images bitmap. Pour le faire, j’ai choisi un langage simple
et facilement compréhensible pour tous, même de ceux qui ne le connaissent pas : le QBasic. Vous pouvez télécharger
le code source de cet exemple ici :

Les informations génerales

Les informations génerales commencent avec le début du fichier, c’est à dire de l’octet 0 et s’achévent à
l’octet 10.
Voici ces informations :

Offset (position) Longueur (en octets) Signification
0 2 Normalement, il doit y avoir BM pour
confirmer que l’image est bien un bitmap
2 4 Taille du fichier, sans la partie d’en-tête
6 2 Réservé. Normalement à zéro (0)
8 2 Réservé. Normalement à zéro (0)
10 4 Offset à partir du quel commencent les données.

Hormis la confirmation du type d’image (Offset 0), ces informations sont rarement utilées. On passe généralement
directement au informations d’en-tête.

Les informations d’en-tête

Ces informations suivent directement les informations générales. Elles commencent donc au 14ème octet.
Elles donnent des renseignements sur l’image proprement dite : largeur, hauteur, nombres de couleurs…

Offset (position) Longueur (en octets) Signification
14 4 Taille des information d’en-tête, soit 40, soit 12
18 4 Largeur de l’image, en pixels
22 4 Hauteur de l’image, en pixels
26 2 Nombre de plan, doit être à 1
28 2 Nombre de bits par pixels. Les valeurs peuvent
être 1, 4, 8 ou 24
30 4 Compression, doit normalement être à zéro.
Sinon, c’est une image RLE
34 4 Taille de l’image, en octets
38 4 Largeur de l’image, dans une autre unité
42 4 Hauteur de l’image, dans une autre unité
46 4 Nombre de couleurs utilisées par l’image.
Si 0, alors toutes les couleurs sont utilisées.
50 4 Nombre de couleurs importantes.
Si 0, alors toutes les couleurs sont importantes.

La palette

La palette représente les couleurs utilisées par l’image. Elles sont codées en RGB : Red, Green et
Blue. Selon les valeurs de ces composantes, on obtient différentes couleurs. Chaque composante peut varier de 0 à 255.
Attention! Pour les fichiers bitmap 24 bits, il n’y a pas de palette!
Voici comment obtenir ces couleurs :

Offset (position) Longueur (en octets) Signification
14 + Taille de l’en-tête 1 Intensité du Bleu de la couleur 0
14 + Taille de l’en-tête + 1 1 Intensité du Vert de la couleur 0
14 + Taille de l’en-tête + 2 1 Intensité du Rouge de la couleur 0
14 + Taille de l’en-tête + 3 1 Inutilisé. Doit être à zéro.
14 + Taille de l’en-tête + 4 1 Intensité du Bleu de la couleur 1

Les données

Les données représentent l’index de la couleur de chaque pixel de l’image.
Elles commencent dans le coin inférieur gauche de l’image. Chaque donnée de plus est un pixel vers la droite.
Ensuite, tout dépend du nombre de bits par pixels de l’image :

Bits par pixels Représentation
1 (monochrome) 8 pixels (horizontaux) sont représentés dans un octet.
Chaque bit de cet octet représente la couleur : 0 pour noir
1 pour blanc.
4 (16 couleurs) Un octet représente 2 pixels de l’image. Les 4 bits de poids
fort repésente la 1er couleur, et les 4 bits de poids
faible la 2ème couleur de cet octet.
8 (256 couleurs) Le plus simple. Chaque octet représente la couleur d’un pixel.
24 (16777216 couleurs) Comme dit plus haut, pour ce type d’image, il n’y a pas de palette.
Chaque pixel est représenté par 3 octets. Chacun de ces 3 octets
correspond à l’intensité d’une des 3 (!) composantes RGB du pixel.

Exemple en QBasic

Voici un exemple de gestion des images bitmap avec un langage simple : le QBasic.
Attention! Cet exemple est MINIMUM. Il vous montre simplement la méthode pour exploiter
ce format d’image. Il n’est donc pas optimisé et est donc relativement lent.

DIM Octet AS STRING * 1			' 1 Octet
DIM Mot AS STRING * 2			' 2 Octets
DIM DMot AS STRING * 4			' 4 Octets

DIM HeadSize AS LONG			' Taille de l'en-tête
DIM BWidth AS LONG			' Largeur de l'image
DIM Bheight AS LONG			' Hauteur de l'image
DIM bpp AS INTEGER			' Bits par pixels

filename$ = "banniere.bmp"		' fichier à ouvrir

SCREEN 13				' Mode 256 couleurs
CLS

' Attention en QBasic, le fichier commence à 1 et non pas à 0 !
OPEN filename$ FOR BINARY AS #1
	' Lecture des informations d'en-tête
	GET #1, 15, DMot
	HeadSize = CVL(DMot)
	GET #1, 19, DMot
	BWidth = CVL(DMot)
	GET #1, 23, DMot
	Bheight = CVL(DMot)
	GET #1, 29, Mot
	bpp = CVI(Mot)

	' Lecture de la palette
	lengthpal = 4 * 2 ^ bpp
	StartPal = 15 + HeadSize
	EndPal = StartPal + lengthpal
	j = 0
	FOR i = 0 TO lengthpal STEP 4
		GET #1, i + StartPal, Octet
		bleu = INT(ASC(Octet) / 4)
		GET #1, i + StartPal + 1, Octet
		vert = INT(ASC(Octet) / 4)
		GET #1, i + StartPal + 2, Octet
		rouge = INT(ASC(Octet) / 4)
		PALETTE j, 65536 * bleu + 256 * vert + rouge
		j = j + 1
	NEXT i

	' Lecture des données
	y = Bheight
	DO
		x = 0
		DO
			GET #1, , Octet
			Index = ASC(Octet)
			SELECT CASE bpp
			CASE 1		' 1 bit
				FOR i = 0 TO 7
					PSET (x + 7 - i, y), (Index AND 2 ^ i) / 2 ^ i
				NEXT i
				x = x + 8
			CASE 4		' 4 bits
				PSET (x, y), Index AND 15
				PSET (x + 1, y), Index AND 240 / 16
				x = x + 2
			CASE 8		' 8 bits
				PSET (x, y), Index
				x = x + 1
			CASE 24		' 24 bits

			END SELECT
		LOOP UNTIL x >= BWidth
		y = y - 1
	LOOP UNTIL y <= 0
CLOSE #1
Categories: Algorithmie Tags:

HTML – Les effets de transitions avec Microsoft Internet Explorer

  1. Le code
    1. Les évenements
    2. Les transitions

Le marché des navigateurs Web se partage principalement en deux : Netscape et Microsoft.
Chacune de ces deux marques a proposé de nouvelles innovations, parfois très interessantes.
Malheuresement, ces innovations sont rarement conformes au spécifications du W3C et à l’esprit de la portabilité.
Par exemple, l’élement <BLINK> de Netscape Navigator ne fonctionne pas avec Microsoft Internet Explorer.
Il en est de même avec <MARQUEE>, mais dans le sens inverse. Et on peut multiplier les exemples, il y en a beaucoup!

Les effets de transitions est un nouveau « concept » signée Microsoft (qui bien sur, ne
fonctionne pas avec Netscape !).
Cette innovation consiste à plus ou moins animer la phase de changement d’une page à une autre. Vous pouvez en avoir la démonstration en cliquant sur ce lien.

Le code

Pour utiliser un effet de transition, il faut utiliser l’élement <META> (voir Les méta-informations et le réferencement).
On utilisera alors l’attribut http-equiv pour déterminer le type d’évenement et l’attribut content pour
le type de transition.
Exemple :

<META http-equiv="Page-Enter" content="revealTransition(Duration=5,Transition=21)">
<!-- Lorsque l'on arrive sur cette page, on voit des barres horizontales
pendant 5 secondes -->

Les évenements

On distingue 4 types d’évenements : l’entrée sur une page, la sortie d’une page, l’entrée sur un site et la sortie d’un site. Chacun de ces évenements
est matérialisé par un « nom de code » :

  • Entrée sur une page : Page-Enter. Cette évenement se produit lorsque la page est chargée.
  • Sortie d’une page : Page-Exit. Se produit lorsque le visiteur quitte la page.
  • Entrée sur un site : Site-Enter. Se produit uniquement lors du chargement de la première page d’un site.
  • Sortie d’un site : Site-Exit. Se produit uniquement lorsque le visiteur appel une page située à l’exterieur du site.

Une fois l’évenement choisi, on doit le placer dans l’attribut http-equiv de la balise <META>

Les transitions

Une transition est configurable selon 2 paramétres : la durée et la transition.
La durée s’exprime en secondes et peut s’échelonner de 0.0 à 60.0 secondes.
Pour les transitions, il y en a 24 possibles, de 0 à 23. Les voici :

Les différents effets de transitions
Index Description Index Description
0 Un carré, de l’extérieur vers l’intérieur 1 Un carré, de l’intérieur vers l’exterieur
2 Un cercle, de l’exterieur vers l’intérieur 3 Un cercle, de l’intérieur vers l’exterieur
4 Effacement, de bas en haut 5 Effacement, de haut en bas
6 Effacement, de gauche à droite 7 Effacement, de droite à gauche
8 Volets verticaux 9 Volets horizontaux
10 Cases d’échiquier, sens horizontal 11 Cases d’échiquier, sens vertical
12 Dissolution aléatoire (neige) 13 Effacement horizontal, vers l’intérieur
14 Effacement horizontal, vers l’exterieur 15 Effacement vertical, vers l’interieur
16 Effacement vertical, vers l’exterieur 17 Effacement, du haut à droite, vers le bas à gauche
18 Effacement, du bas à droite, vers le haut à gauche 19 Effacement, du haut à gauche, vers le bas à droite
20 Effacement, du bas à gauche, vers le haut à droite 21 Rayures horizontales
22 Rayures verticales 23 Effet aléatoire (un parmi les 23 cités)

La transition est définit dans l’attribut content de la balise <META>. Voici la syntaxe de cet attribut :

revealTrans(Duration=TPS,Transition=Index)

ou

blendTrans(Duration=TPS)

Vous devez remplacer TPS par la durée de la transition en secondes, et Index par celui de la transition sélectionnée.

Vous remarquer que pour la 2ème syntaxe, seule la durée est paramétrable. En fait, blendTrans represente une transition
à part entiére. En cinéma, on appel ceci un fondu enchainé.

Categories: HTML Tags:

Napster est mort ? Oui mais…

Logo de Napster

Petit rappel pour ceux qui ne seraient pas au courant de ce qu’est Napster parce qu’ils seraient
partis en vacances ou parce qu’ils habitent dans une caverne dans les monts ardéchois.
Napster est un logiciel permetant un échange facile de fichiers du type MP3 entre les différents
utilisateurs.
C’est simple et efficace (il suffisait d’y penser pourait-on dire) : on se connecte au réseau, on lance Napster, on tape le nom de l’artiste,
du morceau désiré et hop, le tour est joué! L’application nous donne une liste d’utilisateurs connectés au même moment et disposant sur leur
machine du titre correspondant.


Napster a fait couler beaucoup d’encre et de salive ces derniers mois.
La raison : on accuse Napster de détruire le biz gigantesque engrengé par les maison de disques et d’assassiner
les artistes qui vont avec.

Evidement, ça n’a pas plu (du moins pas à tout le monde) et Napster fut attaqué.
Apparement, ils ont du poser des filtres interdisant le télechargement de titres d’artistes qui ne sont pas protégés.

Par exemple, si on tape Madonna, ça ne marchera pas.
Par contre, si on écrit Maddonna, ou bien Madona, ou encore Maddona, les résultats apparaissent.
Les maisons de disques s’en sont aperçues et ont bien évidemment demendées à Napster de
prendre en compte dans leurs filtres cet inconvénient.

Alors est-ce la fin de la musique gratuite et du libre échange sur Internet ?
Pas si sur…
Les moteurs de recherche peuvent remplacer avec beaucoup de succés Napster.
Prenons le moteur des moteurs de recherche : Google.
Je cherchais justement le titre Meilleurs Voeux de Kery James (j’ai une excuse : mon disquaire m’a dit qu’il
n’étais plus disponible en single).
Il m’a suffit de taper : MP3 + « Kery James » et tada! Une liste de plusieurs site apparue.
Je n’ai eu qu’a faire mon choix dans la liste proposée :

Google

Sympa, le Webmaster prévient que pour échapper à la restriction imposée par son hebergeur, il a du renommer les MP3 en PDF.
En plus cette méthode est mieux que Napster : ici, on est pas tributaire du gars qui est en face, puisqu’il
n’y en a pas. En se fiche de savoir si il est en haut-débit, si il va se déconnecter dans une minute, si il est parti au petit coin …

Bref, tout ça pour dire que ce n’est pas en flingant Napster que les maisons de disques et la Justice vont
arréter l’hemoragie.

Les boeufs qui assassinent la musique ont encore de beau jours devant eux. Reste à savoir qui tient le rôle des boeufs…

Quelques liens, à tout hasard :

Categories: Internet Tags:

Enlever le Logo de Windows au démarrage

Le logo dont je vous parle, c’est celui qui s’affiche lors du chargement de Windows : la fameuse
fenêtre sur fond de nuages…

On peut le supprimer facilement en ajoutant une simple ligne dans le fichier msdos.sys.

En toute logique, ce fichier se trouve dans le repertoire WINDOWS.

Ouvrez le avec un éditeur de texte ASCII (Edit, par exemple).

Si vous ne trouvez pas le fichier, ou si vous ne pouvez pas l’ouvrir, ou encore enregistrer les
modifications, il vous faudra peut être modifier ces attributs.

Ensuite, il vous faut rajouter la ligne suivante dans la section [Options] :


Logo=0

Categories: Registre et Windows Tags:

Ajouter des fonctions au menu contextuel

Le menu contextuel, c’est le menu qui apparaît lorsque l’on clique avec le bouton droit de la
souris.

Dans l’explorateur Windows, voici son l’allure qu’il peut avoir :







Parfois, on a envie de connaître le contenu d’un fichier dont on ne connaît pas forcement le type
(juste pour voir). On peut alors utiliser un editeur hexadécimal, ou tout simplement, NotePad.

Nous allons donc ajouter une commande dans ce menu nous permettant de lancer NotePad d’un simple
click, et de charger le contenu du fichier choisi.

Pour cela, il faudra modifier un petit peu la base de registre. Il existe de nombreux utilitaires
pour ça, mais nous nous contentrons du classique Regedit fourni avec Windows.

Normalement, Regedit se trouve dans le répertoire de Windows.

Voici la clef à ajouter :


HKEY_CLASSES_ROOT\*\shell\Ouvrir avec le &Bloc-Notes\command

Vous donnerai la valeur suivante à la clef finale :

notepad.exe %1





Maintenant, la fonction Ouvir avec le Bloc-Notes est disponible dans le menu :




Categories: Registre et Windows Tags:

Comment réaliser un écran de veille Windows ?

  1. Un écran de veille, qu’est ce que c’est ?
  2. Un exemple concret : Les balles rebondissantes
  3. Notes de dernière minute

On m’a souvent posé la question. Je dois moi-même avouer que j’ai longtemps cherché. Et vous-même, je suis sûr
que vous avez bataillé des heures et des heures, la preuve, vous lisez ces lignes…

L’exemple ci-dessous est en Visual Basic 5.0.

Ce langage a pour défaut d’être lent, car il est plus ou moins interprété, mais à comme grand avantage d’être simple à comprendre, même pour
un non pratiquant.
Vous pouvez télécharger la source ici :



Un écran de veille, qu’est ce que c’est ?


Vous allez rire quand je vais vous le dire si vous ne le saviez pas déjà. Les gars de chez
Microsoft ne se sont pas cassé la tête. Il ont bêtement changer l’extension EXE d’un fichier
exécutable en .SCR. Et ça suffit. C’est pas plus dur que cela. Bien sûr, après, il faut écrire
un peu de code.

Car vous l’aurez certainement remarqué, un écran de veille fonctionne de plusieurs façons :

  • Le mode Ecran de veille : C’est lorsque l’écran de veille fonctionne
    de façon normale, lorsque l’on clique sur le bouton ‘Aperçu’ ou lorsque l’on attend un
    certain temps.

  • Le mode Configuration : Ce mode permet de configurer l’écran de
    veille à l’aide de la boîte de dialogue appropriée. Quand vous cliquez sur le bouton
    ‘Configurer’ des propriétés d’affichage.

Pour lancer ces deux modes, Windows utilise la technique des arguments de commande. Vous

avez certainement fait du DOS. Lorsque vous tapez ‘DIR’, la liste des fichiers du répertoire en

cours apparaît. Maintenant, si vous tapez ‘DIR /W’, la liste des fichiers apparaît toujours, mais

en colonnes, car on a passé un argument de commande : /W.

Pour lancer le mode Ecran de veille, Windows utilise l’argument /S comme Screen Saver.

Pour le mode Configuration, c’est l’argument /C comme Config.


Un exemple concret : Les balles rebondissantes

Maintenant que la théorie a plus ou moins été détaillée, nous allons passer à un exemple pratique,

détaillé pas à pas en Visual Basic.

Allez dans Visual Basic et créez un nouveau projet ‘EXE standard’. Ajoutez à ce projet un module

et une autre feuille. Renommez le module en ‘basMain’, et les feuilles en ‘frmConfig’ et

‘frmScreensaver’. Dans la boîte de dialogue du menu ‘Projet/Propriété’, sélectionnez ‘Sub Main’

comme objet de démarrage.


Allez dans le module ‘basMain’ et créez la sub ‘Main’. Ecrivez ‘Public Sub Main’.

C’est le code situé dans cette procédure qui sera exécuté lors du démarrage. C’est donc ici

qu’il faudra traiter l’argument de la ligne de commande, soit /S, soit /C.

Pour reconnaître l’argument de commande, nous allons créer une fonction qui renverra l’argument

spécifié.

Voici le code de cette fonction :


Public Function GetArg(Arg As Integer) As String
Dim strArg() As String
Dim strCommand As String
Dim strChar As String * 1
Dim intLength As Integer
Dim intArg As Integer
Dim i
Dim j

strCommand = Command()
intLength = Len(strCommand)
For i = 1 To intLength
strChar = Mid(strCommand, i, 1)
If strChar = « / » Then
intArg = intArg + 1
ReDim Preserve strArg(1 To intArg)
strArg(intArg) = strArg(intArg) & strChar
For j = i + 1 To intLength
strChar = Mid(strCommand, j, 1)
If strChar = « / » Then
strArg(intArg) = Trim(strArg(intArg))
Exit For
End If
strArg(intArg) = strArg(intArg) & strChar
Next j
End If
Next i

If Arg <= 0 Then
GetArg = strArg(LBound(strArg))
ElseIf Arg > UBound(strArg) Then
GetArg = strArg(UBound(strArg))
Else
GetArg = strArg(Arg)
End If
End Function

Cette fonction permet de traiter facilement les arguments de commande. Il suffit de spécifier

le numéro de l’argument à retourner et le tour est joué !

Retournons maintenant à la Sub Main. Si l’argument est ‘/S’, on lance la feuille ‘frmScreensaver’.

Si c’est l’argument ‘/C’, c’est la feuille ‘frmConfig’ qui est lancée. Vous aurez remarqué que l’on

n’utilise que les 2 caractères les plus à gauche de l’argument. C’est parce que l’argument est suivi

d’un nombre que nous expliquerons dans un prochain sujet. Il faut également empêcher la création

de plusieurs instances de l’application, sinon, on va se retrouver avec une multitude d’écrans

de veille lancés en même temps, ce qui finirait par faire planter le PC.


Public Sub Main()
If App.PrevInstance = True Then End

Select Case Left(UCase(GetArg(1)), 2)
Case « /C »
frmConfig.Show
Case « /S »
frmScreensaver.Show
End Select

Do
Loop Until DoEvents = 0
End Sub

Pour tester votre écran de veille dans Visual Basic, il vous faut spécifier l’argument ‘/S’ ou

‘/C’ dans la boîte de dialogue de ‘Projet/Propriétés’.

Passons maintenant au code de l’écran de veille lui-même. Pour cela, placez-vous dans la procédure

‘Form_Load’ de la feuille ‘frmScreensaver’. Il nous faut redimensionner la fenêtre en plein

écran, faire disparaître la barre de titre et changer le fond en noir. Tout ceci doit se trouver

dans la procédure ‘Form_Load’. Vu que la propriété ‘BorderStyle’ est en lecture seule au moment

de l’exécution, vous devez la modifier dans la fenêtre ‘Propriétés’ :


Private Sub Form_Load()
With Me
.BackColor = vbBlack
.Move 0, 0, Screen.Width, Screen.Height
End With
End Sub

Comme vous le savez certainement, un écran de veille est arrêté par différents événements. Vous

devez donc décharger la feuille à l’aide du code suivant dans les procédures qui le demandent.

Le code est simple, c’est :


Private Sub Evénement()
Unload Me
End Sub

Vous devez écrire Unload Me pour les événements suivants :

  • Form_Click
  • Form_DblClick
  • Form_Deactivate
  • Form_KeyDown
  • Form_KeyPress
  • Form_KeyUp
  • Form_LostFocus
  • Form_MouseDown
  • Form_MouseMove (voir ci-dessous)
  • Form_MouseUp

Pour ‘Form_MouseMove’, il y a un petit problème. En effet, cet évènement est continuellement généré.

Il va donc falloir écrire du code pour éviter que l’écran de veille se termine même si la souris

ne bouge pas :


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static sngX As Single
Static sngY As Single
Static blnInit As Boolean

If blnInit = False Then
sngX = X
sngY = Y
blnInit = True
Exit Sub
End If

If sngX + 5 < X Or sngX - 5 > X Or sngY + 5 < Y Or sngY - 5 > Y Then Unload Me

End Sub

Vous pouvez tester. Déjà, ça peut faire un écran de veille. (Souvenez-vous de l’écran vide

fourni avec Windows). Mais il y a un petit détail pas net : on voit le curseur de la souris.

Vous devez donc créer un Curseur Invisible avec votre éditeur d’image favori. Chargez ce curseur

dans la propriété ‘MouseIcon’ et sélectionnez ‘99 – Custom’ dans ‘MousePointer’.

Nous allons maintenant faire rebondir nos fameuses balles… Pour cela, nous allons créer un

type pour la balle. Allez dans la partie ‘Déclararation’ du module ‘basMain’ et écrivez le code

suivant :


Option Explicit

Public Const REG_SECT_BALLES As String = « Balles »
Public Const REG_BALLES_NOMBRE As String = « Nombre »

Public Type TBalle
X As Single
Y As Single
CX As Single
CY As Single
Diam As Integer
End Type

Public Balle() As TBalle

L’Option Explicit, c’est selon que vous déclariez vos variables explicitement ou

implicitement.

Comme notre écran de veille va être un petit peu configurable, nous allons utiliser un nombre

de balles variables qui sera stocké dans la base de registre. C’est à ça que vont servir les

constantes que l’on a définies. Pour cela, nous allons créer une fonction qui renverra le nombre

de balles à utiliser :


Public Function GetNumBalles() As Integer

GetNumBalles = CInt(GetSetting(App.EXEName, REG_SECT_BALLES, REG_BALLES_NOMBRE, 1))

End Function

Allez dans la feuille ‘frmScreensaver’ est ajoutez un Timer. Renommer le en ‘tmrScreensaver’

et assignez la valeur 1 à la propriété ‘Interval’. Allez dans la procédure ‘tmrScreensaver_Timer’

et écrivez le code suivant :


Private Sub tmrScreensaver_Timer()
Static blnInit As Boolean
Dim i

If blnInit = False Then
ReDim Balle(GetNumBalles – 1)
FillStyle = vbFSSolid
For i = LBound(Balle) To UBound(Balle)
Randomize Timer
With Balle(i)
.X = Rnd * Screen.Width
.Y = Rnd * Screen.Height
.CX = Rnd * 100 * IIf(Rnd > 0.5, -1, 1)
.CY = Rnd * 100 * IIf(Rnd > 0.5, -1, 1)
.Diam = Rnd * 500
End With
Next i
blnInit = True
End If

For i = LBound(Balle) To UBound(Balle)
With Balle(i)
FillColor = BackColor
Circle (.X, .Y), .Diam, BackColor
.X = .X + .CX
.Y = .Y + .CY
FillColor = vbYellow
Circle (.X, .Y), .Diam, vbYellow
If .X – .Diam <= ScaleLeft Or .X + .Diam >= ScaleWidth Then .CX = -.CX
If .Y – .Diam <= ScaleTop Or .Y + .Diam >= ScaleHeight Then .CY = -.CY
End With
Next i
End Sub

Ca y est! Notre écran de veille est terminé! Mais il nous faut réaliser la deuxième partie de

l’écran de veille : le mode Configuration. Pour cela, allez dans la feuille ‘frmConfig’ et

assignez ‘Configuration de l’écran de veille’ à la propriété ‘Caption’ de la feuille et modifiez

la propriété ‘BorderStyle’ sur ‘3 – Fixed Dialog’

Dessinez (c’est à dire apposez) deux boutons de commande. Renommez l’un en ‘cmdOK’ et l’autre

en ‘cmdAnnuler’. Allez dans la procédure ‘cmdAnnuler_Click’ et écrivez le code suivant :


Private Sub cmdAnnuler_Click()
Unload Me
End Sub

Dessinez un Label et renommez sa propriété ‘Name’ en ‘lblExplain’ et écrivez ‘Nombre de balles :’

dans sa propriété ‘Caption’.

À coté, dessinez un contrôle TextBox et modifiez sa propriété ‘Name’ en ‘txtBalles’. Ensuite,

modifiez la propriété ‘Cancel’ sur ‘True’ et modifiez la propriété ‘Caption’ en écrivant ‘&Annuler’.

Allez dans la procédure ‘cmdOK_Click’ et écrivez le code suivant :


Private Sub cmdOK_Click()
If IsNumeric(txtBalles.Text) = False Then
MsgBox « Nommbre de balles incorrect ! », vbExclamation
Exit Sub
End If

SaveSetting App.EXEName, REG_SECT_BALLES, REG_BALLES_NOMBRE, txtBalles.Text

Unload Me
End Sub

Il faut aussi indiquer l’ancien nombre dans ce contrôle TextBox. Pour cela, placez-vous dans

la procédure ‘Form_Load’ de la feuille et écrivez :


Private Sub Form_Load()
txtBalles.Text = GetNumBalles
End Sub

Cette fois, c’est bel et bien fini. Il ne vous reste plus qu’à aller dans ‘Fichier/Créer Projet1′.

Dans le nom du fichier, changez l’extension .EXE en .SCR. Ensuite, déplacez ce fichier soit dans

le répertoire de Windows, soit dans le répertoire Système de Windows. Vous pouvez maintenant

l’utiliser comme un écran de veille standard.

Notes de dernière minute

Vous remarquerez cependant que cet écran de veille ne posséde pas d’aperçu. En effet, il

n’existe non pas deux mais trois arguments de la ligne de commande. Et ce toisième argument

(/P) sert à utiliser l’aperçu dans le petit écran de l’ordinateur du Panneau de configuration. Cet

argument est suivi d’un chiffre qui est l’handle d’un objet. Mais nous verrons prochainement

comment l’utiliser. Si vous avez des suggestions, n’hésitez pas…

Categories: Windows Tags:

Microsoft Word 97

Permet à Word d’écrire quelques lignes à votre place. Quelles lignes ? Vous verrez bien :

Ecrivez simplement =rand() puis appuyez sur Entrée

Categories: Oeufs de Pâques Tags:

Microsoft Word 97

Un flipper se cache dans Microsoft Word 97. Les flippers se commandent avec les touches Z et M.
Voici la procedure d’accès :

  1. Créez un nouveau document

  2. Ecrivez le mot BLUE, en majuscules

  3. Sélectionnez ce texte et mettez le en GRAS et en BLEU

  4. Placez vous à la fin de ce mot et rajoutez 2 apostrophes + 1 espace. Ça doit donner :



    BLUE''



  5. Affichez la boîte de dialogue À propos de Microsoft Word

  6. Maintenez enfoncées les touches CTRL et MAJ et cliquez dans l’image se situant
    à gauche de la boîte de dialogue

Categories: Oeufs de Pâques Tags:

Microsoft Windows 95

Permet d’afficher les noms de tous les developpeurs de ce *merveilleux* système d’exploitation.
Un fichier musical du type Midi est également créé dans le repertoire Media de Windows, dont le nom
est Clouds.mid.

Procédure :

  • Créez un nouveau dossier
  • Renommez ce dosser avec les noms ci-dessous :
    1. New Folder
    2. and now, the moment you've all been waiting for
    3. we proudly present for your viewing pleasure
    4. The Microsoft Windows 95 Product Team!
  • Double-cliquez sur le dossier
Categories: Oeufs de Pâques Tags:

Microsoft Excel 97

Cet easter eggs utilise la technologie DirectX et permet à l’utilisateur de voyager dans un univers en 3D. Et
oui, dans Excel.
La procedure est la suivante :

  1. Créer un nouveau classeur.
  2. Pressez la touche F5.
  3. Dans la boite de dialogue Atteindre, écrivez la réference X97:L97 dans la
    zone de texte Référence et validez.
  4. Appuyez sur la touche Tab (tabulation).
  5. Maintenez enfoncées la touche Shift (majuscule) et la touche Ctrl (control), et
    cliquez sur l’icone Assistant Graphique.
  6. Hop!
Categories: Oeufs de Pâques Tags: