C++ Builder et saisie de données dynamique - C++ - Programmation
Marsh Posté le 19-07-2004 à 09:38:49
http://cplusplus.com/ref/ctime/time.html
http://cplusplus.com/ref/ctime/gmtime.html
Marsh Posté le 19-07-2004 à 09:44:20
En fait, je voudrais saisir les dates dans une fenêtre.
afin que lorsque je lance l'exécutable, une fenêtre souvre avec écrit: "saisir les dates" et ensuite utiliser ces deux dates dans ma fonction.
Est-ce que je peux ajouter la programmation de ma fenêtre dans ma fonction?
je suis désolée mais je suis un peu perdue.
Marsh Posté le 19-07-2004 à 09:46:25
Voilà la fonction dans laquelle je voudrais ajouter l'ouverture de ma fenêtre et je voudrais utiliser les dates saisie dans la fonction:getImmCONFCLFRequest() par la suite
void __fastcall ThreadScrutation::scrutConfClf()
{
try
{
TDateTime dt = TDateTime::CurrentTime();
if (dt < Parameter::getInstance().getCONFCLFBeginScrut() || dt > Parameter::getInstance().getCONFCLFEndScrut())
return;
TQuery *qr = NULL;
String strTransMode, strTipe;
try
{
qr = DataModuleScrutation->getImmCONFCLFRequest();
if(NULL == qr)
return;
qr->First();
while (!qr->Eof)
{
ExtractTableConfClf * ext = NULL;
strTransMode = qr->FieldByName("transmode" )->AsString;
strTipe = qr->FieldByName("Tipe" )->AsString;
if( (strTransMode == "N" || strTransMode == "M" ) &&
( strTipe == "CONF" || strTipe == "DEVIS" ) )
{
ext = new ExtractTableConfClf(BON_CONF_SEJOUR);
}else
if( strTransMode == "M" && strTipe == "ANNUL" )
{
ext = new ExtractTableConfClf(RELEVE_FRAIS_ANNUL);
}
if(NULL != ext)
{
ext->init(qr);
if(!QueueProd::getInstance().isExist(ext))
QueueProd::getInstance().add(ext);
}
qr->Next();
}
}
__finally
{
qr->Close();
}
if( dt < Parameter::getInstance().getCONFCLFBatchScrut())
return;
qr = NULL;
try
{
qr = DataModuleScrutation->getBatchCONFCLFRequest();
if(NULL == qr)
return;
qr->First();
while (!qr->Eof)
{
ExtractTableConfClf * ext = NULL;
strTransMode = qr->FieldByName("TransMode" )->AsString;
strTipe = qr->FieldByName("tipe" )->AsString;
if( (strTransMode == "N" || strTransMode == "M" ) &&
( strTipe == "CONF" || strTipe == "DEVIS" ) )
{
ext = new ExtractTableConfClf(BON_CONF_SEJOUR);
}else
if( strTransMode == "M" && strTipe == "ANNUL" )
{
ext = new ExtractTableConfClf(RELEVE_FRAIS_ANNUL);
}
if(NULL != ext)
{
ext->init(qr);
if(!QueueProd::getInstance().isExist(ext))
QueueProd::getInstance().add(ext);
}
qr->Next();
}
}
__finally
{
qr->Close();
}
}
catch(Exception & e)
{
m_strError = "Erreur dans l'intérrogation de la table CONFCLF : " + e.Message;
Synchronize(launchError);
}
}
Marsh Posté le 19-07-2004 à 09:48:47
c'est pas un problème de date alors...
tu instancies au démarrage de l'applic une 2ème Form que tu caches (ou mieux, tu instancies quand tu as besoin)
pour récupérer les date, tu peux utiliser une fonction publique de Form1 qui va valoriser ces 2 variables.
Finalement, tu détruits Form2
Marsh Posté le 19-07-2004 à 09:51:33
je vois pas trop comment faire ça...
en fait, je veux dire à mon programme uvre une fenêtre où je saisie deux dates!! (je suis un peu naive...)
je connais pas trop c++ builder pour la programmation graphique...
Marsh Posté le 19-07-2004 à 10:04:19
est-ce que je peux instancier le 2ème form dans ma fonction? et comment faire cela?
Marsh Posté le 19-07-2004 à 10:05:52
oui tu peux.
ben. tu fais un new form, .parent =this (form1 donc) et un visible = true
Marsh Posté le 19-07-2004 à 10:13:06
je suis désolée...
est-ce que tu peux me dire ce que je dois faire exactement...
Il faut quand même que je fasse une nouvelle fiche?
Ou alors, je peux simplement ecrire l'instancification?
Comment donner les caractéristiques de ma fenêtre : taille, écrire ce que je veux dedans?
merci ...
je suis un peu un gros boulet là...
Marsh Posté le 19-07-2004 à 10:15:32
Peux-tu me montrer comment coder ça dans ma fonction s'il-te-plait?
Marsh Posté le 19-07-2004 à 10:47:35
je te l'ai expliqué mais j'ai pas Borland C++ Builder sous la main là. De toute façon, je vais pas te coder ce truc (ça te rendrait pas service)
tu dois créer une form avec les boutons et tout, que tu instancies et caches au chargement de la première
Marsh Posté le 19-07-2004 à 11:06:37
Si je comprends
Je crée ma fiche avec mes bouton.
Elle d'appelle form 2
Je la rends invisible au début. (peux-tu juste me dire comment faire stp)
ensuite, dans ma fonction, ej l'instancifie.
elle apparaîtra donc...
=> je la rend visible.
et après, je la ferme à la fin de ma fonction.
merci.
Marsh Posté le 19-07-2004 à 11:09:23
luciesene a écrit : Si je comprends |
soit tu l'instancie (new) au début et que tu la caches (visible=true|false)
soit tu l'instancie à la demande.
essaie la première version, plus simple au début
Marsh Posté le 19-07-2004 à 11:21:58
j'ai créé ma fiche :
class TForm2 : public TForm
{
__published: // Composants gérés par l'EDI
TLabel *Label1;
TEdit *Edit1;
TEdit *Edit2;
TLabel *Label2;
TLabel *Label3;
TButton *Button1;
private: // Déclarations de l'utilisateur
public: // Déclarations de l'utilisateur
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
Je la déclare maintenant dans ma fonction?
c'est ça?
Marsh Posté le 19-07-2004 à 12:02:42
Je n'arrive pas à la déclarer.
faut-il que je rajoute des librairies?
Marsh Posté le 19-07-2004 à 12:06:03
JagStang a écrit : et que tu la caches (visible=true|false) |
ShowModal plutôt, pour que la fonction attende que l'utilisateur ait refermé la seconde fenêtre avant de continuer
Marsh Posté le 19-07-2004 à 12:10:34
Je suis pénible mais je suis perdue.
comment faire pour que ma deuxième s'affiche dans la fonction que j'ai mise plus haut?
Marsh Posté le 19-07-2004 à 14:30:12
J'ai à nouveau une question,
Quelle est la différence entre les fiches et les cadres de C++ Builder?
pour que l'utilisateur de l'application saississe deux dates, il vaut miuex utiliser une fiche ou un cadre?
merci,
lucie
Marsh Posté le 19-07-2004 à 14:37:44
Un cadre (frame) sert à faire un genre de morceau de fenêtre réutilisable que l'on peut mettre sur plusieurs fenêtres (fenêtre = form/fiche).
Marsh Posté le 19-07-2004 à 14:53:45
J'aimerais que l'utilisateur rentre deux dates que j'utiliserais dans la suite du programme.
Est ce que je dois déclarer les dates au niveau de la fiche?
Marsh Posté le 19-07-2004 à 14:57:23
Tu fais une nouvelle fiche où tu mets deux TDateTimePicker, et deux boutons. Pour le bouton OK tu mets ModalResult à mrOK et le bouton Cancel tu mets ModalResult à mrCancel.
puis tu fais dans ta fonction :
if(Form2->ShowModal()==mrOK)
{
// l'utilisateur a cliqué OK après
// avoir choisi les dates, alors on continue
date1 = Form2->DateTimePicker1->Date;
date2 = Form2->DateTimePicker2->Date;
// la suite de ton traitement
}
où date1 et date2 sont déclarés comme des TDateTime (à toi ensuite de voir si tu dois les convertir en un autre format de date)
Marsh Posté le 19-07-2004 à 14:59:44
je vais essayer ça!!
merci beaucoup, ça va bien m'aider je pense!!
Marsh Posté le 19-07-2004 à 16:48:17
je reviens sur l'exécution de mon programme :
je crée un exécutable mais mon problème est que mon programme ne s'éxécute qu'une seule fois au premier clic sur le bouton.
si je veux lancer une deuxième fois le programme, je dois fermer ma fenêtre et relancer l'éxécutable...
Auriez vous une idée sur la cause?
merci encore
Marsh Posté le 19-07-2004 à 16:49:00
quel bouton ?
Marsh Posté le 19-07-2004 à 16:51:16
le bouton de ma première fiche.
je rentre aussi les dates à ce niveau.
je lance ensuite tout mon programme( c'est un extracteur de données)
mais quand il a fini et que je change les dates, il ne fait rien...
Marsh Posté le 19-07-2004 à 09:22:50
Bonjour à tous,
Je programme avec C++ Builder et j'aimerais que dans une fonction, mon programme ouvre une fenêtre graphique me permettant de récupérer deux dates et d'utiliser ces dates dans la suite de ma fonction.
Quelqu'un peut-il m'aider à programmer ceci car j'avoue que je suis un peu perdue...
Merci d'avance.
Lucie