ECRAN DE VEILLE CLUBINSCR V 2.1

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 6 déc. 2005 à 20:16
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 - 1 août 2006 à 19:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34945-ecran-de-veille-clubinscr-v-2-1

Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
1 août 2006 à 19:27
Enfin la version finale de ClubinScr.
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
5 juin 2006 à 11:52
Voila, deuxième mise à jour de mon écran de veille. Plus de bugs (normalement mais si vous en trouvez rapportez-les moi et je corrigerais tout ça).
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
1 mai 2006 à 17:57
merci Idefix,

Les premiers commentaires ne sont plus d'actualité si je puis dire puisqeu mon écran de veille à évolué depuis mais je me suis apreçu d'un bug au niveau de la lecture des fichiers audios. Je vais corriger ça au plus vite...

@+
Matt
cs_Idefix57 Messages postés 43 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 25 février 2013
1 mai 2006 à 16:55
La j'ai de quoi apprendre ....
je vais suivre les commantaires de f0xi et les autres aussi ,
a tete reposée :p

Bravo , et merci

a+ idefix
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
23 avril 2006 à 11:52
Oui je donnais juste ça pour les gens qui ne savaient pas ou les données se trouvaient.
Merci pour l'explication quand-même.
@+
Matt
Utilisateur anonyme
23 avril 2006 à 11:18
ça je le sais, j'ai très bien vu ou se trouve les donnés je t'expliquais juste pourquoi il ne faut pas utiliser le registre pour ce genre d'application.
@+
Cirec
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
23 avril 2006 à 09:50
Oui en fait j'utilise normalement un installateur (InnoSetup) qui peut me créer ou supprimer les valeurs dans le registre mais là il faut les virer à la main. Les valeurs se trouvent ici:
HKEY_LOCAL_MACHINE \ SoftWare \ ClubinScr .

@+
Matt
Utilisateur anonyme
22 avril 2006 à 17:15
Salut,
Matt ta solution de troquer le fichier ini avec la base de registre pour enregistrer les paramètres de l'application ne me semble pas être le meilleur choix.

Imagine : ton application tourne sur une machine x et le propriétaire décide de supprimer ton programme (yavé kapa) :-), bon c'est fait , mais les données précédemment enregistrées dans la base de registre, elles, ne seront pas supprimées. :-(
Voilà tu répètes ça avec plusieurs applications et résultat Windows devient de plus en plus lent au démarrage à cause de la base de registre qui est encombré par des enregistrements inutiles.

Alors je sais que Windows disait que c'était fait pour ça et qu'il valait mieux utiliser la base de registre que le fichier ini. Si l'application possède un désinstalleur qui efface les traces dans le registre alors oui éventuellement, mais pour une simple application que l'on sait qu'elle va tout laisser en plan la je dit non.

Il y a déjà suffisamment de programme (même des payants) qui laisse leurs poubelles en partant que ce n'est pas utile de faire pareil.

Restons propre...
Tout comme tu libères un objet (que tu as créer) après utilisation il faut penser à supprimer ce que l'on écris dans la base de registre et si c'est pas possible de le garantir comme ici je pense que le mieux c'est de s'abstenir.

@+
Cirec
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
16 avril 2006 à 08:15
Oui merci Florenth, c'est là où j'été allé en premier et je crois que je vais y retourné. Je n'y avait pas pensé.
http://nono40.developpez.com/tutoriel/delphi/screensaver/

Tout est expliqué et j'ai tout testé moi même: ça marche
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
15 avril 2006 à 19:58
J'oubliais, pour Windows 98, il gère le mot de passe tout seul ou il faut que je fasse un petit truc spécial?
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
15 avril 2006 à 19:49
Oui je sais sauf que je n'arrive pas à mettre le mot de passe pour mon écran. Quand je coche la case pour le mot de passe j'applique, je lance mon écran et rien ne ce passe avec le MdP.
Je viens re troquer le fichier ini pour la suvegarde dans la base de registre donc je ne vais pas tarder à remettre à jour.
Si c'est pour WindowsXP, ce n'est pas à ton programme de gèrer le mot de passe.
Windows revient alors automatiquement à l'écran d'accueil et tu entres le mot de passe de ton compte
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
15 avril 2006 à 09:22
Prochainement le mot de passe... Vous me conseillez quelle méthode pour le cryptage?
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
13 avril 2006 à 18:20
Voila la petite mise à jour attendue...
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
12 avril 2006 à 14:21
Je ne vais pas tarder à mettre à jour ma source. Un grand merci à Cirec qui m'a corrigé les erreurs dans le code et optimisé.
J'oubliais de préciser que l'on peut aussi lire de la musique pendant l'affichage de l'écran.

