IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[D2010] Comment faire fonctionner le TAnimate pendant une instruction SQL ?


Sujet :

Composants VCL Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut [D2010] Comment faire fonctionner le TAnimate pendant une instruction SQL ?
    Sous Delphi 2010, comment faire fonctionner le TAnimate pendant une instruction SQL (un select en DBExpress) ?
    Il se fige, dès qu'une instruction SQL est exécutée (ce qui est dommage pour une animation qui est là pour faire patienter).

    Auparavant, sous Delphi 6, le TAnimate continuait de lire la vidéo, même pendant les instructions SQL (avec le BDE).

    Une idée ?


  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    tu pourrais par exemple exécuter ta requête dans un Thread,
    voir la démo
    {Documents publics}\RAD Studio\7.0\Demos\DelphiWin32\VCLWin32\Db\BkQuery

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    tu pourrais par exemple exécuter ta requête dans un Thread,
    voir la démo
    Je n'ai pas encore testé, mais je ne suis pas convaincu.
    Si le processus est figé pendant la requête, que ce soit dans un autre thread ou pas, ca reste le même processus.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Si tu execute le SQL dans un Thread Secondaire, cela ne bloquera pas le Thread Principal, c'est le principe même de Thread au sein d'un même processus !

    Maintenant SQL en BDE, tu faisais un SELECT ? un UPDATE ? ou tu un TTable.Open ? Quel était le volume ? Quelle DB ? Paradox ?

    Idem pour DBExpress, tu récupères combien d'enregistrement ? Quelle DB ?

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Si tu execute le SQL dans un Thread Secondaire, cela ne bloquera pas le Thread Principal, c'est le principe même de Thread au sein d'un même processus !
    Je vais faire un essai.
    Par contre, si ça fonctionne, ca reste quand même bien contraignant (pas besoin de ça avec D6).

    Citation Envoyé par ShaiLeTroll Voir le message
    Maintenant SQL en BDE, tu faisais un SELECT ? un UPDATE ?
    De tout.
    Citation Envoyé par ShaiLeTroll Voir le message
    Quel était le volume ?
    Très varié. De peu de lignes à plusieurs centaines de milliers.
    Citation Envoyé par ShaiLeTroll Voir le message
    Quelle DB ?
    Oracle (8 et 10g).

    Citation Envoyé par ShaiLeTroll Voir le message
    Idem pour DBExpress, tu récupères combien d'enregistrement ? Quelle DB ?
    Tout pareil. On migre de Delphi 6 avec le BDE à Delphi 2010 avec DBExpress.
    Et on obtient pas le même comportement au niveau du TAnimate.
    Je sais bien que DBExpress est TRÈS différent (et compliqué) par rapport au BDE, mais quand même.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Pour Oracle, ADO aurait été plus simple !

    Sinon, faire un SELECT * sur des centaines de milliers de ligne, cela ne sert à rien en général, c'est couteux à calculer, couteux à faire transiter sur le réseau, couteux à stocker sur le client, impossible à afficher complètement !

    Il doit y avoir une gestion de PacketRecord ou équivalent à étudier, ainsi, tu ne récupérera pas toute la table d'un coup !

    le BDE ne devait pas récupérer tout les données, il devait ouvrir un curseur sur un jeu partiel de donnée, et lorsqu'il arrivait à la fin du tampon, le driver Oracle BDE utilise ROWSET SIZE pour gérer la taille de son tampon de lecture !

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pour Oracle, ADO aurait été plus simple !
    ADO est banni. On n'a pas confiance. Il y a des bugs (en tout cas la version sous Delphi 6).

    Citation Envoyé par ShaiLeTroll Voir le message
    Sinon, faire un SELECT * sur des centaines de milliers de ligne, cela ne sert à rien en général, c'est couteux à calculer, couteux à faire transiter sur le réseau, couteux à stocker sur le client, impossible à afficher complètement !
    Il doit y avoir une gestion de PacketRecord ou équivalent à étudier, ainsi, tu ne récupérera pas toute la table d'un coup !
    Bien sûr qu'on joue avec le PacketRecord. C'est même pas la peine d'y penser sinon.

    Citation Envoyé par ShaiLeTroll Voir le message
    le BDE ne devait pas récupérer tout les données, il devait ouvrir un curseur sur un jeu partiel de donnée, et lorsqu'il arrivait à la fin du tampon, le driver Oracle BDE utilise ROWSET SIZE pour gérer la taille de son tampon de lecture !
    Effectivement. J'ai remarqué qu'il se débrouillait tout seul (lui). DBExpress, faut lui tenir la main.

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Si tu execute le SQL dans un Thread Secondaire, cela ne bloquera pas le Thread Principal, c'est le principe même de Thread au sein d'un même processus !
    Bon, j'ai fait le test, et comme je le prévoyais, l'application est entièrement figée (thread ou pas).

    Application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       Panel.Show;
       Animate.Active := True;
       Application.ProcessMessages;
       ShowMessage('');
       try
          //.
          MaiaQuery.Close;
          MaiaQuery.SQL.Clear;
          MaiaQuery.SQL.Add('select * from PRODUIT');
          MaiaQuery.SQL.Add('order by U##RACINE_PDT, U##FINIT_PDT');
          TThreadReq.Create(False, MaiaQuery).WaitFor;
       finally
          Animate.Active := False;
          Panel.Hide;
       end;
    end;
    Thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    constructor TThreadReq.Create(CreateSuspended: Boolean; AQuery: TMaiaQuery);
    begin
       inherited Create(CreateSuspended);
       Query := AQuery;
       FreeOnTerminate := True;
    end;
     
    procedure TThreadReq.Execute;
    begin
       while not Terminated do
          Synchronize(Recherche);
    end;
     
    procedure TThreadReq.Recherche;
    begin
       // Recherche.
       try
          Query.Open;
       exception
          on E: Exception do
          begin
             Query.Close;
             Application.MessageBox(PWideChar('Erreur :  ' + #13#10 + E.Message), PWideChar(Application.Title + ' - erreur'), MB_ICONERROR + MB_OK);
             Exit;
          end;
       end;
       ReturnValue := 1;
       Terminate;
    end;

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    ah oui, si tu lances un Thread et que tu te bloques sur un WaitFor ça t'apporte pas grand chose

    tu dois avoir un OnTerminate sur le Thread pour indiquer qu'il a terminé son job, ce n'est qu'à ce moment qu'il faut stopper ton animate

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ah oui, si tu lances un Thread et que tu te bloques sur un WaitFor ça t'apporte pas grand chose

    tu dois avoir un OnTerminate sur le Thread pour indiquer qu'il a terminé son job, ce n'est qu'à ce moment qu'il faut stopper ton animate
    Comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       ...
       ThreadReq := TThreadReq.Create(False, MaiaQuery);
       ThreadReq.OnTerminate := ThreadReqTerminate;
    end;
     
    procedure TForm1.ThreadReqTerminate(Sender: TObject);
    begin
       Animate.Active := False;
       Panel.Hide;
    end;
    Le TAnimate est toujours figé.

  11. #11
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    bon déjà, est-ce que sans lancer de requête tu parviens à activer l'animation ?

    si ça ne fonctionne pas, bascule la propriété Timers à True

  12. #12
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    bon déjà, est-ce que sans lancer de requête tu parviens à activer l'animation ?
    Oui, bien sûr.

    En fait, dans cet exemple, j'ai mis (pour tester) un ShowMessage, pour laisser le temps au TAnimate de charger l'animation et de la jouer. Elle est bien active, mais dès que je déclanche la requête, elle se fige, et l'application avec. Si je passe une autre fenêtre par dessus, l'application ne se repeint pas.

    Auparavant, sous Delphi 6, je n'avais pas ce problème.

  13. #13
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    ah au fait ton Thread c'est un peu n'importe quoi (si je peux me permettre ^^)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    constructor TThreadReq.Create(CreateSuspended: Boolean; AQuery: TMaiaQuery);
    begin
    // en appelant inherited, le Thread se lance...
       inherited Create(CreateSuspended);
    // ... alors que Query n'est pas encore défini !
    // il faut mettre le inherited APRES les lignes qui ci-dessous
       Query := AQuery;
       FreeOnTerminate := True;
    end;
     
    procedure TThreadReq.Execute;
    begin
    // pourquoi une boucle ?!
       while not Terminated do
    // Synchronize lance le traitement... DANS LE THREAD PRINCIPAL :D
          Synchronize(Recherche);
    end;
    donc ton Thread sert à lancer le traitement comme s'il n'y avait pas de Thread; bel effort

  14. #14
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 764
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    // en appelant inherited, le Thread se lance...
    Non, le thread est toujours créé dans un état suspendu. C'est la méthode AfterConstruction qui le démarre

  15. #15
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Non, le thread est toujours créé dans un état suspendu. C'est la méthode AfterConstruction qui le démarre
    ah oui !

    pourquoi faire simple quand on peut faire compliqué

  16. #16
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ah au fait ton Thread c'est un peu n'importe quoi (si je peux me permettre ^^)
    A dire vrai, j'ai dû n'en faire qu'un depuis que je fais du Delphi, alors j'ai beaucoup suivi l'aide.

    J'ai modifié la procédure Execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TThreadReq.Execute;
    begin
       Recherche;
    end;
    Et ca MARCHE !
    Je n'aurrai pas cru.

    pour ces précieux conseils.

    Puisque c'est possible de faire ces deux opérations en parallèle, je vais chercher à faire l'inverse : déporter dans un thread le TAnimate, et non le SQL, parce que sinon, va falloir un siècle pour migrer nos applications de D6 à D2010.


  17. #17
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Lung Voir le message
    A dire vrai, j'ai dû n'en faire qu'un depuis que je fais du Delphi, alors j'ai beaucoup suivi l'aide.

    J'ai modifié la procédure Execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TThreadReq.Execute;
    begin
       Recherche;
    end;
    Et ca MARCHE !
    Je n'aurrai pas cru.

    pour ces précieux conseils.

    Puisque c'est possible de faire ces deux opérations en parallèle, je vais chercher à faire l'inverse : déporter dans un thread le TAnimate, et non le SQL, parce que sinon, va falloir un siècle pour migrer nos applications de D6 à D2010.

    ça n'est pas possible, l'affichage de la fiche se fait dans le Thread principal. Si tu ne veux pas quelle fige c'est le SQL qui doit être dans le thread secondaire.

    tu peux tenter de surcharger le composant SQL pour qu'il effectue ses requêtes dans un Thread (sous condition si tu ne veux le faire que de temps en temps).

  18. #18
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 063
    Points
    7 063
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ça n'est pas possible, l'affichage de la fiche se fait dans le Thread principal. Si tu ne veux pas quelle fige c'est le SQL qui doit être dans le thread secondaire.
    Delphi 6 est trop fort : il arrive a faire l'impossible.

    Citation Envoyé par Paul TOTH Voir le message
    tu peux tenter de surcharger le composant SQL pour qu'il effectue ses requêtes dans un Thread (sous condition si tu ne veux le faire que de temps en temps).
    Bon, bin je vais creuser dans cette direction.
    On est pas prêt de migrer en D2010 (snif) ...

  19. #19
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Lung Voir le message
    Delphi 6 est trop fort : il arrive a faire l'impossible.


    je viens de faire un test tout bête sous D6 qui explique ce qu'il se passe

    place un TAnimate actif sur une fiche et un bouton avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Sleep(10000);
     ShowMessage('ok');
    end;
    suivant la valeur de TAnimate.Timers tu auras ou non l'animation, mais dans les deux cas la fiche est gelée

    quand Timers = False (par défaut), TAnimate se redessine dans un thread secondaire...mais passe une fenêtre par dessus ta fiche après avoir cliqué sur le bouton et tu verras que seule l'animation se redessine

    encore que dans mon cas elle ne se redessine que quand l'application récupère le focus...

  20. #20
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut
    Citation Envoyé par evarisnea Voir le message


    tu pourrais par exemple exécuter ta requête dans un Thread,
    voir la démo
    Sérieusement vaut mieux pas ne pas utiliser le TAnimate si ça ne bloque que ce composant dans ce cas.


    TAnimate est un wrapper Win32 API Animation Http://msdn.microsoft.com/en-us/library/bb761881.aspx donc delphi6 ou delphi2010 aucune différence je pense.

    Dans ce cas, vous aurez juste à exécuter votre propre message en appelant Application-> ProcessMessages () périodiquement pendant que vous faites l'initialisation de vos données.

Discussions similaires

  1. Comment faire fonctionner une GUI form?
    Par DragonLebna dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 22/04/2007, 13h58
  2. Comment faire fonctionner une fenêtre Login
    Par Cazaux-Moutou-Philippe dans le forum WinDev
    Réponses: 3
    Dernier message: 29/10/2006, 12h00
  3. Comment faire du MDX à partir d'une requete SQL?
    Par Immobilis dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 10/11/2005, 09h46
  4. Comment faire fonctionner une scroll bar ???
    Par toto4650 dans le forum MFC
    Réponses: 10
    Dernier message: 18/07/2005, 16h47
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo