Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2557 connectés 

 


Dernière réponse
Sujet : Borland C++ Builder: minimisation/restauration d'une appli
Buitoni

LetoII a écrit a écrit :

En générale quand je poste un message ici c'est que j'ai essayé toutes les solutions évidentes, mais c'est peut être que je m'y prend mal je vais réessayer d'une autre façon  




 
Ouai mais y a toujours qqchose auquel on a pas pensé  :ange:


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Buitoni

LetoII a écrit a écrit :

En générale quand je poste un message ici c'est que j'ai essayé toutes les solutions évidentes, mais c'est peut être que je m'y prend mal je vais réessayer d'une autre façon  




 
Ouai mais y a toujours qqchose auquel on a pas pensé  :ange:

LetoII Bon j'ai trouvé, si ça intéresse qqn je posterai le code
LetoII En générale quand je poste un message ici c'est que j'ai essayé toutes les solutions évidentes, mais c'est peut être que je m'y prend mal je vais réessayer d'une autre façon
Buitoni Benh tu as tout essaye?
 
Application->BringToFront()
FormBidule->BrintToFront()
 
 
sinon tu la fous en stay on top et tu le desactives de suite!
Au moins t'en es sur la...
LetoII Bon on va recentrer un peu le débat: je suis arrivé à restaurer ma fenetre minimisé, mais quand elle n'est pas minimisée je n'arrive pas à la faire passer au premier plan
LetoII Ouai mais ça m'aide pas trop là!
Carbon_14 C'est peut-être une plaisanterie, pour créer des bugs dans les softs de son pote... :)  
 
Heureusement que le compilo n'ajoute rien de ce genre, ça serait un truc à s'arracher les cheveux.
 
Je ne sais plus le nom de l'utilitaire du VC qui permet de créer un projet automatiquement (VisualStudio ?). Les break sont automatiquement mis après les case. Y a plus qu'à les ôter si pas besoin.
petoulachi Merci !  
je connaissais l'interet du break , et justement mon pote me disais que c'etait pas obligatoire de le mettre, qu'ensuite le compilo le rajouter. Donc justement je trouvais ça nul, dans le cas ou plusieurs case font la meme action !!
Carbon_14 En VB, on met rien, en BC, on met un break en général, sauf si on veut continuer au case suivant.
Mais si on a un return en dernière commande, le break sert à rien.
 
switch (c)  
{  
case 1 : return 1;
case 2 : return 2;
case 3 : return 3;
};
return 4;  
 
(C'est juste un exemple, on peut faire plus direct ! :D)
seblamb swtich ( c)
{
 case 1 : cout<<"1\n";
 case 2 : cout<<"2\n";
 case 3 : cout<<"3\n";
};
 
dans cet example si c == 1 alors ça va ecrire  
1
2
3
 
si c == 2 alors ça va ecrire  
2
3
 
Donc tu vois l'interret du 'break' ?  ;)
petoulachi Bon chuis super desole, je viens "squatter" votre topic pour poser ma question car ça concerne BC++ directement.
 
En fait, un copain m'affirme que dans un switch, il n'est pas necessaire de mettre un break a la fin de chaque case, que le compilo le rajoute tout seul. C vrai ? parcve que c un peu debile, si tu as deux cas ou tu veux faire la meme chose, t obligé d'ecrire le truc 2 fois ???
 
merci et desole  :jap:
LetoII bon alors comme ça marche mieu mais lorsque la fenetre n'est pas minimisée je n'arrive toujours pas à la faire passer au premier plan
 
 
 
void __fastcall TMyDivPlayerByLetoAtISIMA::MyNotify(TMessage& msg)
{
     
    Application->Restore();
    Show();
    Activate();
    Application->BringToFront();
}
LetoII Ok c ma faute.
 
Voici la fonction winmain de mon prog:
 
 
 
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 CreateMutex(NULL,TRUE,"testmutex" );
                 if(GetLastError() != ERROR_ALREADY_EXISTS)
                  {
                     try
                      {
                         Application->Icon->LoadFromFile("CDIcon.ico" );
                      }
                     catch(...)
                      {
                      }
 
                     Application->ShowMainForm=false;
                     Application->CreateForm(__classid(TMyDivPlayerByLetoAtISIMA), &MyDivPlayerByLetoAtISIMA);
                 Application->CreateForm(__classid(TFirstWindow), &FirstWindow);
                 Application->Run();
                  }
                 else
                  {
                     HANDLE test=FindWindow("TMyDivPlayerByLetoAtISIMA",NULL);
                     /*ShowWindow(test,SW_RESTORE);
                     SetForegroundWindow(test);*/
                     
                     SendMessage(test,MYWM_NOTIFY,1,1);
 
                     //BringWindowToTop(test);
 
 
                  }
 
 
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        return 0;
}
 
 
 
 
 
 
la fonction qui répond au message MYWM_NOTIFY:
 
void __fastcall TMyDivPlayerByLetoAtISIMA::MyNotify(TMessage& msg)
{
    //ShowWindow(Handle,SW_SHOWNORMAL);
    //BringWindowToTop(Handle);
    //SetFocus();
    WINDOWPLACEMENT test;
    RECT test2;
    test2.left=Left;
    test2.right=Left+Width;
    test2.top=Top;
    test2.bottom=Height+Top;
    test.showCmd=SW_SHOWNORMAL;
    test.length=sizeof(WINDOWPLACEMENT);
    test.rcNormalPosition=test2;
    SetWindowPlacement(Handle,&test);
 
    SetForegroundWindow(Handle);
 
}
 
vous pouvez voir passé en commentaires les autres essai infructueux
Buitoni Et t'esperes que qqn t'aide sans que tu files le moindre morceau de code? :-)
LetoII

buitoni a écrit a écrit :

Ouai mais ca n'a aucune incidence la dessus... Et si c'est ta méthode de detection (pour toi) qui foire, utilise un mutex...  
 
Dis tout de suite que je sais pas lire :)  




 
Non ça doit être moi qui suis pas clair, alros on va clarifier: la détection de l'instance ça marche, la récupératino du handle de l'instance précédente ça marche, c quand je la restaure qu'il y a un problème, la fnetre apparait mais impossible de la reminimiser, si je clic avec le bouton droit sur son icone dans la barre des tache ça me propose de la restaurer et pas de la minimiser, de plus je n'arrive pas à la faire passer devant toutes les fenetres.
 
J'ai essayé deux méthodes les résultats sont identiques.

Buitoni Ouai mais ca n'a aucune incidence la dessus... Et si c'est ta méthode de detection (pour toi) qui foire, utilise un mutex...  
 
Dis tout de suite que je sais pas lire :)
LetoII bon alors pour ceux qui suivent pas: le problème n'est pas dans la detection de l'instance précédente mais dans le fait qu'elle ne se restaure pas comme il faut!
Buitoni Bleh?
 
Utilise un mutex pour limiter ton application... A la limite regarde dans mon BUPack (sur mon site), y a un compo pour le faire en Delphi, il doit pouvoir compiler sous Builder (et non, c plus shareware, c open source, mais eux ils feront jamais de version pour Builder)
LetoII J'aimerais faire en sorte que l'on ne puisse lancer l'appli que je suis en train de dévellopper qu'une seule fois et que si on essaye de la relancer celà rappel l'instance précédente.
J'y suis presque arrivé mais quand je restaure la fenettre de l'instance précédente je ne peux plus la minimiser (le système semble tjrs la considére comme minimiser alors qu'elle ne l'est plus) et je n'arrive pas à la mettre au premier plan

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)