Onko visual basicillä mahdollista tehdä ohjelmaa joka toimisi näin: Kun kirjoitetaan sana jonnekkin ohjelma ottaa sen talteen ja kun painetaan vaikka f3 näppäintä niin se kirjoittaa sen sanan sieltä muistista.
Clipboard.SetText, Clipboard.GetText
Miten saisin tuon toimimaan silleen että kun kirjoitan sanan jonnekkin ja painan f2 niin sitten se kopioi viimeksi kirjoitetun sanan ja kun painan f3 niin ohjelma liittää viimeksi kirjoitetun sanan sinne mihin olen kirjoittamassa tekstiä?
Haetko nyt tuota näppäimentarkistusta vai tekstin käsittelyä vai molempia?
Lähetä sana sendkeyssillä:
SendKeys "teksti" 'lähettää valittuun tekstikenttään yms.
Ehdotan että teet näppäimistön kuuntelun AsyncGetKeyState:a käyttäen, muuten näppäimistön kuuntelu toimii vain kun oma sovelluksesi on valittuna
edit: unohtu "" merkit :(
Hunajavohveli: Itse asiassa molempia.
Hmm olen saannut jotain aikaan (mikä ei toimi mutta ei kyllä debug huudakkaan)
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF3 SendKeys Text1.Text Case vbKeyF2 Clipboard.SetText Text1.Text End Select End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub
Jos tarkoitit leikepöydän tekstin lisäämistä esimerkiksi TextBoxin tekstiosoittimen kohtaan, niin sen voit tehdä tämmöisellä koodilla. Vaihdat vain leikepöydän tekstin koodissa näkyvään kohtaan. Leikepöydän lukemisesta en kuitenkaan osaa sanoa.
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF3 kohta = Text1.SelStart Text1.Text = Left$(Text1.Text, kohta) + "Tähän kohtaan tulee leikepöydän teksti" + Right$(Text1.Text, Len(Text1.Text) - kohta) Text1.SelStart = kohta End Select End Sub
Enpä juuri saannut toimimaan tuota koodia tai siis se ei pastennut sitä leikepöydällä olevaa tekstiä.
Tuolla näppäimistön käsittelyllä se teksti ei sitten mene minnekään, ellei omalla ohjelmallasi ole focusta (eli menee vain oman ohjelman tekstikenttiin yms).
miten sen saisi toimimaan silleen että kun painaisin sitä f3 niin se liittäisi sen tekstin sinne minne olen sillä hetkellä kirjoittamassa.
Vastasin tuohon jo aiemmin (ks. eka lähettämäni viesti tässä ketjussa)
Cc kirjoitti:
Enpä juuri saannut toimimaan tuota koodia tai siis se ei pastennut sitä leikepöydällä olevaa tekstiä.
Niin, kuten sanoin, en tiedä, miten leikepöydän teksti luetaan, mutta kyllä tuo koodi lisää sen tekstin siihen kohtaan, mihin olet kirjoittamassa, kunhan vaihdat sen tuohon kohtaan "Tähän kohtaan tulee leikepöydän teksti"
Edit: Tuossa näkyy olevan jonkinlainen koodivinkki asiasta:
https://www.ohjelmointiputka.net/koodivinkit/
Tosin ihan samat asiat siinä on minusta neuvottu. Kuitenkin, kun kokeilin tuota joskus, niin ei se minusta toiminut kuin ohjelman sisäisenä leikepöytänä, mutta se kai tässä oli tarkoituskin? Siinä tapauksessa ei kuitenkaan tarvitse käyttää leikepöytää, vaan kaiken voi pistää ihan muuttujiin.
Ennen settextin käyttöä kannattaa Clipboard.Clear, mulla ei aina toimi ilman. Ja sen sisältämän tekstin saa yksinkertaisesti Clipboard.GetText :)
hunajavohveli kirjoitti:
Kuitenkin, kun kokeilin tuota joskus, niin ei se minusta toiminut kuin ohjelman sisäisenä leikepöytänä
Ei, kyllä tuo on ihan se kaikilla ohjelmille näkyvä Windowsin leikepöytä.
Hmm.. vaikka kuinka kokeilen tuolla ClipBoard.SetTextillä kopioida ja liittää NotePadiin niin ei sinne tule mitään muuta taaskaan kuin se koodi, jonka sitä ennen kopioin tuosta Antin koodivinkistä. :P
Eikö tuo leikepöytä siis ole sama kuin Copy+Paste -systeemit, vai olenko käsittänyt asian aivan väärin?
hunajavohveli kirjoitti:
Eikö tuo leikepöytä siis ole sama kuin Copy+Paste -systeemit, vai olenko käsittänyt asian aivan väärin?
Ei, ihan oikeen oot ymmärtäny.
Syyllinen on näköjään tuo Clipboard.Clear, joka Antin vinkistä puuttuu. Jos sitä ei tyhjennä ensin, niin SetText ei tallenna sinne mitään.
Nytpähän tietää tuonki.
Aihe on jo aika vanha, joten et voi enää vastata siihen.