VIDEO CREATOR

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 30 juil. 2006 à 00:24
 florenth - 30 juil. 2006 à 14:40
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/38836-video-creator

Bon Francky, je suis sur que tu as recu mon MP mais je poste ici (exception qui confirme la règle ?) pour mieux quand même recevoir 10 commentaires négatifs que pas de commentaire du tout. J'ai vécu la deuxième situation et je peux dire que c'est autant voire plus frustrant.

Voila, c'est tout.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 juil. 2006 à 14:22
Ca sera ma dernière intervention (suite à une décision pour répondre à Thierry) :

*Il est évident que quand on réalise une application de cette grosseur, on rencontre des beugs lors de la conception. Donc il est évident que j'ai testé la création de la clé dans la base de registre et la création des fichiers temporaires.

*Les messages d'alertes citées par Nicolas n'avaient que peu d'importance : le projet était compilable et la propriété opérationnelle (coupure du son). C'est comme certains Warning du compilateur que l'on neutralise. De plus je n'avais pas vu ces alertes lors de la compilation.

*Les composants Indy sont des grands standards que l'on possede tous je pense : je suis surpris que des initiés ne connaissent pas ces derniers.

*Petit conseil : Avant de dire qu'un soft ne se compile pas, il serait bien de s'intérroger sur le pourquoi avant de se précipiter pour demander s'il manque un fichier *.pas ou d'affirmer qu'un dossier ne se crée pas. Ca éviterai les 4 betises qui ont été postées.

*Par rapport aux autres versions de Delphi je n'ai pas testé : je n'ai pas D6 d'installer chez moi.

*Les images : il s'agit de skins que j'ai téléchargé et non pas d'images faites avec Paint. Vlan

*Prise en main : déjà les hints sont présents maintenants. Il suffit de lire donc plus d'excuse. Deuxièmement il y a des icones :

-Loupe : c'est pour voir
-Le dossier ouvert : c'est pour prendre des fichiers.
-Le dossier barré : c'est l'inverse ca me semble logique.
-Le texte : pour écrire un texte
-Le microphone : pour parler
-La palette : pour dessiner
-La caméra : pour filmer
-Le projecteur : pour visionner

Il faut etre un peu persspicace aussi

De plus, la meilleure facon de tester un soft est d'essayer. En passant 10min dessus meme un gamin (j'ai fais le test avec ma nièce de 4 ans) peu comprendre les fonctionnalités. De plus vous avez les sources avec la propriété Name des boutons.

*Pour répondre à JLen : je ne savais pas pour le sleep(0). Merci j'ai appris quelque chose.

Enfin pour résumer : merci pour cet assassinat général. Perso je conseil aux gens de ne plus poster de sources un peu développées. 8 messages totalement négatifs sans un mot de remerciement pour un soft conséquent, complexe, novateur qui résume beaucoup de choses et donc qui est riche d'enseignement pour les débutants. Continuer à faire des daubes ou des projets rikiki, on vous dira merci.

Sur ce bonne continuation à vous.
regismarion Messages postés 22 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 29 mai 2008
30 juil. 2006 à 13:15
oups
finalement le soucis venait du fait que je le compilais avec D6 perso
avec D7 ça roule
regismarion Messages postés 22 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 29 mai 2008
30 juil. 2006 à 09:10
Bonjour Francky, dur à prendre en main ton soft pense à ceux qui ne l'ont pas créé, le dossier temporaire de ton soft ne se crée pas ainsi que le fichier avec extension 'fvc 'qui est demandé au click du btn correspondant
peux tu m'éclairer merçi je ne suis qu'un débutant autodidacte
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 juil. 2006 à 09:07
salut francky,
indy ,n'est pas installé sur les versions personnelles.
un sleep(0) est une interruption de ....17ms (gestion des threads par windows) donc un sleep(0) ou un sleep(17)auras éxactement le même effet.
Un timer n'est jamais qu'un thread avec un event et une propriété il peut très souvent remplacer un thread. C'est un moyen simple de faire de la programmation évènementielle sans se compliquer la vie tant que l'on ne demande pas une grande précision sur le timing (d'ailleurs windows ne le permet pas à moins de geler les messages ce qui relève souvent de la haute voltige et est particulièrement périlleux avec plantage garanti)
@+
jlen
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 juil. 2006 à 06:17
Pendant que j'y suis,

FSA := nil; // On devrait tous revoir nos codes alors car jamais je n'ai vu ca dans aucun source.

Le close : j'ai fais un test tout simple. Une form et rajout de cette fonction. Résultat : Gros beug. De plus cette fonction admet un gros défaut : si une boucle est appelé tu l'as dans l'os. J'utilise halt(0) car cette fonction est plus propre que application.terminate.

Quand à la création de composant dynamique : je ne comprendai jamais les gens qui s'archarnent à faire cela pour des composants standards. Sans parler que le code et la gestion augmente dans ce cas de figure. Si on va dans ce sens, il serait bien plus intelligent de créer ses propres fenetres afin de se passer de l'unité Forms et gagner 300ko. Puis quitte à créer des Timers autant faire des Threads.

@+
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 juil. 2006 à 04:47
Pour répondre à Nicolas il faut utiliser Indy : il est installé par défaut avec D2005 je crois. désolé pour l'oublie.

Je vais prendre mon temps pour répondre à f0xi : je ne suis absolument pas d'accord avec aucun de tes commentaires :

*Je trouve que tu manques d'objectivités : déjà c'est un travail conséquent que je poste et pas un simple source fait de 3 unités...

-Les graphismes : tu trouves mes images moches, c'est ton opinion. Les gouts et les couleurs ca ne discutes pas. On a le sentiment que l'image que j'ai réalisé est dégueu à voir (j'ai eu aussi ce sentiment quand tu as fais cette remarque à Monsieur DeBiars). Par contre si tu as 10000F à nous passer pour acheter photoshop on est prenneurs.

*Les sleep, les processMessages, les Timers, l'indentation, le tableau et le tout reste : c'est du chipotage. Je ne vais pas me lancer dans un débat qui va rimer à rien. Mais tu as tord:

Je vais prendre 3 exemples

*Tester avec 2000 images (je doute que tu ai été jusque là) sans les ProcessMessages(partie TreeView), tu as le droit un freezage.

*Lecture à la volée du son : le sleep(0) : ben essayer juste de copier un wav dans un memorystream et de le jouer sans le sleep : ton wav de 2min il va durer 15sec Il sera pas jouer intégralement

*Rajouter 3 timers pour des déplacements de Forms alors que tu peux t'en passer et ca ne change rien (sauf un code plus compliqué et l'augmentation de la taille de ton application).

On va dire qu'en ce moment tu vas pas tres bien f0xi : surement la canicule. Des vacances te feraient du bien. Tu me sembles fatiguer ;).

@+
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 juil. 2006 à 03:43
pour les sous-etendues :

WaveOutGetVolume(integer(WAVE_MAPPER), @Volume);


pour les try ... finally

Procedure ExtractAndPlaySound(const AudioFile : string; const BegAF,EndAF : Cardinal);
Var
MSA : TMemoryStream;
FSA : TFileStream;
Begin
FSA := nil;
MSA := nil;
Try
FSA := TFileStream.Create(AudioFile,fmOpenRead);
MSA := TMemoryStream.Create;
FSA.Position:=BegAF;
MSA.CopyFrom(FSA,EndAF);
MSA.Position:=0;
SndPlaySound(MSA.Memory,SND_MEMORY or SND_ASYNC);
// Sleep(0); <-- ne sert a rien !
Finally
FSA.Free;
MSA.Free;
End;
End;


quitter une application :

procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ChangeSlowlyLuminosity(1); // On revient à une luminosité maximum
//halt(0); << !!!!!!!!!!!!!!???
end;


sleep ?? et les performances alors ?

procedure TMain.ImageFilesAdd_BtClick(Sender: TObject);
begin
Image_Files_Ed.Text:=''; // On vide l'Edit
With OpenDialog1 do // Avec l'OpenDialog
Begin
Filter:='Fichier Bmp|*.bmp|Fichier Jpeg|*.jpg'; //On définit les filtres
Options:=[OfAllowMultiSelect]; // On se met en multisélection
// Application.ProcessMessages; << ne sert a rien ici
If Execute then
Begin
// Sleep(10); << !!!?
// Application.ProcessMessages; << ne sert a rien ici non plus
AddFileInTreeView(OpenDialog1.Files,ImageFiles_TreeView,ImageList1); //S'il executé on place le nom des fichiers images dans le TreeView
End;
End;
end;

application.processmessage se place dans les longues boucles avec barre de progression ou elements visuel montrant a l'utilisateur qu'un traitement est en cours (curseur sablier)

Screen.Cursor := crHourGlass;
for i := 0 to BigChiffre do begin
FuckingRoutineOfDeath;

if (i mod 2) {2..3..5 ect...} = 0 then
Application.ProcessMessage;
end;
Screen.Cursor := crDefault;

on peu meme appeler processmessage selon le temps pris ...

P := GetTickCount;
Screen.Cursor := crHourGlass;
for i := 0 to BigChiffre do begin
FuckingRoutineOfDeath;

