Ecrire dans notepad++

Résolu
YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 - 27 juin 2012 à 17:22
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 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, ;)

9 réponses

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
27 juin 2012 à 23:11
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...
0
YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 1
28 juin 2012 à 09:29
Merci pour ta reponse mais lorsque je l'utilise il m'ouvre bien notepad++ mais n'insert pas le texte du mémo...
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
28 juin 2012 à 10:25
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...
0
YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 1
28 juin 2012 à 10:42
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 ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
28 juin 2012 à 12:34
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...
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
28 juin 2012 à 20:16
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;

@+
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
28 juin 2012 à 20:30
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 @+
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
1 juil. 2012 à 13:43
Salut,

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

CreateProcess
&
WaitForSingleObject
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 juil. 2012 à 14:19
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
0
Rejoignez-nous