D6 :attente utilisateur lors du lancement d'un traitement

ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004 - 19 oct. 2004 à 08:47
ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004 - 25 oct. 2004 à 08:29
Bonjour,

J'ai une fenêtre delphi qui permet de lancer un traitement qui peut prendre quelques minutes et j'aimerais que l'utilisateur voit quelque chose de pertinent pendant l'attente, une fenêtre avec un gif, une progress bar (mais le problème de la progress bar c'est qu'il faut lui donner un temps d'exécution et dans mon cas je ne le sais pas ...). Je ne sais pas du tout comment faire ...

merci d'avence

12 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
19 oct. 2004 à 09:30
Hello,

Tu fais quels genres de traitements??

++,
JMP.
0
ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004
19 oct. 2004 à 10:02
Je lance des traitements plsql, je n'ai donc pas la main...
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
19 oct. 2004 à 10:17
En faite ce que je voudrais savoir c'est est ce que tu peux quantifier la grandeur de ton traitement. Est ce que tu sais que tu vas rechercher 200 items ou autre chose. OU est ce que tu fais juste des filtres sur tes bases?

JMP77.
0
ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004
19 oct. 2004 à 13:42
Non je ne peux pas quantifier la grandeur de mon traitement, en faite mon traitement consiste à constituer des factures je peux en avoir 100 comme 1500 par jour et donc tout ça est réaliser en PLSQL. Pour cette raison je ne vois pas comment utiliser une progress bas, alors je me demandais si je ne pouvais pas afficher un petit dessin animé pendant que l'utilisateur attend le retour. Dès que les utilisateurs doivent attendre plus de 5 secondes ils se demandent si le traitement n'est pas planté ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
19 oct. 2004 à 13:50
Alors si tu veux simplement une animation essaye avec un Tanimate. Tu as des videos deja incluses qui sont la propriété CommonAvi ou sinon tu peux en charger une si tu veux.

Dis moi si cela te satisfait?

Bonne prog,
JMP.
0
jobtunisieyasser Messages postés 123 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 23 mars 2007
20 oct. 2004 à 11:23

mais c'est bizart que tous le monde n'a pas compris son besoin
J'ai déja trouvé cette solution dans le forum

tu insére dans ta boucle :

Application.ProcessMessages;

tu aura un rafraichissement de votre ecran
et comme ça tu pourra afficher une gif ou une bande vidéo de décapitation d'un soldat ... :-p

@_______=-Jobtunisie-=_______@
0
ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004
20 oct. 2004 à 11:34
Ben ce serait bien mais je n'ai pas de boucle !!!
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
21 oct. 2004 à 21:59
Tu sais bien le numero de la requtte effectuée ou pas ??
Si oui tu mets dans un timer (puisque t'as pas de boucles) Interval = 250 ou tu mets
ProgressBar1.max:=Nombres d'items a traiter;
ProgressBar1.Position:=Numero de l'item traite;


En esperant ne pas etre hors-sujet,
Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
22 oct. 2004 à 08:27
Salut ema29,

Une technique qui te permettrait de ne pas figer ton ecran, serait d'inclure les traitements plsql dans un thread, ce qui empècherait de figer ton application. Il te resterait a afficher une boite de dialogue informant l'utilisateur qu'il doit patienter durant ce traitement. Bien sure tu n'auras aucun moyen de quantifier l'attente. Mais au moins tu ne figeras plus ton application durant les traitements plsql.

Bonne Prog, ;)

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
0
ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004
22 oct. 2004 à 09:21
Alors j'ai utilisé un thread qui lance n'importe quel traitement plsql
et à la suite du lancement du thread j'affiche une boite de dialogie avec un gif qui montra à l'utilisateur qu'il faut attendre, c'est tou à fait ça que je voulais, ça fonctionne hyper bien.

Je vous remercie tous de votre aide :)

Emmanuelle
0
jobtunisieyasser Messages postés 123 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 23 mars 2007
22 oct. 2004 à 09:34
j'aimerais bien avoir un exemple d'un traitement plsql dans un thread. pour que je puisse comprendre plus la solution...
MErci ema29 ,Loulibier :)

@_______=-Jobtunisie-=_______@
|..................NOURON ALA NOUR.......................|
0
ema29 Messages postés 6 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 25 octobre 2004
25 oct. 2004 à 08:29
Et oula et ouili comment j'ai réussi à faire fonctionner la chose...

//////////////////////////////////////////////////////////////////////////////////////////////////////////
//FONCTIONNEMENT
//La form principale qui lance TDM_baseTools.LanceAttente avec soit un TOracle Query ou un TOracleDataSet
//Le dataModule qui lance le thread (U_THREAD) puis l'appel à la fenêtre de dialogue (F_DIALOGUE_ATTENTE)
//
//Petit truc bizarre je n'ai pas réussi à créer la F_DIALOGUE_ATTENTE depuis l'unité U_THREAD ...
//Alors c'est le datamodule qui la crée et le thread qui la détruit à la fin de son traitement
//////////////////////////////////////////////////////////////////////////////////////////////////////////

//L'unité qui lance le thread : Data module TDM_baseTools
procedure TDM_baseTools.LanceAttente(p_query : TOracleQuery);
var monThread : TmonThread;
begin
monThread := TmonThread.Create(p_query);
monThread.F_DIALOGUE_ATTENTE := TF_DIALOGUE_ATTENTE.create(self);
monThread.F_DIALOGUE_ATTENTE.show;
end;

procedure TDM_baseTools.LanceAttenteods(p_ods : TOracleDataSet);
var monThread : TmonThread;
begin
monThread := TmonThread.Create(p_ods);
monThread.F_DIALOGUE_ATTENTE := TF_DIALOGUE_ATTENTE.create(self);
monThread.F_DIALOGUE_ATTENTE.show;
end;

unit U_THREAD;
//////////////////////////////////////////////////////////////////////////////////////////////
// Méthode d'appel de la fenêtre
// Faire un USES de U_DIALOGUE_ATTENTE,U_THREAD
// déclarer monThread : TmonThread en variable
// monThread := TmonThread.Create(OQ_TEST);
// monThread.F_DIALOGUE_ATTENTE := TF_DIALOGUE_ATTENTE.create(self);
// monThread.F_DIALOGUE_ATTENTE.show;
////////////////////////////////////////////////////////////////////////////////////////////
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AdvPicture,U_DIALOGUE_ATTENTE,Oracle, DB, OracleData;
type
TmonThread = class(TThread)
private
procedure Affiche();
protected
procedure Execute();override;
public
F_DIALOGUE_ATTENTE : TF_DIALOGUE_ATTENTE ;
maQuery : TOracleQuery;
monODS : TOracleDataSet;
constructor Create(p_ODS:TOracleDataSet);overload;
constructor Create(p_query:TOracleQuery);overload;
end;

var
F_THREAD : TmonThread;

implementation

constructor TmonThread.Create(p_query:TOracleQuery);
begin
maQuery := p_query;
monODS := nil;
FreeOnTerminate := True;
inherited Create(false);
//changer la priorité de la boucle
Priority := tpLower;
end;

constructor TmonThread.Create(p_ODS:TOracleDataSet);
begin
maQuery := nil;
monODS := p_ODS;
FreeOnTerminate := True;
inherited Create(false);
//changer la priorité de la boucle
Priority := tpLower;
end;

procedure TmonThread.Execute;
begin
inherited;
if maQuery = nil then
monODS.Open
else
maQuery.execute;

F_DIALOGUE_ATTENTE.release;
end;
end.

J'espère que c'est compréhensible ...

Cdt.
Emmanuelle
0
Rejoignez-nous