galaad545
Messages postés11Date d'inscriptiondimanche 12 février 2006StatutMembreDernière intervention 8 septembre 2018 10 oct. 2007 à 20:56
je viens d'avoir le meme pb quel ect la manip à accomplir?siou plé?
cs_Michel34
Messages postés79Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention27 juin 2011 28 févr. 2007 à 18:38
Salut Cantador,
a priori ca viendrais du fichier AVI , je vais mettre en place les
fichiers modifiés , et comme ma conseillé Foxi , j'ai elimine le compo
TRegistryEdit et j'ai incorporé des procedures maison , avec ca je vais
mettre 4 AVI pour avoir le choix.
je lance tout ca ,vers 21 heures , il me faut verifier quand meme si tous
les fichiers sont OK, il restera encore un peu de taf , mais ca ne gene
pas le prog tel quel.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 28 févr. 2007 à 13:04
je ne parlerai qu'en présence de mon avocat !
salut Michel34,
euh, d'abord, ta source est en niveau "débutant" et il aurait été
préférable d'indiquer qu'il faut installer le compo TRegistryEdit.
je travaille sous XP/SP2, DELPHI 7.
la compil OK, mais à l'exécution j'ai un os dans le module Uvisuel.
"exception dans le module facteur.exe, impossible d'ouvrir l'AVI".
et j'aimerais bien pouvoir tester ton truc, car ça sent bon à priori..
@+
cs_Michel34
Messages postés79Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention27 juin 2011 28 févr. 2007 à 12:19
Salut Cantador
Peux tu en dire un peu plus !!!
quel defaut ? que se passe t'il ? sur quel system est tu? quelle version de Delphi?
je demande car j'ai commencer les modifs que Foxi m'a indique
et en meme temps quelques ameliorations.
Alors toutes infos sur d'eventuels disfonctionnements sont les bienvenues.
A+
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 27 févr. 2007 à 22:40
Michel34,
J'ai un truc qui cloche avec Logo.avi.
???
cs_Michel34
Messages postés79Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention27 juin 2011 24 févr. 2007 à 18:37
Voila une analyse comme je les aimes, ca me permet de comprendre
un peu plus les methodes a employer.
je te remercie et je vais commencer a entreprendre les modifs.
A+
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 24 févr. 2007 à 18:29
ah aussi,
vus que l'unité Regedit est une Surcouche de TRegistry, pourquoi ne pas utiliser TRegistry directement ?
surtout que cette unité n'est pas parfaite et qu'il y a pas mal d'erreur dedans. bref t"etonne pas si un jours tu as des problemes avec ce composant.
surtout qu'il n'ameliore en rien les performances de ton programme, bien au contraire.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 24 févr. 2007 à 18:23
ça m'as l'air pas mal, sauf qu'il y'a deux ou trois trucs qui ne vonts pas ou qui peuvent etre ameliorer :
>> nouveau parametre : OnlyCurrentUser, permet de selectionner
>> si le demarrage automatique a lieu pour toute les sessions ou seulement celle en cours.
procedure ExecutionAutomatique(const Valeur: Boolean; const OnlyCurrentUser : boolean = false);
const
// selecteur de clef
KSM : array[boolean] of HKEY = (HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER);
begin
with TRegistry.Create do
// on oublis pas de proteger le code avec Try Finally qui
// assure la liberation des objets créer dynamiquement
try
RootKey := KSM[OnlyCurrentUser];
if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false) then
begin
if Valeur then
WriteString(ExtractFileName(ParamStr(0)), ParamStr(0))
else
DeleteValue(ExtractFileName(ParamStr(0)));
// on oublis pas de fermer la clef en cours meme si c'est fait de façon automatique
CloseKey;
end;
finally
Free;
end;
end;
>> on mets toujours les "String" en parametres "Const" ceci ameliore les performances.
on ne passe pas TMemo mais TStrings ce qui est plus rapide et permet une compatibilitée
avec d'autres objets de texte comme TRichEdit, ComboBox, ListBox ect...
le parametre OverWrite permet d'ecraser l'ancien journal
utilisation :
SauverJournal('c:\monappli.log',Memo1.Lines);
SauverJournal('c:\monappli.log',ListBox1.Items);
procedure SauverJournal(const Journal: string; Strings : TStrings; const Overwrite : boolean = false);
const
// selecteur de mode d'ouverture du fichier
OWM : array[boolean] of word = (fmOpenReadWrite, fmCreate);
begin
// on utilise un TFileStream, economie des ressources memoire et
// pas de gestion lourde et fastidieuse a coder.
// la condition assure l'ouverture du fichier dans le bon mode
with TFileStream.Create(Journal, OWM[OverWrite or (not FileExists(Journal))]) do
try
// on se positionne a la fin du fichier
Seek(0, soFromEnd);
// on ecrit le texte
WriteBuffer(PChar(Strings.Text)^, Length(Strings.Text));
finally
// on libere le stream
Free;
end;
end;
>> comme pour SauverJournal, on utilise TStrings et non TMemo
utilisation :
LireJournal('c:\monappli.log',Memo1.Lines);
LireJournal('c:\monappli.log',ListBox1.Items);
procedure LireJournal(const Journal: string; Strings : TStrings);
begin
// on prepare Strings pour les modification, performance ameliorée
Strings.BeginUpdate;
// pas besoin de plus
Strings.LoadFromFile(Journal);
// on signale a strings que les modifications sont finies.
Strings.EndUpdate;
end;
function LanceAppliAttenteFin(const NomFichier: string): boolean;
var
StartInfo : TStartupInfo;
ProcessInformation: TProcessInformation;
begin
ZeroMemory(@StartInfo, sizeof(StartInfo));
StartInfo.cb := sizeof(StartInfo);
if CreateProcess(nil, PChar(NomFichier), nil, nil, true, 0, nil, nil, StartInfo, ProcessInformation) then
// WaitForSingleObjet peu echouer, on renvois donc le resultat en consequence
result := WaitForSingleObject(ProcessInformation.hProcess, INFINITE) <> WAIT_FAILED
else
result := false;
end;
>> ne pas oublier de modifier les declarations d'interface des fonctions.
>> on peu eviter certains Case ... of
procedure TFOptions.T2Timer(Sender: TObject);
begin
if Mail.Connected then
begin
Mail.Disconnect;
T2.Enabled := False;
Tempo := 0;
T1.Enabled :T2.Tag 0;
end;
FOptions.Led;
end;
>> dans les procedures des fiches, evite d'appeler la Variable F{nom de la fiche} ça ne sert a rien et surtout cela crée une dependance a cette variable qui peu provoquer un disfonctionnement total si on tente de deriver la fiche en question :
var
FMessage: TFMessage;
PROCEDURE TFMessage.FormActivate(Sender: TObject);
...
BEGIN
Info.Clear; // ou Self.Info.Clear
...
VLigne := Info.Items.Add; // ou Self.Info.Items.Add
...
END;
10 oct. 2007 à 20:56
28 févr. 2007 à 18:38
a priori ca viendrais du fichier AVI , je vais mettre en place les
fichiers modifiés , et comme ma conseillé Foxi , j'ai elimine le compo
TRegistryEdit et j'ai incorporé des procedures maison , avec ca je vais
mettre 4 AVI pour avoir le choix.
je lance tout ca ,vers 21 heures , il me faut verifier quand meme si tous
les fichiers sont OK, il restera encore un peu de taf , mais ca ne gene
pas le prog tel quel.
28 févr. 2007 à 13:04
salut Michel34,
euh, d'abord, ta source est en niveau "débutant" et il aurait été
préférable d'indiquer qu'il faut installer le compo TRegistryEdit.
je travaille sous XP/SP2, DELPHI 7.
la compil OK, mais à l'exécution j'ai un os dans le module Uvisuel.
"exception dans le module facteur.exe, impossible d'ouvrir l'AVI".
et j'aimerais bien pouvoir tester ton truc, car ça sent bon à priori..
@+
28 févr. 2007 à 12:19
Peux tu en dire un peu plus !!!
quel defaut ? que se passe t'il ? sur quel system est tu? quelle version de Delphi?
je demande car j'ai commencer les modifs que Foxi m'a indique
et en meme temps quelques ameliorations.
Alors toutes infos sur d'eventuels disfonctionnements sont les bienvenues.
A+
27 févr. 2007 à 22:40
J'ai un truc qui cloche avec Logo.avi.
???
24 févr. 2007 à 18:37
un peu plus les methodes a employer.
je te remercie et je vais commencer a entreprendre les modifs.
A+
24 févr. 2007 à 18:29
vus que l'unité Regedit est une Surcouche de TRegistry, pourquoi ne pas utiliser TRegistry directement ?
surtout que cette unité n'est pas parfaite et qu'il y a pas mal d'erreur dedans. bref t"etonne pas si un jours tu as des problemes avec ce composant.
surtout qu'il n'ameliore en rien les performances de ton programme, bien au contraire.
24 févr. 2007 à 18:23
>> nouveau parametre : OnlyCurrentUser, permet de selectionner
>> si le demarrage automatique a lieu pour toute les sessions ou seulement celle en cours.
procedure ExecutionAutomatique(const Valeur: Boolean; const OnlyCurrentUser : boolean = false);
const
// selecteur de clef
KSM : array[boolean] of HKEY = (HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER);
begin
with TRegistry.Create do
// on oublis pas de proteger le code avec Try Finally qui
// assure la liberation des objets créer dynamiquement
try
RootKey := KSM[OnlyCurrentUser];
if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false) then
begin
if Valeur then
WriteString(ExtractFileName(ParamStr(0)), ParamStr(0))
else
DeleteValue(ExtractFileName(ParamStr(0)));
// on oublis pas de fermer la clef en cours meme si c'est fait de façon automatique
CloseKey;
end;
finally
Free;
end;
end;
>> on mets toujours les "String" en parametres "Const" ceci ameliore les performances.
on ne passe pas TMemo mais TStrings ce qui est plus rapide et permet une compatibilitée
avec d'autres objets de texte comme TRichEdit, ComboBox, ListBox ect...
le parametre OverWrite permet d'ecraser l'ancien journal
utilisation :
SauverJournal('c:\monappli.log',Memo1.Lines);
SauverJournal('c:\monappli.log',ListBox1.Items);
procedure SauverJournal(const Journal: string; Strings : TStrings; const Overwrite : boolean = false);
const
// selecteur de mode d'ouverture du fichier
OWM : array[boolean] of word = (fmOpenReadWrite, fmCreate);
begin
// on utilise un TFileStream, economie des ressources memoire et
// pas de gestion lourde et fastidieuse a coder.
// la condition assure l'ouverture du fichier dans le bon mode
with TFileStream.Create(Journal, OWM[OverWrite or (not FileExists(Journal))]) do
try
// on se positionne a la fin du fichier
Seek(0, soFromEnd);
// on ecrit le texte
WriteBuffer(PChar(Strings.Text)^, Length(Strings.Text));
finally
// on libere le stream
Free;
end;
end;
>> comme pour SauverJournal, on utilise TStrings et non TMemo
utilisation :
LireJournal('c:\monappli.log',Memo1.Lines);
LireJournal('c:\monappli.log',ListBox1.Items);
procedure LireJournal(const Journal: string; Strings : TStrings);
begin
// on prepare Strings pour les modification, performance ameliorée
Strings.BeginUpdate;
// pas besoin de plus
Strings.LoadFromFile(Journal);
// on signale a strings que les modifications sont finies.
Strings.EndUpdate;
end;
function LanceAppliAttenteFin(const NomFichier: string): boolean;
var
StartInfo : TStartupInfo;
ProcessInformation: TProcessInformation;
begin
ZeroMemory(@StartInfo, sizeof(StartInfo));
StartInfo.cb := sizeof(StartInfo);
if CreateProcess(nil, PChar(NomFichier), nil, nil, true, 0, nil, nil, StartInfo, ProcessInformation) then
// WaitForSingleObjet peu echouer, on renvois donc le resultat en consequence
result := WaitForSingleObject(ProcessInformation.hProcess, INFINITE) <> WAIT_FAILED
else
result := false;
end;
>> ne pas oublier de modifier les declarations d'interface des fonctions.
>> on peu eviter certains Case ... of
procedure TFOptions.T2Timer(Sender: TObject);
begin
if Mail.Connected then
begin
Mail.Disconnect;
T2.Enabled := False;
Tempo := 0;
T1.Enabled :T2.Tag 0;
end;
FOptions.Led;
end;
>> dans les procedures des fiches, evite d'appeler la Variable F{nom de la fiche} ça ne sert a rien et surtout cela crée une dependance a cette variable qui peu provoquer un disfonctionnement total si on tente de deriver la fiche en question :
var
FMessage: TFMessage;
PROCEDURE TFMessage.FormActivate(Sender: TObject);
...
BEGIN
Info.Clear; // ou Self.Info.Clear
...
VLigne := Info.Items.Add; // ou Self.Info.Items.Add
...
END;
voila, bon code.