Ecrire dans notepad++ [Résolu]

YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 27 juin 2012 à 17:22 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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

korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 27 juin 2012 à 23:11
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
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 28 juin 2012 à 09:29
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
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 28 juin 2012 à 10:25
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
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 28 juin 2012 à 10:42
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
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 28 juin 2012 à 12:34
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
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 28 juin 2012 à 20:16
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
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 28 juin 2012 à 20:30
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
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 1 juil. 2012 à 13:43
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 3 juil. 2012 à 14:19
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.