[DELPHI] Créer une fenêtre de LOG ?

Créer une fenêtre de LOG ? [DELPHI] - Delphi/Pascal - Programmation

Marsh Posté le 17-08-2011 à 08:09:15    

Bonjour,
 
j'ai un soft qui affiche une fenêtre de LOG pdt un long traitement (c'est juste une fiche dans laquelle se trouve un memo, j'ajoute une ligne au memo contenant la commande passée, puis j'éxécute la commande).
Le problème c'est que cette commande est longue à traiter (5 à 15 minutes).
Pdt ce temps, le memo de la fenêtre n'est pas accessible (je ne peux pas copie rle texte par exemple avec un clic droit).
 
J'ai donc regardé du côté des threads, mais franchement je n'y comprends rien.
 
Quelqu'un peut-il m'expliquer exactement comment faire ?
Peut-être puis-je me passer des threads ?
 
En tout cas voilà ce que j'ai fait !
 

Citation :

unit UnitThreadLOG;
 
interface
 
uses
  Classes,sysutils,unitlog;
 
type
  LOG_Thread = class(TThread)
  private
    { Déclarations privées }
    FFormLOG:TFormLOG;
  protected
    procedure Execute; override;
    procedure OnTerminateProcedure(Sender: TObject);
  public
  constructor Create(Suspended : Boolean;s:string);
  end;
 
 
implementation
 
constructor LOG_THREAD.Create(Suspended: Boolean;s:string);
begin
FreeOnTerminate := True;
inherited Create(Suspended);
Formlog := TFormLog.Create(nil);
FormLOG.Show;
formlog.memo1.Lines.Add(s);
OnTerminate := OnTerminateProcedure;
end;
{ LOG_Thread }
 procedure LOG_THREAD.OnTerminateProcedure(Sender: TObject);
begin
//if Assigned(FORMLOG) then
//FormLOG.Release;
end;
procedure LOG_Thread.Execute;
begin
  { Placez le code du thread ici }
// if Assigned(FormLOG) then
end;
 
end.


 
 
et dans mon prog :  
 

Citation :

Procedure TFormProgress.WTVtoTS(nfs, repdest, nomfic: string);
var commande, s1: string;
  sizewtv, sizeTS: Int64;
  doscommand1: tdoscommand;
  i, longext: integer;
  f: textfile;
 
  var
MyThread_2 : LOG_THREAD;
begin
  commande := '"' + javapath + '" -cp "' + cheminappli +
    'logiciels\remuxtool_1.2.4\remuxtool.jar" util.WtvToMpeg -i "' + nfs +
    '" -o "' + repdest + nomfic + '.ts" -all';
     
  MyThread_2:=LOG_THREAD.Create(false,commande);
 
.....


 
Je vois bien la fenêtre apparaître, mais pas le texte !!!!
 
Merci pour votre aide.

Reply

Marsh Posté le 17-08-2011 à 08:09:15   

Reply

Marsh Posté le 17-08-2011 à 08:54:47    

dans le thread, faut mettre une instruction relative au thread qui "ralentit" ce dernier le temps de permettre au cpu de faire traiter un bout des autres processus en cours. Mais je ne me rappelle plus la commande. Je crois qu'elle finit par "process"...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-08-2011 à 09:50:22    

application.processmessages ???

Reply

Marsh Posté le 17-08-2011 à 09:56:39    

oui, c'est ça


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-08-2011 à 10:34:03    

ok, mais concrétement je le mets où le application.processmessages ? dans le execute ?

Reply

Marsh Posté le 17-08-2011 à 11:22:39    

dans le thread qui consomme tout le CPU, c'est-à-dire WTVtoTS.
 
Je vois que tu lances dans ce thread une ligne de commande. Regardes si y'a pas des options à ce sujet...


Message édité par rufo le 17-08-2011 à 11:24:19

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-08-2011 à 10:45:31    

Une méthode simple
 
Utiliser Gexpert pour Delphi (addon très pratique et gratuit)
 
Utiliser l'unité  DbugIntf, elle gère une fenêtre complètement indépendante de log
 
Utiliser la procédure SendDebug.
 
L'unité contient d'autres procédures pour logger

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed