Avatar billede slowaterz Nybegynder
20. februar 2004 - 11:24 Der er 6 kommentarer og
3 løsninger

Kopiere data til eksternt program (Notepad)

Jeg skal have kopieret indholdet af en TMemo i mit program over til Notepad.

Brugerne skal kunne nøjes med at klikke på en knap, og så skal det eksterne program starte op og kopiere data fra mit Delphi program - uden nogen ydelrigere handling fra brugeren !

Jeg kan bruge ShellExecute til at åbne programmet - det er data overførslen, der mangler.
Avatar billede nca Juniormester
20. februar 2004 - 12:00 #1
Du skal gemme dine data fra TMemo med Memo1.Lines.SaveToFile('C:\Test.txt')
Herefter kan du vise indholdet i notepad med kommandoen:
RunExecutable('Notepad.exe C:\test.txt',true);

Så mangler du blot at slette filen, når du er færdig.
Avatar billede slowaterz Nybegynder
20. februar 2004 - 12:15 #2
nca >>> det er lige det, der er humlen - der skal ikke være nogen fil, som først kan slettes, efter brugeren er færdig med Notepad.
Avatar billede Slettet bruger
20. februar 2004 - 12:21 #3
slowaterz -> Prøv med det her:

procedure SetNotepadText(S: String);
var
Handle:HWND;
I:Integer;
begin
    Handle := FindWindowEx(FindWindow( 'notepad', nil ),0,'Edit',nil);
    SendMessage(Handle, WM_SETTEXT,0,Integer(S));
end;
Avatar billede slowaterz Nybegynder
20. februar 2004 - 13:34 #4
hejhej >>> hvordan får jeg startet Notepad op, for at kunne bruge din metode ? Hvis jeg bruger ShellExecute(), kommer der ikke noget over. Hvis jeg så går tilbage til mit program og klikker en gang til, fremkommer der en ny Notepad, men teksten bliver nu kopieret over til den første Notepad.
Avatar billede nca Juniormester
20. februar 2004 - 13:34 #5
>>hejhej
Det virker fint
Avatar billede slowaterz Nybegynder
20. februar 2004 - 13:42 #6
nca >>> den RunExecutable() rutine, du kalder - er det en, du selv har skrevet ?
Avatar billede nca Juniormester
20. februar 2004 - 14:01 #7
Ja, men det er kun for at kunne styre, om jeg skal vente på at min exe-fil er afsluttet.
Dit problem ligger i at der skal indstættes et delay.
Prøv at indsætte en timer, der venter 1 sek efter at du har kaldt notepad og herefter fyrer hejhej's kode af. Det virker hos mig.
Avatar billede slowaterz Nybegynder
20. februar 2004 - 14:19 #8
Hvis der er nogen, det interesserer, så er koden, som virker :


procedure TFormMain.BtnCopyClick(Sender: TObject);
var
  pHandle: HWND;
begin
  ShellExecute(Handle, 'open', PChar('C:\WINNT\system32\NotePad.exe'), '', '', sw_ShowNormal);
  Sleep(500);
  pHandle := FindWindowEx(FindWindow('notepad', nil ), 0, 'Edit', nil);
  SendMessage(pHandle, WM_SETTEXT, 0, integer(MemoResult.Text));
end;
Avatar billede Slettet bruger
20. februar 2004 - 14:37 #9
Ups.. Unskyld jeg ikke svarede, kom til at lukke mit mail program.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester