Ecrire dans notepad++ [Résolu]

Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
- - Dernière réponse : cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 3 juil. 2012 à 14:19
Bonjour,
J'ai du texte dans un mémo et je souhaiterais ouvrir un nouveau fichier avec notepad++ et insérer le text du memo mais sans l'enregistrer.

Pour ouvrir notepad++ j'utilise ceci:
ShellExecute(Handle,'edit',PChar('NotePad++'),PChar(Opendialog1.FileName),nil,SW_SHOW)


Mais ceci ne m'ouvre pas un nouveau fichier mais celui ci :
Opendialog1.FileName


Sinon a part faire :
Memo2.Lines.SaveToFile(Opendialog1.FileName);


je ne sais pas comment mon texte du memo2 pourrait s'afficher dans le fichier notepad++.

Merci, ;)
Afficher la suite 

Votre réponse

9 réponses

Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
0
Merci
Salut,

essaye ceci :

uses ShellApi;

procedure ExecuteAndSendText(Appli: string; Text: string);
var
  Wnd: HWND;
begin
  ShellExecute(Application.Handle, 'open', PChar(Appli), nil, nil, SW_SHOWNORMAL);
  Sleep(20);
  Wnd := FindWindow('notepad', nil);
  if Wnd <> 0 then
  begin
    Wnd := FindWindowEx(Wnd, 0, 'Edit', nil);
    SendMessage(Wnd, WM_SETTEXT, 0, Integer(PChar(Text)));
    SendMessage(Wnd, EM_SETSEL, Length(Text) - 1, Length(Text) - 1);
  end;
end;


à utiliser comme ceci :
ExecuteAndSendText('Notepad', Memo1.Text);

ou bien
ExecuteAndSendText('C:\WINDOWS\NOTEPAD.EXE', Memo1.Text);

ou encore
ExecuteAndSendText('C:\Program Files\Notepad++', Memo1.Text);



Avec Delphi, tout devient possible...
Commenter la réponse de korgis
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
0
Merci
Merci pour ta reponse mais lorsque je l'utilise il m'ouvre bien notepad++ mais n'insert pas le texte du mémo...
Commenter la réponse de YB28
Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
0
Merci
Augmente la valeur de Sleep, par exemple
Sleep(100)

L'utilisation de Sleep n'est pas la méthode la plus propre, mais cela laisse à l'éditeur le temps de s'ouvrir avant de lui envoyer le message.
Le mieux serait d'avoir la confirmation que notepad++ est bien ouvert avant d'exécuter SendMessage, mais je n'ai pas de code tout prêt sous la main pour ça.
En cherchant un peu sur ce site ou ailleurs, on devrait trouver...
Commenter la réponse de korgis
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
0
Merci
l'envoie du texte ne fonctionne tjs pas meme avec sleep de 100 ou 200... Je vais du coup enregistrer ce que contient le fichier dans un memo2 puis j'écris dans le fichier avec
memo1.lines.savetofile
, ensuite j'ouvre notepad++ avec ShellExecute et je crée un autre bouton qui permet de réinitialiser le fichier ouvert grâce au memo2.
Merci de ton aide korgis ;)
Commenter la réponse de YB28
Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
0
Merci
Oui, en effet, mon code ne peut fonctionner qu'avec notepad.
Quoi qu'il en soit, le problème posé est intéressant.
Il faut sans doute l'aborder par le biais de CreateProcess, WaitForSingleObject et ce genre de choses...
En attendant, ShellExecute en passant par un fichier devraient dépanner...
Commenter la réponse de korgis
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
0
Merci
salut !!
tu peut fairecomme suit:
memo1.Lines.SaveToFile('mem.tmp');
ShellExecute(Handle,
'open','Notepad','mem.tmp',nil, SW_SHOWNORMAL);

et dans l 'evenement enclose du form :
procedure TForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
deletefile('mem.tmp');
end;

@+
Commenter la réponse de cs_walidlam
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
0
Merci
salut !!
ou tu peut faire aussi:
memo1.Lines.SaveToFile('mem');
ShellExecute(Handle,
'open','Notepad','mem',nil, SW_SHOWNORMAL);
sleep(50);
deletefile('mem');


bonne chance et @+
Commenter la réponse de cs_walidlam
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
Salut,

Plutôt qu'un Sleep() dont on ignore irrémédiablement la valeur à lui attribuer, il faut utiliser :

CreateProcess
&
WaitForSingleObject
Commenter la réponse de Caribensila
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Handle, 'Open', PChar('Notepad++.exe'), PChar('toto.txt'), nil, SW_SHOWDEFAULT);
end;


ça répond bien à la question posée..

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.