if GetTickCount-P >= 2000 then begin { toute les deux secondes }
P := GetTickCount;
Application.ProcessMessage;
end;
end;
Screen.Cursor := crDefault;


ensuite, plutot que des sleep pour les animations utilisation de timer ...
histoire de ne pas freezer l'application.
creation de timer dynamique ou autres methodes de timer rapide.



Function TImeInMin(ATime: String) : Integer; // On format l'heure pour une comparaison ultérieure
Var
Hour,Min : integer;
begin
Hour:=StrToInt(Copy(ATime,1,2));
Delete(ATime,1,3);
Min:=StrToInt(Copy(ATime,1,2));
Result:=Hour*60+Min;
end;

RHAAAAAA!!!

// Cents fois plus rapide ::
Function TimeInMin(const ATime: TTime {ou TDateTime}) : integer;
Var H,M,S,Z : word;
begin
SysUtils.DecodeTime(ATime, H,M,S,Z);
Result := (H*60)+M;
end;



var N : array[0..2] of array [0..255] of ...
>>
var N : array[0..2,0..255] of ...
sinon imagine les declaration de matrices x4 ou x8
array of array of array of array of array ... Oo'


Function FormatADuring(During : LongInt) : string; // Formatage de l'heure en string du type hrs:min:sec
Var
Hour,Min,Sec : integer;
HourStr,MinStr,SecStr : string;
begin
If During<0 then Hour:=0 Else Hour:= floor(During div 3600); // Floor arrondi à l'entier inférieur
If During<0 then Min:=0 Else Min:= floor((During-Hour*3600)div 60);
If During<0 then Sec:=0 Else sec:= floor(During-Hour*3600-Min*60);
If Hour<10 then HourStr:='0'+IntToStr(Hour) Else HourStr:=IntToStr(Hour); // Permet de rajouter un zéro au cas ou. Exemple 1heure devient 01heure
If Min<10 then MinStr:='0'+IntToStr(Min) Else MinStr:=IntToStr(Min);
If Sec<10 then SecStr:='0'+IntToStr(Sec) Else SecStr:=IntToStr(Sec);
Result:=HourStr+':'+MinStr+':'+SecStr;// Résultat sous la forme Hrs:Min:Sec
End;

re RHAAAAA!

Function FormatADuring(const During : integer) : string;
begin
result := format( '%.2d:%.2d:%.2d',
[{H=} During div 3600,
{M=} (During div 60) mod 3600,
{S=} During mod 60]);
end;



Sinon pour le reste,

Code bien commenté mais assé chaotique malgré l'organisation des unités.

Ta technique d'indentation de code est trop contraignante a lire ... hesite pas a faire de la vraie mise en page de ton code, d'utiliser des symboles visuels pour typer tes commentaires :
{>> nouvelle etape dans la routine }
{ commentaire simple }
{(!) avertissement sur une methode, valeur ect...}
{<!> note de developpement (presque identique a <?>) }
{(?) reponse a un probleme/question ... }
{<?> optimiser/revoir le code ci dessous }

Les commentaire "//" ne devrait servir que dans les phases debug/test pour desactiver des portions de code :
{<!> a refaire}
//J := J + J + 1;
//J := J*2+i;
inc(J,J+1);

l'interface necessite une meilleure reflexion (manque d'intuitivitée) on a beaucoup de mal a s'y retrouver et a savoir comment se servir du programme.
penser a activer et remplir les Hints des bouttons sans textes.

ne pas utiliser Paint pour faire des graphismes d'interface ... beuark X[
The Gimp est gratuit et aussi performant de photoshop, aprés quelques heures dessus tu pourrat faire des graphismes de meilleure qualitée et donc fournir un contenus mieux presenté.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
30 juil. 2006 à 00:41
Salut Jlen ,
Merci de me le preciser parce que Francky en parle nulle part ... ou alors je suis aveugle !

Ciao
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
30 juil. 2006 à 00:33
-->nicolas il faut installerINDY
@+
jlen
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
30 juil. 2006 à 00:27
[Avertissement] Unit_Images_Sound_Videos.pas(183): L'expression constante dépasse les limites de sous-étendue
[Avertissement] Unit_Images_Sound_Videos.pas(193): L'expression constante dépasse les limites de sous-étendue

Si ca peut t'aider ...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
30 juil. 2006 à 00:24
Salut

[Erreur fatale] Unit_EffectForm.pas(5): Fichier non trouvé : 'IdHTTP.dcu'

N'aurais tu pas oublié un fichier ???

Ou faut il installer un truc suppl qd meme ???

En tout cas dommage ...
Rejoignez-nous