@+ Matt
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 avril 2006 à 13:30
tout a fait cirec, creer un fichier ini par defaut alors qu'il y a possibilitée de charger ces valeurs en dur, c'est inutile... sur le coups je les ais laissées mais elles sont en effet inutiles.

De plus matt, tu as vus l'utilisation beaucoup plus simple des methodes readinteger, readbool ect... elles empechent l'utilisation abusive des fonctions de conversions, accelerant par le fait le chargement du programme.

voila... d'autre ameliorations seront a apporter dans tout le programme. Je te conseil egalement d'aller voir mon tuto sur les booléens pour que tu vois ce qu'on peut faire et ce qu'il ne faut pas faire.

bonne progression, bon code et a bientot pour le beta-test.

ps : il manque les unités RB* pour certains composants, merci de fournir au moins les DCU relatives ou d'utiliser les composants standards de delphi. ^^
Utilisateur anonyme
7 avril 2006 à 12:17
Salut,
pour les buttonClick oui mais pour le FormCreate la je dis non.

Les testes sur SectionExists sont inutiles. En fait quand on cherche à lire une valeur dans un fichier Ini et que Section où Ident n'existe pas c'est la valeur par défaut qui est renvoyé (SpinEdit1.Text := ReadString('Timer','Value','90')) ici c'est 90 qui est par défaut.

C'est juste du code pour rien et même si le fichier Ini n'éxistait pas les valeurs par défaut seraient quand même transmises. Et le fichier Ini est écris seulement si l'utilisateur à cliqué sur Ok.

Mais bon Matt pourras s'en rendre compte avec la version modifier ...

@+
Cirec
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
7 avril 2006 à 09:35
Oui.... merci F0xi je vais chager tout ça.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 avril 2006 à 03:24
holala ...

procedure TForm3.SpeedButton1Click(Sender: TObject);
begin
OpenPictureDialog1.InitialDir := ExtractFilePath(Edit1.Text);
if OpenPictureDialog1.Execute then
Edit1.Text := OpenPictureDialog1.FileName
else
Edit1.clear;
end;



procedure TForm3.Button2Click(Sender: TObject);
begin
OpenDialog1.InitialDir := ExtractFilePath(Edit2.Text);
if OpenDialog1.Execute then
Edit2.Text := OpenDialog1.FileName;
end;



procedure TForm3.Button1Click(Sender: TObject);
begin
if not Timer1.Enabled then begin
Button1.Caption := '&Stop test';
Timer1.Interval := SpinEdit1.Value;
end else begin
Button1.Caption := 'Te&st timer';
end;
Timer1.Enabled := not Timer1.Enabled;
end;



procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FichierIni := TIniFile.Create(Chemin+'ClubinCfg.ini');
with FichierIni do begin
WriteString('Timer','Value',SpinEdit1.Text);
WriteString('Picture','Value',Edit1.Text);
WriteInteger('Color','Value',ColorBox1.Selected);
WriteInteger('AlphaBlend','Value',TrackBar1.Position);
WriteString('MusicFile','Value',Edit2.Text);
WriteString('BackgroundPicture','Value',Edit3.Text);
WriteBool('Beep','Value',CheckBox1.Checked);
WriteBool('Music','Value',CheckBox2.Checked);
WriteBool('Effects','Value',RadioButton1.Checked)
end;
FichierIni.Free;
end;



