Quelle est la meilleure façon d'implémenter l'écran des éclaboussures dans Delphi? P>
3 Réponses :
Il n'y a rien de techniquement difficile à propos de l'écran des éclaboussures, c'est juste une forme qui apparaît puis s'en va. Donc, la meilleure façon de mettre en œuvre un écran Splash à Delphi est la suivante: obtenir un graphisme pour dessiner un pour vous! Em> p>
Créer un formulaire, apportez son Drop A Timer sur le formulaire (ceci sera utilisé pour vous assurer que l'écran de l'éclaboussure reste up pour au moins em> une certaine période. p> Voici le code que j'ai dans mon formulaire Splash: p> dans le formulaire de formulaire: p> dans votre fichier de projet, faites quelque chose comme ceci: p> (la plupart de ce code a été écrit en haut de ma tête, il pourrait ne pas compiler correctement hors tension) p> p> Formstyle code> =
fsstayontop code>, définissez le style de bordure sur Aucun et sa légende à vide. Cela créera une forme qui n'a pas de barre de légende en haut. Drop A code> TIMAGE CODE> sur le formulaire et chargez votre bitmap dans.
Petit ajout: Pour ne pas interférer avec le débogage dans l'IDE, il est préférable de définir Formstyle: = fsstayontop; code> dans le gestionnaire code> ercreate code> du formulaire, mais seulement si
debughook code> n'est pas défini. Sinon, les éclaboussures obscurciront une partie de l'IDE. Si vous êtes assez malchanceux de déboguer avec un moniteur, c'est-à-dire.
Oui, c'est une bonne idée. En fait, j'ai mon logiciel, vérifiez la ligne de commande pour / nosplash code> et exécutez le programme avec cela dans le débogueur
Encore mieux, sautez le "fsstayontop". Votre écran Splash n'a pas d'entreprise obscurcissant mes autres applications, d'autant plus que cela ne se produit que si votre écran Splash est à l'écran pendant si longtemps, je vous ennuie de le regarder et passez à une autre application plus divertissante.
C'est aussi vrai ... si je pouvais garantir qu'il est resté au-dessus d'autres fenêtres de mon programme, je le ferais, mais je suggère que mes clients utilisent l'option de ligne / nosplash nosplash nosplash si elles se sentent vraiment fortement à propos de ça.
@Nat: À propos du "/ Nosplash". Cela n'a de sens que si l'écran des éclaboussures est purement décoratif. La tendance actuelle consiste à maintenir l'écran Splash à l'écran pendant que l'application se charge et affiche une sorte d'indication de progression de ce qui se passe. Dans un tel contexte, la suppression de l'écran de splash ne sert aucun but: la demande prend à peu près au même moment pour commencer, mais ne rien afficher pendant le chargement. Une autre astuce que j'utilise pour les applications client-serveur consiste à éteindre l'écran des éclaboussures dans un très beau formulaire "login". De cette façon, l'utilisateur voit l'écran des éclaboussures mais n'est pas ennuyé par celui-ci.
Tout vrai. Ce sont tous des chevaux pour des cours vraiment ... je n'ai pas encore quelqu'un de se plaindre, mais je comprends le sentiment. Je pense que cela dépend vraiment de la durée de votre écran Splash.
Faites attention à ce que GetTickCount s'enroule après 40 jours de disponibilité. J'ai été mordu par celui-là.
@Scott w: corrigé, il utilise désormais un intT64 et gettickcount64
Code manquant: Procédure Tsplashform.formDestroy (Sender: Tabject); Commencer Splashform: = nil; finir; Sans ce code, le "Si attribué (SplashForm)," est toujours vrai, même après la destruction du formulaire.
Au lieu de FSTARTCTIKS, je pense que c'est plus intelligent d'utiliser Fstopticks et qu'en tant que "gettickcount64 + ctementout" dans la création, et modifier le si "si (gettickcount64> fstoptacks) et oktoclose alors", puis le calcul n'est effectué qu'une seule fois.
@Bennybechdk: Merci pour ça ... j'ai ajouté le formulaire de formidable. En ce qui concerne le calcul du temps imparti, quel problème de performance essayons-nous exactement de réparer ici? Je vous défie de mesurer un bénéfice perceptible des performances dans une utilisation du monde réel de cet écran Splash.
@Nat: I La prestation de performance n'est pas significative. Il s'agissait simplement d'un commentaire général sur la manière de mettre en œuvre une vérification du délai d'attente. Le code est donc le plus efficace dans tous les cas. C'est juste un appelé sur le style de codage.
@Bennybechdk: OK, désolé :) merci pour votre contribution
@Nat dans quelle unité est gettickcount64 déclaré sous? Delphi me dit que c'est non déclaré.
@PetersMileyFace Vous pouvez simplement utiliser gettickcount code> ... Il a été ajouté comme une suggestion ... mais cela n'a pas vraiment besoin d'être là.
Voici comment je le fais: Créez d'abord une nouvelle unité en ajoutant un formulaire vide à votre projet (fichier-> nouveau-> formulaire), appelez cette unité Splashy, définissez le style de bordure (formulaire) sur BSnone et Set Son nom de nom de 'SplashScreen' ou quel que soit votre désir, concevez-la (formulaire) en concevant d'abord une image à l'aide de MSPAINT ou une autre chose, puis laissez tomber un composant d'horaire sur le formulaire et ouvrez le fichier d'image à travers celle-ci, ajoutez la ligne: 'SplashScreen: TsplashScreen ; (Agian, vous pouvez nommer ce que vous voulez) 'à une section procedure TForm1.FormCreate(Sender: TObject);
var
splash : Tsplashscreen;
begin
Splash := TSplashScreen.Create(Application);
Splash.Show;
Sleep(1000); //as long as you want screen to be displayed 1000 = 1 second
Splash.Hide;
Splash.Free;
end;
Dormir (peu importe) de votre fil principal est une mauvaise idée: votre interface graphique gèlera! Essayez de faire glisser une autre fenêtre sur votre écran Splash pendant que vous dormez et vous verrez pourquoi. L'idée de NAT d'utilisation d'une minuterie est meilleure car le traitement des messages peut au moins continuer, repeindre l'écran des éclaboussures si nécessaire.
N'oubliez pas de penser à la position de formulaire / sur des moniteurs à double écran.