Zones de saisie au premier plan

graphiboc Message lu Posté le 03 Déc 2009 à 22:29 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
Salut à tous.
Dans le cadre d'un projet j'ai besoin d'afficher des zones de saisie de texte à des endroits bien définis de l'écran et je veux qu'elles restent au premier plan.
Est-ce que quelqu'un a une idée d'un langage qui aurait cette possibilité, et si oui, une idée de comment la réaliser ?
De plus, il faut que le langage puisse uploader/downloader des fichiers sur un ftp (eventuellement via un plugin).
Enfin, le langage le moins contraignant sera le mieux (ex:je pourrais le faire en DBP mais il nécessite directx ( minimum...)

Merci d'avance
L'Homme est un créateur...
Gulix Message lu Posté le 04 Déc 2009 à 08:52 Bulle
Avatar de Gulix
Membre Confirmé

Messages : 184
GCPoints : 8860
Ca doit pouvoir se faire assez facilement en C# ... Maintenant, tu entends quoi par "afficher des zones de saisie de texte à des endroits bien définis de l'écran" et "rester au premier plan" ? Un interface standard (appli bureautique classique en TopMost), une interface de type jeu ?
"Bien souvent, l'école représente votre meilleure chance. Non pas d'apprendre quoi que ce soit, bien sûr, mais de survivre à une attaque de morts-vivants".
Max Brooks - Guide de survie en territoire zombie

Mon Blog, mélange de prog' et de culture
Blind Shark - Pull N' Bounce
graphiboc Message lu Posté le 04 Déc 2009 à 12:16 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
J'entends par là afficher des zones de saisie de texte très basiques (une simple boîte), sur l'écran et par dessus tous le reste.
Du genre en haut à gauche de l'écran tu as une zone toujours visible ou tu peux rentrer du texte dedans.

EDIT : je pense avoir trouvé une piste de réponse ici : http://msdn.microsoft.com/en-us/library/ms997507.aspx
Du coup je vais tenter de réaliser ça en C++, sauf que je ne connais que les bases (c'est à dire je connais la syntaxe, je sais comment ça fonctionne gloabelement, je sais créer des classes, functions,etc. mais je n'ai jamais rien produit de plus qu'un programme qui fonctionne sur l'invite de commande MS-DOS).
Là il s'agirait donc de créer mes champs de texte, et de rendre tout le reste transparent.
Avec un peu (ou beaucoup) de prise en main, ça doit être largement gérable.
J'ai donc de nouvelles questions pour gagner un peu de temps précieux :

Quelqu'un saurait comment :
- créer autre chose qu'une fenêtre DOS en C++
- créer une interface dans cette fenêtre (j'ai juste besoin de savoir faire une boîte de saisie de texte)
- récupérer/mettre un fichier sur un ftp

Je vais me renseigner de mon côté mais ça pourrait me faire gagner beaucoup de temps si quelqu'un prenait le temps de m'expliquer un peu.

Merci d'avance
Dernière édition le 04 Déc 2009 à 18:30
L'Homme est un créateur...
Darktib Message lu Posté le 04 Déc 2009 à 19:18 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
C'est juste pour une gui ? Prend Qt, ca gère à la fois la GUI et le ftp.
Et, c'est très simple à maitriser.
Melysoph Message lu Posté le 05 Déc 2009 à 00:11 Bulle
Avatar de Melysoph
Explorateur

Messages : 67
GCPoints : 21899
Effectivement, Qt semble le meilleur choix.
De plus il existe des déjà des exemples de code tout fait (Qt te fera même le café si t'es gentil).
Ici un FTP client justement (auquel tu devras rajouter des fonctionnalités comme envoyer tes fichiers) :
http://pepper.troll.no/s60prereleases/doc/network-ftp.html

Pour l'histoire des fenêtres transparentes, va voir peut-être du côté de setWindowOpacity.
Je ne sais pas par contre pour le fait qu'elle reste toujours au dessus de tout. Mais ça doit être possible.

Bon courage,
Melysoph
Dernière édition le 05 Déc 2009 à 09:21
* Phrase très profonde et recherchée *
graphiboc Message lu Posté le 05 Déc 2009 à 12:43 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
Merci pour la suggestion.
Je n'arrive pas à utiliser Qt avec visual studio.
Apparemment c'était encore possible avec la version 4.4.0 (plus disponible sur le web) mais plus avec la 4.5.
Vous savez comment faire ?
L'Homme est un créateur...
Darktib Message lu Posté le 05 Déc 2009 à 13:01 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
C'est un peu galère avec Visual Studio, perso je te conseille d'utiliser Code::Blocks et la ligne de commande (très simple à piger) ou encore plus simple, utiliser QtCreator.

Il me semble qu'en fait pour vs, il faut de mander à qmake de générer un Makefile.

Sinon, il est facilement possible de dire qu'une fenêtre doit etre au dessus des autres (en utilisant les WindowFlags par exemple).
graphiboc Message lu Posté le 05 Déc 2009 à 13:07 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
trop tard je suis déjà en train de le configurer pour visual studio et apparemment c'est parti pour 4h de compilation...
J'espère faire les premières découvertes de Qt ce soir.
Et du coup si tout se passe bien j'espère avoir les premiers vrais résultat dans la semaine.
Je pense que le programme en lui-même est assez simple, mais là il y a une énorme part de prise en main (comme je l'ai dit je n'ai utilisé vs que en mode invite de commande, et je ne sais encore rien sur Qt).

Sinon, simple question : peut-on faire en sorte qu'un programme se ferme si un autre programme n'est pas lancé ?
Je sais que la réponse est oui (et j'ai déjà fait ca en DBP via l'api de windows), mais via Qt et vs, quelle serait la meilleure méthode ?

Merci

EDIT : au final j'ai eu une erreur pendant la compilation, je vais donc étudier tes propositions.
Juste : est ce QtCreator suffirait à faire ce que je cherche à faire ?
Qu'est ce que tu veux dire par "Code:blocks et la ligne de commande" ?
Dernière édition le 05 Déc 2009 à 14:32
L'Homme est un créateur...
Melysoph Message lu Posté le 05 Déc 2009 à 14:39 Bulle
Avatar de Melysoph
Explorateur

Messages : 67
GCPoints : 21899
Ah ah ah, moi aussi j'ai dû passer pas la re-compilation de Qt avec visual. La bonne blague ! J'espère vraiment que ce n'est pas un procédé obligatoire...
Mais sinon ça marche très bien après ça, pas de problème de versions ou de génération de makefile, etc...

Si tu veux utiliser l'API windows - je ne sais pas comment ça se passe avec DBPro - mais c'est une question de C/C++, sans grand rapport avec Qt.
Qt t'offre des raccourcis pour certains fonctionnalités, mais ça reste toi qui code. Si DBPro te donne directement la fonction Windows, plus qu'à la réutiliser.
Sinon tu peux aller voir ce lien, ce gars a trouvé une façon de faire avec les processus :
http://forum.hardware.fr/hfr/Programmation/C-2/tester-programme-resolu-sujet_15532_1.htm

Je ne saurais te dire qu'elle est la meilleure méthode... Tu devrais appeler le support Microsoft Windows pour savoir. :D

EDIT :
Quelle est ton problème de compilation ? Il ne trouve pas les includes du genre windows.h ? (un pote a eu ce problème)

Je pense que QTCreator suffirait oui - Il a la vocation d'être un IDE quand même à la base.
Je n'aime pas trop, mais il devrait pouvoir te fournir les outils nécessaire.


A bientôt,
Melysoph
Dernière édition le 05 Déc 2009 à 14:53
* Phrase très profonde et recherchée *
graphiboc Message lu Posté le 05 Déc 2009 à 15:01 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
au niveau de la compilation, au début tout se passe ben, et puis il y a un certains nombre de fichiers non trouvés, mais je ne me rappelle plus lesquels, je regarderai ça dès que j'aurais du temps à perdre.
Pour le moment je me concentre donc juste sur Qt Creator.
J'ai cependant une question : lorsque je compile, si je veux éxécuter mon projet, il me dit que telle dll est manquante, etc.
La solution que j'ai toruvé c'es de copier toutes les dll dans le même dossier.
Seul problème, ca fait environ 700Mo, ce serait un peu ridicule pour un si petit programme de prendre autant de place.
Une solution à cela? C'est sûrement juste un problème de paramètrage.
Encore merci pour votre aide précieuse

sinon, je susi un peu perdu : Qt Creator permet de compiler du C (donc je peux utiliser n'importe qu'ele autre librairie ?) ?

EDIT : maintenant je me trouve face à un problème : il se trouve que dans Qt Creator, le programme principal ressemble à ça :

Code :
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    AdressBook w;
    w.show();
    return a.exec();
}


le problème c'est que la boucle principale se trouve dans l'instruction a.exec() !
Du coup, comment faire en sorte que mon programme effectue une action à chaque boucle ? (par exemple, je voudrais ajouter dans la boucle hide() puis show() pour garder la fenêtre au 1er plan). Désolé pour mon incompétence :grin:
Dernière édition le 05 Déc 2009 à 15:35
L'Homme est un créateur...
Melysoph Message lu Posté le 05 Déc 2009 à 16:25 Bulle
Avatar de Melysoph
Explorateur

Messages : 67
GCPoints : 21899
Désolé de t'envoyer vers ce lien mais... http://www.siteduzero.com/tutoriel-3-11406-apprenez-a-programmer-en-c.html
Il y a une grosse partie Qt.
Dernière édition le 05 Déc 2009 à 16:25
* Phrase très profonde et recherchée *
Darktib Message lu Posté le 05 Déc 2009 à 16:37 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Ouarf, envoyer un vétéran de dbp sur ce lien... enfin, il faut un début à tout ->[]

Sinon, pour effectuer une action, tu as la classe QTimer, au nom très explicite. Il suffit de le démarrer en lui indiquant le temps (en ms) entre deux activations. Tout ca utilise les signaux et slots, avant de pouvoir faire quelque chose il faut que tu comprenne bien comment ca fonctionne.

Pour QtCreator, il est possible d'utiliser d'autres librairies, tout ce que tu veux, mais il y a des subtilités. Si par exemple, tu utilise une lib dans laquelle certaines fonctions ont pour nom 'emit' ou 'slots', ca va planter à la compil. Dans ce cas, il faut changer le fichier pro, et changer deux trois petits trucs. Si jamais tu veux plus d'infos, demande-le moi.

Enfin, pour les dlls manquantes, il s'agit de:
QtGui4.dll
QtCore4.dll
mingwm10.dll
?? (ou avec les d juste avant le .dll si c'est du débug)

Normalement ca ne devrait pas etre aussi lourd, chez moi meme avec les versions débug, ca prend moins de 20 Mo...
Au pire, n'utilise que les release
graphiboc Message lu Posté le 05 Déc 2009 à 17:38 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
nan le problème c'est que avec Qt Creator il inclue toutes les dlls, même en release.
Je suis en train de le reconfigurer manuellement via l'invite de commande de Qt et ça devrait marcher.
J'ai bien avancé sur ma prise en main, je pense qu'effectivement si je n'ai pas de soucis côté ftp le programme sera fini dans la semaine.

Merci beaucoup pour votre aide en tout cas !

Ps : c'est vrai que c'est un de mes gros défauts : je sais très bien utiliser DBP (j'arrive à programmer ce que je veux avec) mais ce n'est pas un langage très utile dans le milieu professionel, or le projet sur lequel je suis en ce moment est commandité par la SNCF.
L'Homme est un créateur...
Darktib Message lu Posté le 05 Déc 2009 à 17:57 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Rien que ça!
graphiboc Message lu Posté le 05 Déc 2009 à 18:28 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
oui ! :tongue:
bon le coup de l aconfiguration a tout fait planter je vais refaire un 2e test.
Pendant ce temps j'ai résolu le problème pour garder la fenêtre au premier plan.
Je l'avais fait via un QTimer mais la fenêtre clignotait.
En réalité on peut le paramètrer directement.
Il ne me reste plus qu'à régler le problème des dlls, m'interresser au ftp et le reste devrait aller tout seul.

Merci beaucoup !

Je vous tiens au courant
L'Homme est un créateur...
graphiboc Message lu Posté le 06 Déc 2009 à 12:49 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
C'est encore moi.
J'en suis aux test FTP et j'ai quelques soucis.
si je rajoute ça dans mon main :
Code :
#include <QtNetwork/QFtp>

int main()
{
...
QFtp * ftp = new QFtp();
ftp->connectToHost("mon_host");
ftp->login("utilisateur","password");
...
}


j'obtiens à la compilation ce genre d'erreur :
Code :
error: undefined reference to `_imp___ZN4QFtp13connectToHostERK7QStringt'


vous savez comment régler ce problème ?
Dernière édition le 06 Déc 2009 à 12:50
L'Homme est un créateur...
Darktib Message lu Posté le 06 Déc 2009 à 13:15 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Peut tu nous montrer le fichier pro stp? Normalement, il faut rajouter le nom du module dans la configuration de compilation.
Melysoph Message lu Posté le 06 Déc 2009 à 13:18 Bulle
Avatar de Melysoph
Explorateur

Messages : 67
GCPoints : 21899
De base je dirais que ta méthode "connectToHost" n'as pas le même prototype ici et dans le .h

Essaye ftp->connectToHost(QString::FromStdString("mon_host"));
* Phrase très profonde et recherchée *
graphiboc Message lu Posté le 06 Déc 2009 à 13:56 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
Merci pour vos réponses rapides

@Melysoph : la commande Code :
ftp = new QFtp(this)
seule me donne l'erreur Code :
error: undefined reference to `_imp___ZN4QFtpC1EP7QObject'

Donc je ne pense pas que le problème vienne de là

@Darktib : le fichier pro ne mentionne que les ressources (.h,.cpp et .ui) mais aucune librairie.
Pourtant, j'utilise par exemple la librairie QTimer qui fonctionne sans problème.
Voilà tout de même le fichier :

Code :
#-------------------------------------------------
#
# Project created by QtCreator 2009-12-05T14:43:13
#
#-------------------------------------------------

TARGET = part
TEMPLATE = app


SOURCES += main.cpp
        part.cpp

HEADERS  += part.h

FORMS    += part.ui



EDIT :
cet exemple là, trouvé sur internet me fait les mêmes erreurs :
Code :
#include <QApplication>
#include <QFile>
#include <QtNetwork/QFtp>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv, false);
    QFtp ftp;

    QObject::connect(&ftp, SIGNAL(done(bool)), &app, SLOT(quit()));

    QFile file("INSTALL");

    ftp.connectToHost("ftp.trolltech.com");
    ftp.login();
    ftp.cd("qt");
    ftp.get("INSTALL", &file);
    ftp.close();

    return app.exec();
}


C'est à s'arracher les cheveux...

EDIT2:
je viens de reconfigurer Qt Creator en statique pour régler le prolbème des dlls sauf que :
- ça ne marche pas (ça compile, mais j'ai toujours besoin d'inclure toutes les dlls)
- c'est 10 fois plus long pour compiler
- j'obtiens maintenant des erreurs du type
Code :
error: undefined reference to `QFtp::QFtp(QObject*)'

avec la commande de création d'un FTP

EDIT3 : c'est bon je me suis débarassé du problème des dll.
Il ne reste plus que celui du FTP qui est malheureusement particulièrement pénible.
Apparemment il ne trouve pas le constructeur d'un object de type QFtp ???

EDIT4 : finalement je viens de régler le problème du Ftp.
Le pire c'est que c'est tout con, mais ce n'est pas expliqué clairement dans l'aide de Qt !
il suffit de rajouter cette ligne dans le .pro :
Code :
QT += network

+1 pour Darktib sur l'idée...
Dernière édition le 06 Déc 2009 à 17:01
L'Homme est un créateur...
Darktib Message lu Posté le 06 Déc 2009 à 17:30 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Dsl pour le retard, en tout cas tu as trouvé tout seul :grin: . En effet, il faut activer manuellement les modules de Qt, pour des raisons de performance (de compilation) et de place.
Dernière édition le 06 Déc 2009 à 17:31
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0424 secondes