procedure TForm3.FormCreate(Sender: TObject);
begin
Chemin := ExtractFilePath(Application.ExeName);
FichierIni := TIniFile.Create(Chemin+'ClubinCfg.ini');
with FichierIni do begin
if not SectionExists('Timer') then WriteString('Timer','Value','90');
if not SectionExists('Picture') then WriteString('Picture','Value','');
if not SectionExists('BackgroundPicture') then WriteString('BackgroundPicture','Value','');
if not SectionExists('Color') then WriteInteger('Color','Value',clBlack);
if not SectionExists('AlphaBlend') then WriteInteger('AlphaBlend','Value',255);
if not SectionExists('Beep') then WriteBool('Beep','Value',false);
if not SectionExists('Music') then WriteBool('Music','Value',False);
if not SectionExists('MusicFile') then WriteString('MusicFile','Value','');
if not SectionExists('Effects') then WriteBool('Effects','Value',false);

SpinEdit1.Text := ReadString('Timer','Value','90')
Edit1.Text := ReadString('Picture','Value','')
Edit3.Text := ReadString('BackgroundPicture','Value','')
ColorBox1.Selected := ReadInteger('Color','Value',$000000)
TrackBar1.Position := ReadInteger('AlphaBlend','Value',255)
CheckBox1.Checked := ReadBool('Beep','Value',False)
CheckBox2.Checked := ReadBool('Music','Value',False)
Edit2.Enabled := CheckBox2.Checked;
Button2.Enabled := CheckBox2.Checked;
Edit2.Text := ReadString('MusicFile','Value','')
RadioButton1.Checked := ReadBool('Effects','Value',False);
end;
end;
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
16 mars 2006 à 19:20
Voila mon écran de veille inclu la musique ...

S'IL VOUS PLAIT DES COMMENTAIRES JE ME SENS SEUL...
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
15 mars 2006 à 19:25
Une p'tite erreur c'est produite la source n'est pas au niveau expert mais débutant... Autant pour moi.

Matt
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
14 mars 2006 à 10:38
J'ai aussi ajouté des try...except pour eviter les bugs si une donnée est fausse ou inexistante et aussi la possibilitée de faire
un test timer et la possibilité d'avoir un beep quand l'écran de veille s'ouvre. Je vais essayer d'intégrer un bout de code pour avoir une image en fond de fiche et plusieurs effets d'images.
A ce propos quelqu'un serait-il comment faire apparaitre une image
avec un effet de fondu et la disparaitre toujours avec un effet de fondu???
Merci d'avance à ceux qui me répondrons.

@+ Matt
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
12 mars 2006 à 20:37
Merci beaucoup Florenth ça me fait super plaisir.
Je vais faire une autre mise à jour j'ai vu 2 tout p'tits bug et j'ai ajouté une fonctionnalité.
En fait ce projet avait "dormi" pendant ces 3 mois je mis suis remis avant hier
Et ben, voila enfin quelque chose de consistant !!
Allez, pour l'effort et le mérite de ta source, je te mets 10/10.

Je t'avais prévenu que tu allais t'améliorer ;-)

Bonne continuation à toi ...
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
12 mars 2006 à 10:11
VOILA ENFIN LA MISE A JOUR (APRES 3 MOIS). Ca y est l'écran de veille est complet...
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
19 déc. 2005 à 11:32
Je voulais savoir un petit truc sinon, ça n'a rien a voir avec ça mais c'est pas grave...
Est-ce que l'on peut faire payer des images que l'on a fait avec un logiciel de photo payé style PhotoShop? Si oui combien???
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
19 déc. 2005 à 11:19
Bopn alors variable ou pas variable?????
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
19 déc. 2005 à 10:42
Y'a une mise à jour qui pousse...
Tout à fait d'accord avec toi f0xi.
J'ai choisi le Delphi par hasard (j'hésitais avec le C++ mais comme les compilos paraissaient moins bien ...) et j'ai bien fait. Le fait que cela est un langage strict m'a réellement aidé.

Pour ces opérateurs, et oui il faut faire avec. Enfin, sans. Pour se consoler, on a toujours Inc() et Dec() qui ramplacent déjà ++, +=, --, -= mais pour les autres ... rien !
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
9 déc. 2005 à 20:55
@Florenth / Cirec : alors, pour l'astuce de cirec, comme je l'ai dis sur mon code source, c'est pas mal, en effet cela evite d'aller plus loin pour initialisé les Globales et c'est deja bien.
les locales, aucun probleme vraiment puisque generalement elle sont initialisée deux ou trois lignes plus bas dans la fonction ou la procedure.

sinon il est vrai que les operateurs present en C++ ou PHP sont bien pratique ++ -- .= += -= ect... c'est la seule petite chose que je regrette sous delphi.

pour le plantage, Delphi et plus lourd mais beaucoup plus stable car plus strict au niveau de la syntaxe et declaration. Et du C++ ou PHP fait par un delphiiste avec l'esprit delphi (code strict) ne planteras que rarement voir jamais.
C++ autorise la compilation d'un programme bugé ... pas delphi ... la moindre erreur empeche la compilation, sauf erreur de /0 ou d'apel d'index hors-indice mais la, c'est au coder de faire attention et de "securisé" les routines pour eviter ce probleme.

voila voila
Ah j'oubliais: mets BorderStyle à bsNone et là ça marche.
Mais jettes un coup d'oeil à ce lien http://nono40.developpez.com/tutoriel/delphi/screensaver/ parce que ton écran de veille n'en est pas un (il te manque la gestion des parametres)
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
9 déc. 2005 à 19:15
... en fait c'est déja fait (j'ai oublié de relire ma source...) et ca ne cache pas la barre des taches. D'ou la capture d'écran(on voit la barre des taches...)
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
9 déc. 2005 à 19:12
OK, merci Florenth
Oups, j'ai oublié de me relire ... Désolé
Cirec > Mais cel ane fonctionne qu'avec les variables globales, pas les locales. Je le reprécise histoire de dire que cela n'est pas pasreil que les constantes typees affectables.

Matt 261 > Met WindowState à wsMaximized et FormStyle à fsStayOnTop.
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
9 déc. 2005 à 08:01
Je suis allé voir en effet le site que tu m'avait indiqué. Il va falloir que j'y retourne pour voir tout ce qu'il me reste à faire...
Sinon Florenth je n'avais pas pris ton com pour une sous-estimation de mon expérience même s'il me reste encore beaucoup de chose à découvrir.
Grâce aux 6 tiemr de moins et aux effet de fermeture j'ai gagné 1 ko sur mon application, elle ne fait plus 532ko mais 531ko...
Je vais refaire une mise a jour sous peu, je me suis apreçu que j'avais oublié d'enlever une animation...(formClose).

@ f0xi

Quand je parlais de cacher la barre des taches c'etait la recouvrir avec mon application...
désolé si je me suis mal exprimé.
Utilisateur anonyme
9 déc. 2005 à 01:19
Bonsoir à vous,

>>f0xi
au lieu d'écrire ceci:
const
{$j+}
MoveLeft : boolean = true;
MoveUp : boolean = true;
{$j-}

implementation
Tu peux faire ceci:
Var
MoveLeft : boolean = true;
MoveUp : boolean = true;

implementation

Les variables globales peuvent être initialiser en même temps que leurs déclarations

@+
Cirec
@ Matt621 : c'est vrai, je n'avais pas pensé au fait que tu avais commencé le Delphi bien avant de t'inscrire. Mille excuses pour ton expérience sous-estimée ;-) Mais mon commentaire reste valide pour autant.

Sinon, as-tu visité le lien que je t'indique ? Parce qu'il te reste des choses à faire avant que cela soit un écran de veille complet.

++
@ f0xi:
Je n'ai jamais utilisé les constantes typées affectables ni fait de C++ où l'on peut initialiser les variables. Il m'a toujours été dit que c'était déconseillé et un petit tout dans l'aide me le confirme :
"Dans les versions précédentes de Delphi et de Borland Pascal, les constantes typées étaient toujours modifiables, ce qui correspond au mode {$J+}. L'ancien code source utilisant des constantes typées affectables doit être compilé en mode {$J+}, mais pour les nouvelles applications, il est conseillé d'initialiser les variables et de compiler votre code en mode {$J-}." Extrait de l'aide de Delphi au sujet de la directive {$J-}

"je n'oublis pas la directive $J- pour cloturé la zone": eh tiens, encore heureux ;-)

