Ecrire dans notepad++ [Résolu]

Signaler
Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
-
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
-
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, ;)

9 réponses

Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
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...
Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
1
Merci pour ta reponse mais lorsque je l'utilise il m'ouvre bien notepad++ mais n'insert pas le texte du mémo...
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
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...
Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
1
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 ;)
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
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...
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
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;

@+
Messages postés
107
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
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 @+
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Salut,

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

CreateProcess
&
WaitForSingleObject
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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