vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 décembre 2014
-
2 déc. 2007 à 19:34
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 2012
-
4 déc. 2007 à 01:16
Bonjour j'ai un probleme avec les handles.
En résumé, j'ouvre Open Office j'ecris un truc (n'importe) et là (c'est le code qui suit) je veux le refermer sans enreigstrer pour ça quand je le referme il me demande "enregistrer", "ignorer" ou "annuler", et ca marche pas, car je n'arrive pas à recuperer le handle de fentre Enfant d'Open Office ca me renvoi 0, voici mon code :
Merci de votre aide.
procedure TForm1.Button1Click(Sender: TObject);
var monhandle1, monhandle2, Monhandle3 : HWND;
begin
// Je recher le handle de la fenetre principale
Monhandle1:=FindWindow(nil,'Sans nom1 - OpenOffice.org Calc');
ShowMessage(IntToStr(monhandle1)); // Pour voir ce qui sort (ca marche !)
// Je ferme l'application
SendMessage(H2,WM_CLOSE,0,0);
// Je recherche le handle de la fenetre secondaire
monhandle2:=FindWindowEx(monhandle1,0, 'OpenOffice.org 2.0',nil);
ShowMessage(IntToStr(monhandle2)); // Il sort plus rien (0)
// Je recherche le bouton qui se trouve sur le handle de la fenetre secondaire
monhandle3 := FindWindowEx(monhandle2, 0, nil, PChar(UpperCase('Ignorer')));
ShowMessage(IntToStr(monhandle3)); // Il sort plus rien (0)
if monhandle3 = 0 then Exit; //bouton introuvable..
SendMessage(monhandle3, BM_CLICK, 0, 0); //on clique dessus // Je suis pas sur de ce code (pas pu testé)
// A ce stade si ca marche Open Office s'est fermé sans enregistrer (si ca marchez ...)
end;
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 2 déc. 2007 à 22:48
Bonsoir
Je comprends pas pourquoi tu utilises un accès à Open Office en utilisant ses handles ? Je te conseille fortement d'utiliser l'API de Open Office. Comment ? Un petit tour ici Alors, il te suffira un simple : Document.dispose; pour fermer ton document sans l'enregistrer.
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 décembre 2014 3 déc. 2007 à 10:58
Merci pour ta réponse, mais le probléme c'est que j'ouvre avec mon prog Open Office, ensuite le prog envoi des informations qui sont lisibles à l'écran par l'utilisateur, c'est une sorte d'apercu avant impression, et c'est à l'utilisateur de fermer Open Office quand il a finit de lire les infos à l'écran ou de les imprimer s'il le souhaite.
Le probleme c'est qu'a ce moment là il lui propose une fenetre pour savoir s'il veux enregistrer ou pas (ce que j'ai écrit avec mon prog) c'est justement ca que je veux eviter (car il faut faire "Ignorer "sinon ca modifie la matrice) et faute de mieux je voulais le faire par la gestion des handles car je ne vois pas comment je peux le faire avec Open Office puisque c'est l'utilisateur qui ferme manuellement.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 3 déc. 2007 à 14:15
"j'ouvre avec mon prog Open Office" donc si tu l'ouvres, c'est à toi de le fermer!! Tu peux prévoir, par exemple, un bouton pour ce faire sur une fenetre modale StayOnTop. Tu pourras alors fermer Open office sans sauvegarde. Si tu veux laisser la fermeture manuelle, pas de solutions simples à te proposer.
P.S. Sachant que les fenetres n'auront pas forcement les mêmes noms lors de la prochaine mise à jour de open office, ta solution n'est pas viable à long terme.
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Vous n’avez pas trouvé la réponse que vous recherchez ?
vieuxpere
Messages postés195Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention17 décembre 2014 3 déc. 2007 à 15:32
Merci de cette réponse.
J'ai toutefois résolu depuis ma question une partie du probleme, je trouve desormais le handle de la fentre concernée.
Toutefois, je n'arrive pas sur cette fentre à cliquer sur le bouton "Ignorer".
Par defaut, le focus de la fenetre est sur le bouton Enregistrer, il faudrait donc que je fasse un Tab + Entrée (pour me retrouver sur le bouton suivant : "ignorer") , le probleme c'est que via le code que j'utilise ca marche pas, voici le code.
<ol><li>SendMessage(handle, WM_KEYDOWN, VK_TAB, 1);</li><li>SendMessage(handle, WM_KEYDOWN, VK_RETURN, 1);</li></ol>merci de votre aide.