Perso je ne m'y ferais pas pour une raison simple de lisibilité du code. On dit qu'il y a beaucoup plus de programmes C qui beuggent comparé aux programmes Delphi.
Est-ce que les Delphistes ont plus d'expérience ? Je ne crois pas.
Par contre, les seules différences (notables) qui séparent les deux langages trouchent aux variables :
- Le fameux I ++ ou I -- ou I += 4 ou I *= 6 ... qu'on envie presque en Delphi
- la déclaration des variables. Alors qu'en Delphi, les variables se déclarent dans la section "var"; celles du C++ se posent un peu où l'on veut.
Et je pense que cela induit énormement en erreur. Pour le peu de pages PHP que j'ai créées, je peux te dire que 8 fois sur 10 où ça plantait, c'était une erreur de ces p***** de variables.

Bref, chacun fait comme il veut.
Pour ce qui est des records, c'est toujours d'actualité ne t'inquiète pas. Même sous .NET.
Par contre, je préfère utiliser des classes plutot que des objets pour des raisons de souplesse. Mais là, je n'ai rien contre.

Sur ce, bonne prog'
++ Flo
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
8 déc. 2005 à 17:18
Normalement je lui et demandé de compiler en .scr sauf erreur de ma part donc je me suis peut-être planté ou j'ai oublié...
Merci beaucoup f0xi pour tes encouragements
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
8 déc. 2005 à 00:51
pour cacher la barre de tache de windows il suffit juste d'aller dans les options :

demarre > parametres > panneau de conf > barre des taches et menu demarrer...

sinon en effet j'avais pas capter au depart mais ton ScreenSaver n'en est pas réellement un, car il genere un EXE et pas un SCR ... no comment.

Ton code n'est pas barbare, disont qu'il montre bien que tu debute. nous sommes tous passer par la. donc point honte a avoir. nous aussi nous avons deja créer des routines toute pourrite (j'aime "pourrite" et pas "pourrie", pourrite c'est marrant a prononcé), des boucles qui boucles sur des boucles de routines pourrite ...
Meme parfois, avec le recule et l'experience on se demande comment ces "boulzors" de programme pouvait fonctionner et surtout comment on a pus croire a ce moment la que c'etait des programmes "whoaaaa trop d'la balle"...



@Florenth :
tu sais ce qu'elles te disent mes constantes typées affectables!?! (hihihi)
moi gn'aime bien les CTA, je trouve ça pratique, comme les types record et object ... desolé c'est du code focile que je me traine depuis pascal 4.0 ...
et de plus c'est egalement l'abus de php, javascript et c++ ou on peu affecter la valeur d'une variable directement dans la declaration de cette derniere ... ce qui est plus pratique que d'aller 150 lignes plus bas pour l'initialisée. maintenant cela n'a pas réelement d'effet positif ou negatif sur le programme, du moins je n'ai jamais rencontrer de disfonctionnement innerants a l'utilisation massive des constantes typées affectable.
J'ai vus un tuto de GrandVizir a ce sujet, je vais surrement le relire, j'y trouverais peut etre une explication qui me convainquerais du contraire.
Mais je te fait confiance Florenth, juste que pour une fois tu a legerement oublié d'argumenter ton propos (etonant meme) ... et tu sais maintenant que j'apprecie grandement tes demonstrations qui permettent toujours de mieux ecrire un code propre, leger et performant.
Pour moi les constantes typées affectables permettent de gagner du temps dans les declaration/initialisation (tu noteras tout de meme que je n'oublis pas la directive $J- pour cloturé la zone)...
Alors je n'attend plus qu'une chose de ta part : convains moi que les constantes typées affectable ne sont plus d'actualitée dans delphi.


bon courage a toi Matt pour ton apprentissage et bienvenus dans le monde merveilleux de Delphi.
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
7 déc. 2005 à 13:07
Si quelqu'un sait aussi comment cacher la barre des taches, je n'y arrive plus.
Je vais mettre à jour la source avec tout ce que vous m'avez dit.
Encore merci...
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
7 déc. 2005 à 12:56
Oui...(hum) le code est un peu barbare comme je l'avait dit...
Merci pour les coms ...
Utilisateur anonyme
7 déc. 2005 à 00:23
Un petit exemple avec un seul timer


implementation

uses Math; // pour l'utilisation de randomrange
{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
Image1.Top:= RandomRange(1, Screen.DesktopHeight - Image1.Height) ;
Image1.Left:= RandomRange(1, Screen.DesktopWidth - Image1.Width);
Timer1.enabled:=True;
end;

et dans l'évenement OnCreate de Form1 tu ajoutes
Randomize; // pour initialiser

et tu peux retirer tous les autres timers ^_^
pour le reste suit les conseils de f0xi c'est pas le nombres de lignes qui fait un bon prog mais plutôt l'inverse

@+
Cirec
Oups je remarque que je me suis un peu 'laché' on va dire. Evidemment, tout cela est à prendre positivement et avec le sourire ;-) On est tous passés par le stade de débutant, et l'erreur la plus importante à mon gout est de vouloir y sortir (trop ?) rapidement.

++ Flo et bonne prog' evedemment
Sinon, concernant directement le code, la simplicité est de mise, c'est bien. Ca évite qu'il y ait du code supperflu nuisant la compréhension de ta source qui est un "écran de veille" je le rapelle. Ce n'est pas la peine d'y mettre des effets graphiques de je ne sias trop quoi: ce n'est pas le but de cette source.

Bref, écran de veille, c'est vide dit. Comment tu l'integre à windows cet écran de veille ?
Il existe en fait tout un tas de normes qui reglementent un ecran de veille sous Windows.
Fais un tour de ce côté là et tu comprendras où je veux en venir : http://nono40.developpez.com/tutoriel/delphi/screensaver/

Enfin, comme tu dis, tu débutes. sur ta fiche de membre, il est écrit : "arrivé le 02/11/2005" Ne te presees pas trop, prend le temps de décuvrir le Delphi. En un mois, on ne fait pas grand chose. Et quand tu te sentiras prêt, envoie nous tes programmes et là, ce sera nettement mieux!
Arrg, f0xi, n'utilise pas les constantes typees affectables (mode J+). ça fait franchement pas beau et pas très propre.
Perso, je ne m'en sert que pour le design pattern Singleton parce que c'est e moyen le plus adapté.

Si tu as besion d'initialiser une varible globale, fais le dans l'évenement OnCreate de la fiche ou bien dans la seciton initialization de l'unité.
Je ne lis que le .pas mai sje vois une utilisaiton abusive et surtout assez fastidieuse des timers. Un seul sufirait et il suffit de tester la collision avec les bords de l'écran pour replacer ton image.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 déc. 2005 à 20:16
Ah ... bien bien bien ...

bon deja, no comment sur les 36 timers present sur la fiche ^^

bon par ou commencer ... mmmm ...

deja, tu pourrais reduire la declaration pour quitter dans une procedure et appeler cette procedure dans les evenements de la fiche :

procedure QuitterScreen;
begin
Application.Terminate;
AnimateWindow(Form1.Handle,2000,AW_BLEND or AW_HIDE);
end;

et dans :
form1.keypress, form1.mousemove, form1.mousedown
appeler cette procedure.


pour l'animation du jpg, tu peu faire comme cela :

const
{$j+}
MoveLeft : boolean = true;
MoveUp : boolean = true;
{$j-}

implementation

procedure TForm1.Form1Create(sender : tobject);
begin
// evite le clignotement de l'image
form1.doublebuffered := true;
// empeche les click sur l'image
image1.enabled := false;
// possition l'image au milieu de la fiche
image1.left := (form1.width div 2) - (image1.width div 2);
image1.top := (form1.height div 2) - (image1.height div 2);
// demarre l'animation
timer1.interval := 10;
timer1.enabled := true;
end;

procedure TForm1.Timer1OnTimer(sender : tobject);
begin
with image1 do begin
if MoveLeft then left := left - 2 else left:= left + 2;
if MoveUp then top := top - 2 else top := top + 2;

if Left <= 0 then MoveLeft := false;
if Left >= form1.ClientWidth-Width then MoveLeft := true;
if top <= 0 then MoveUp := false;
if top >= form1.ClientHeight-Height then MoveUp := true;
end;
end;



voila, bon courage pour la suite.
Rejoignez-nous