06. august 2003 - 11:41Der er
8 kommentarer og 2 løsninger
skifte til Word og tilbage igen til mit program
Hej alle I eksperter! Jeg har et program hvor jeg har en memo. Jeg selecter noget tekst og vil bruge memo1.CopyToClipboard. Nu vil jeg gerne skifte til Word, trykke Ctrl-V (Paste), to gange på <TAB> og tilbage igen til mit eget program, select'e noget andet tekst, tilbage til Word osv. osv. Jeg ved ikke hvordan man skifter til et andet Windowsprogram og sender tastetryk og stadig beholder kontrollen fra sit eget program. Er der nogen der kan hjælpe?
1) Word kan man kontrollere vedhjælp af ole. Søg på nettet efter noget med "Ole object delphi word" og jeg går ud fra at du får noget kode til det.
2) Den metode du har planer om, brug findwindow() og få handle til word, skift den til foregroundwindow med setforegroundwindow(), send derefter tekst ved at simulere tastetryk med sendkeys (sndkeys32.pas).
Hvis du har åbnet word på skrivebordet + dit program osse - har begge programmer vel tilgang til clipboardet og der skulle ikke være nogen grund til bruge hotkeys ?.medmindre man er antimuse-fanatiker.Ellers forstår jeg ikke spørgsmålet korrekt.Du kan lave en hotkey, der åbner word aut. ved tryk på en bestemt tastekombination (nok lettest via MDI-menu), men det lyder det som om du er klar over.
Tak for svarene ->dkn: Jeg vender tilbage når jeg har prøvet det ->janbb: Det er fordi jeg har en memo med en masse adresser som jeg gerne vil have proppet ind i hver sit felt i Word's Labels-funktion. Man bliver nødt til at tage én adresse ad gangen, og det kan tage sin tid hvis man skal gøre det med flere hundrede stk.
Du kunne lave et 'privat' clipboard i dit eget program i en memo eller en richedit. Fik denne prog.stump engang her på E. du måske kunne bruge: procedure TMain.CopyToClipboard; var Doc: OleVariant; begin Doc := Browser.OleObject; Doc.document.selection.createRange().execCommand('Copy'); Edit.PasteFromClipboard; end;
->janbb: øh, jeg forstår vist ikke helt hvad du mener? Hvad er Browser? Jeg vil jo gerne kopiere fra min memo til Word
->dkn: Begge udgaver af programmet virker nu fint.
I løsning 2) ved ikke hvad Sndkeys32 er (jeg har Delphi7). Jeg fik dog følgende til at fungere:
hw:=findwindow(nil,pansichar('Document1 - Microsoft Word')); mit_hw:=Application.MainForm.Handle; setforegroundwindow(hw); keybd_event(VK_CONTROL, 1, 0, 0); keybd_event(VkKeyScan('v'), 1, 0, 0); keybd_event(VkKeyScan('v'), 1, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 1, KEYEVENTF_KEYUP, 0); keybd_event(VK_TAB, 1, 0, 0); keybd_event(VK_TAB, 1, KEYEVENTF_KEYUP, 0); keybd_event(VK_TAB, 1, 0, 0); keybd_event(VK_TAB, 1, KEYEVENTF_KEYUP, 0); setforegroundwindow(mit_hw); --- Jeg troede i øvrigt at sendmessage(mit_hw,WM_SETFOCUS,0,0) skulle gøre det samme som setforegroundwindow, men fik det ikke til at virke.
OLE-programmet der også virker: var word:olevariant; begin Word := CreateOleObject('Word.Application'); Word.Documents.Open (FileName:='d:\test.doc', ReadOnly:=False); Word.WordBasic.Insert('Noget tekst'#13); word.wordbasic.nextcell; word.wordbasic.nextcell; Word.WordBasic.Insert('Noget tekst til næste felt'#13); osv.
Meget spændende.Nej, det var ikke nogen skræddersyet løsning.Metoden blev brugt til et kopiere fra en webbrowser til en richedit.Har selv en gammel delphi og opdagede disse 'plug-inns' eller hvad de hedder på et tidspunkt, hvor jeg legede lidt med en delphi 6.De bevirker at word (eller hvad det nu måtte være - lagde sig som en 'kappe' i Twebbrowseren, med div. tilhørende knapper til programmet.Nå det er nok for besværligt og 'tøset' en løsning, men jeg var meget betaget af det i sin tid.
Ja, jeg har prøvet mit lille forslag/idee og det virker bare slet ikke.Man får fejlmeddelelsen: 'method selection not supported by automation object'.Og iøvrigt er det fra word til memo jeg har testet metoden og ikke den omvendte som du efterspørger.Undskyld hvis mine bemærkninger har forvirret.
Synes godt om
Ny brugerNybegynder
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.