unit D_tracelog; {Written by Denis Bertin le lundi du monday 20.03.2010 pour circle avec Delphi 7 (c) bEElOG} interface uses wbase,messages; const k_Tracelog = 'Tracelog'; type TDialogue_trace_logiques = class(wbase.Tdialog) public Constructor Create(parent:wbase.twindow); Procedure Setupwindow; override; Procedure WMcommand(var msg:TMessage); override; function Get_nom_fichier_trace_log(pc_nom_trace_log,pc_jour_obtenue:pchar):boolean; Procedure Afficher_temp_cumuler; private List_trace_par_jour:wbase.tlistbox; List_trace_log_contenue:wbase.tlistbox; Check_autoriser_trace_log:wbase.tcheckbox; end; {tdialogue_trace_logiques} implementation uses windows,wutil,SysUtils,wproche,wmenuk,z_open_file,u_date,wmain; const id_list_box_tracelog = 100; id_list_box_contenue = 101; id_check_autoriser_trace_log = 200; id_btn_trace_logique_cumuler = 300; Constructor TDialogue_trace_logiques.Create(parent:wbase.twindow); begin inherited Create(parent,'D_TRACE_LOG',0); Self.List_trace_par_jour:=wbase.tlistbox.Create(self,id_list_box_tracelog,100,0); Self.List_trace_log_contenue:=wbase.tlistbox.Create(self,id_list_box_contenue,100,0); Self.Check_autoriser_trace_log:=wbase.tcheckbox.Create(self,id_check_autoriser_trace_log,0); end; Procedure TDialogue_trace_logiques.Setupwindow; var pc_get_exe_path:pc1024; sr: SysUtils.TSearchRec; nom_de_ce_fichier:pc1024; begin inherited Setupwindow; if wproche.TDisque_window(parent).autoriser_trace_logique then Self.check_autoriser_trace_log.Check; {Trouver le nom du répertoire de l'éxecutable} wutil.get_exe_path(pc_get_exe_path); {Ajouter trace log} strcat(pc_get_exe_path,D_tracelog.k_Tracelog); {Créer ce répertoire s'il n'existe pas} wutil.Verif_et_creer_repertoire(pc_get_exe_path); strcat(pc_get_exe_path,'\*.txt'); {parcours des fichier du répertoire trace-log} if FindFirst(pc_get_exe_path, faAnyFile, sr) = 0 then begin repeat if sr.Name[1]<>'.' then begin strpcopy(nom_de_ce_fichier,sr.Name); nom_de_ce_fichier[4]:=#32; nom_de_ce_fichier[7]:=#32; nom_de_ce_fichier[10]:=#00; Self.List_trace_par_jour.AddString(nom_de_ce_fichier); end; until FindNext(sr) <> 0; FindClose(sr); end; end; {tdialogue_trace_logiques.Setupwindow} Procedure TDialogue_trace_logiques.WMcommand(var msg:TMessage); var pc_nom_trace_log:pc1024; File_in_trace:TextFile; string_ligne_in:string; pc_autoriser_trace_log,pc_jour_obtenue:pc100; begin inherited WMcommand(msg); case loword(msg.wparam) of id_check_autoriser_trace_log: begin if Self.Check_autoriser_trace_log.GetCheck=bf_checked then strcopy(pc_autoriser_trace_log,wmenuk.oui) else strcopy(pc_autoriser_trace_log,wmenuk.non); WritePrivateProfileString(wmenuk.circle,z_open_file.string_auto_trace_log,pc_autoriser_trace_log,wmenuk.vincent_ini); end; id_list_box_tracelog: begin enablewindow(GetItemHandle(id_btn_trace_logique_cumuler),Self.List_trace_par_jour.GetSelIndex<>-1); if hiword(msg.wparam)=lbn_SelChange then begin Self.List_trace_log_contenue.ClearList; if Self.Get_nom_fichier_trace_log(pc_nom_trace_log,pc_jour_obtenue) then begin {ok} {$ifdef debug} box(0,pc_nom_trace_log); {$endif debug} AssignFile(File_in_trace,pc_nom_trace_log); reset(File_in_trace); while not Eof(File_in_trace) do begin readln(File_in_trace,string_ligne_in); Self.List_trace_log_contenue.AddString(pchar(string_ligne_in)); end; CloseFile(File_in_trace); end; {ok} end; end; {id_list_box_tracelog} id_btn_trace_logique_cumuler:Afficher_temp_cumuler; end; {case} end; {TDialogue_trace_logiques.WMcommand} function TDialogue_trace_logiques.Get_nom_fichier_trace_log(pc_nom_trace_log,pc_jour_obtenue:pchar):boolean; var pc_get_exe_path,pc_get_non_liste:pc1024; begin if Self.List_trace_par_jour.GetSelIndex<>-1 then begin wutil.get_exe_path(pc_get_exe_path); strcat(pc_get_exe_path,D_tracelog.k_Tracelog); Self.List_trace_par_jour.GetSelString(pc_get_non_liste,pred(sizeof(pc_get_non_liste))); pc_get_non_liste[4]:='_'; pc_get_non_liste[7]:='_'; strcopy(pc_jour_obtenue,pc_get_non_liste); pc_jour_obtenue[4]:=#32; pc_jour_obtenue[7]:=#32; strcat(pc_get_non_liste,'.txt'); strcat(strcat(pc_get_exe_path,'\'),pc_get_non_liste); strcopy(pc_nom_trace_log,pc_get_exe_path); Get_nom_fichier_trace_log:=True; end else Get_nom_fichier_trace_log:=False; end; {TDialogue_trace_logiques.Get_nom_fichier_trace_log} procedure TDialogue_trace_logiques.Afficher_temp_cumuler; const k_temp_util = 91; var pc_nom_trace_log:pc1024; bool_initialisation:boolean; File_in_trace:TextFile; String_ligne_in:string; heure_initialisation,heure_cloturisation,seconde_cumuler:integer; pc_jour_obtenue,pc_seconde_cumuler_en_clair,pc_jour_en_clair,pc_formated,pc_afficher:pc100; out_heure:u_date.t_heure; in_date:u_date.t_date; pchar_pc_jour_en_clair:pchar; {Repère une chaine de caractère dans une autre, du début avec le nombre de caractère de celle comparée} function is_this_string_in(String_ligne_in,String_compare:string):boolean; var i:integer; ok:boolean; begin ok:=true; for i:=1 to length(String_compare) do begin if String_ligne_in[i]<>String_compare[i] then ok:=false; end; is_this_string_in:=ok; end; {is_this_string_in} function Quelle_heure_seconde(avec_cette_string:string):integer; var i:integer; bheure,bminute,bseconde,bool_begin:boolean; sheure,sminute,sseconde:string; un_caractere:char; function is_car_numerique(acar:char):boolean; begin is_car_numerique:=acar in ['0'..'9']; end; begin {Quelle_date} bheure:=False; bminute:=False; bseconde:=False; bool_begin:=False; sheure:=''; sminute:=''; sseconde:=''; for i:=1 to length(avec_cette_string) do begin {for i} un_caractere:=avec_cette_string[i]; if is_car_numerique(un_caractere) then begin {numérique} bool_begin:=true; if bheure=false then begin sheure:=sheure+un_caractere; end else if bminute=false then begin sminute:=sminute+un_caractere; end else if bseconde=false then begin sseconde:=sseconde+un_caractere; end; end {numérique} else begin {séparateur} if bool_begin then begin {un car num trouvé} if bheure=false then bheure:=true else if bminute=false then bminute:=true else if bseconde=false then bseconde:=true; end; {un car num trouvé} end; {séparateur} end; {for i} Quelle_heure_seconde:=strtoint(sheure)*3600+strtoint(sminute)*60+strtoint(sseconde); end; {Quelle_heure_seconde} begin if not Get_nom_fichier_trace_log(pc_nom_trace_log,pc_jour_obtenue) then exit; AssignFile(File_in_trace,pc_nom_trace_log); Reset(File_in_trace); bool_initialisation:=False; seconde_cumuler:=0; While not Eof(File_in_trace) do begin {while} readln(File_in_trace,String_ligne_in); if is_this_string_in(String_ligne_in,string_Ouverture) then begin bool_initialisation:=True; heure_initialisation:=Quelle_heure_seconde(String_ligne_in); end; if is_this_string_in(String_ligne_in,string_Fermeture) then begin if bool_initialisation then begin heure_cloturisation:=Quelle_heure_seconde(String_ligne_in); seconde_cumuler:=seconde_cumuler+heure_cloturisation-heure_initialisation; end; bool_initialisation:=False; end; end; {while} CloseFile(File_in_trace); if seconde_cumuler<>0 then begin u_date.Seconde_en_heure(seconde_cumuler,out_heure); u_date.Heure_en_pchar(out_heure,pc_seconde_cumuler_en_clair); in_date.Jour:=strtoint(pc_jour_obtenue[8]+pc_jour_obtenue[9]); in_date.mois:=strtoint(pc_jour_obtenue[5]+pc_jour_obtenue[6]); in_date.Annee:=strtoint(pc_jour_obtenue[0]+pc_jour_obtenue[1]+pc_jour_obtenue[2]+pc_jour_obtenue[3]); u_date.date_to_pchar_en_clair(in_date,pc_jour_en_clair); LoadString(hinstance,k_temp_util,pc_formated,pred(Sizeof(pc_formated))); pchar_pc_jour_en_clair:=@pc_jour_en_clair; wvsprintf(pc_afficher,pc_formated,@pchar_pc_jour_en_clair); strcat(strcat(pc_afficher,pc_seconde_cumuler_en_clair),'.'); Windows.MessageBox(self.hwindow,pc_afficher,wmain.k_DenisDraw,MB_OK+MB_ICONINFORMATION); end; end; {TDialogue_trace_logiques.Afficher_temp_cumuler} end.